
strongswan v6.1.0
strongSwan - VPN قائم على IPsec
إعداد strongSwan
نظرة عامة
strongSwan هو حل VPN مفتوح المصدر قائم على IPsec.
هذه الوثيقة ليست سوى مقدمة قصيرة لأمر strongSwan swanctl الذي يستخدم vici الحديث واجهة إعداد IKE متعددة الاستخدامات. أما الأمر ipsec المُهمل الذي يستخدم واجهة الإعداد القديمة stroke فموصوف هنا. للحصول على معلومات أكثر تفصيلاً، راجع صفحات الدليل (man pages)، وموقع التوثيق الجديد، والويكي القديم.
بدء سريع
تم إصدار الشهادات للمستخدمين والمضيفين والبوابات من قِبل مرجع شهادات (CA) خيالي لـ strongSwan. في سيناريوهات الأمثلة لدينا، يجب أن تكون شهادة CA strongswanCert.pem حاضرة على جميع نقاط نهاية VPN حتى يمكن المصادقة على الأقران. بالنسبة لتطبيق VPN الخاص بك، يمكنك إما استخدام شهادات من أي مرجع شهادات تابع لجهة خارجية أو توليد المفاتيح الخاصة والشهادات اللازمة بنفسك باستخدام أداة pki الخاصة بـ strongSwan، وسيتم شرح استخدامها في أحد الأقسام أدناه.
حالة موقع-إلى-موقع
في هذا السيناريو، تقوم بوابتا أمان moon و_sun_ بربط الشبكتين الفرعيتين moon-net و_sun-net_ ببعضهما عبر نفق VPN يُقام بين البوابتين:
10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
moon-net moon sun sun-net
الإعداد على البوابة moon:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.2
local {
auth = pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
local_ts = 10.1.0.0/16
remote_ts = 10.2.0.0/16
start_action = trap
}
}
}
}
الإعداد على البوابة sun:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
net-net {
local_ts = 10.2.0.0/16
remote_ts = 10.1.0.0/16
start_action = trap
}
}
}
}
الهويتان المحلية والبعيدة المستخدمتان في هذا السيناريو هما subjectDistinguishedNames الموجودان في شهادات الكيان النهائي. يتم تحميل الشهادات والمفاتيح الخاصة في الخفي charon بالأمر
swanctl --load-creds
بينما
swanctl --load-conns
يقوم بتحميل الاتصالات المعرّفة في swanctl.conf. مع start_action = trap، يتم إعداد اتصال IPsec تلقائيًا عند أول حزمة IP ذات حمولة نصية صريحة تريد المرور عبر النفق.
حالة مضيف-إلى-مضيف
هذا إعداد بين مضيفين منفردين لا توجد خلفهما شبكة فرعية. على الرغم من أن وضع النقل لـ IPsec سيكون كافيًا لاتصالات المضيف-إلى-مضيف، إلا أننا سنستخدم وضع النفق الافتراضي لـ IPsec.
| 192.168.0.1 | === | 192.168.0.2 |
moon sun
الإعداد على المضيف moon:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.2
local {
auth=pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
start_action = trap
}
}
}
}
الإعداد على المضيف sun:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
host-host {
start_action = trap
}
}
}
}
حالة Roadwarrior
هذه حالة شائعة جدًا حيث تخدم بوابة strongSwan عددًا عشوائيًا من عملاء VPN البعيدين الذين عادةً ما تكون عناوين IP الخاصة بهم ديناميكية.
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
moon-net moon carol
الإعداد على البوابة moon:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = pubkey
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
}
}
الإعداد على Roadwarrior carol:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/carolCert.pem
/etc/swanctl/private/carolKey.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
local {
auth = pubkey
certs = carolCert.pem
id = [email protected]
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
بالنسبة إلى remote_addrs، تم اختيار اسم المضيف moon.strongswan.org والذي سيتم حله بواسطة DNS وقت التشغيل إلى عنوان IP الوجهة المقابل. في هذا السيناريو، هوية Roadwarrior carol هي عنوان البريد الإلكتروني [email protected] والذي يجب تضمينه كـ subjectAlternativeName في شهادة Roadwarrior carolCert.pem.
حالة Roadwarrior مع IP افتراضي
عادةً ما يكون لدى عملاء Roadwarrior عناوين IP ديناميكية يعينها مزود خدمة الإنترنت المتصلين به حاليًا. من أجل تبسيط التوجيه من moon-net عائدًا إلى عميل الوصول البعيد carol، سيكون من المرغوب فيه أن يكون لدى Roadwarrior عنوان IP داخلي مُختار من مجموعة عناوين محددة مسبقًا.
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x | -- 10.3.0.1
moon-net moon carol virtual IP
في مثالنا، يتم اختيار عنوان IP الافتراضي من مجموعة العناوين 10.3.0.0/16 والتي يمكن إعدادها بإضافة القسم
pools {
rw_pool {
addrs = 10.3.0.0/16
}
}
إلى swanctl.conf الخاص بالبوابة، حيث يتم تحميلها في الخفي charon باستخدام الأمر
swanctl --load-pools
لطلب عنوان IP من هذه المجموعة، يمكن لـ Roadwarrior استخدام وضع إعداد IKEv1 (mode config) أو حمولات إعداد IKEv2. الإعداد لكليهما هو نفسه
vips = 0.0.0.0
الإعداد على البوابة moon: