العودة إلى التحديثات
New releaseSep 8, 2026

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:

الفئات