
Docker IPsec VPN Server — Updated!
خادم VPN قائم على Docker يدعم IPsec/L2TP وCisco IPsec وIKEv2 مع توليد تلقائي لبيانات الاعتماد وإعدادات عميل متعددة المنصات.
English | 简体中文 | 繁體中文 | Русский
خادم IPsec VPN على Docker
صورة Docker لتشغيل خادم IPsec VPN، مع دعم IPsec/L2TP و Cisco IPsec و IKEv2.
مبنية على Alpine 3.23 أو Debian 12 مع Libreswan (برنامج IPsec VPN) و xl2tpd (برنامج L2TP الخفي).
يقوم VPN المعتمد على IPsec بتشفير حركة مرور شبكتك، بحيث لا يمكن لأي شخص بينك وبين خادم VPN التنصت على بياناتك أثناء انتقالها عبر الإنترنت. يكون هذا مفيدًا بشكل خاص عند استخدام شبكات غير آمنة، مثل المقاهي أو المطارات أو غرف الفنادق.
الميزات:
- يقوم تلقائيًا بإنشاء بيانات اعتماد VPN وإعدادات IKEv2 عند أول تشغيل
- يدعم IKEv2 باستخدام خوارزميات تشفير قوية وسريعة (مثل AES-GCM)
- ينشئ ملفات تعريف VPN لتكوين أجهزة iOS و macOS و Android تلقائيًا
- يدعم Windows و macOS و iOS و Android و Chrome OS و Linux كعملاء VPN
- يتضمن نصًا برمجيًا مساعدًا لإدارة مستخدمي IKEv2 والشهادات
- يتم بناء الصورة ونشرها تلقائيًا عبر GitHub Actions
- بيانات دائمة عبر وحدة تخزين Docker
- متعدد البنى:
linux/amd64،linux/arm64،linux/arm/v7
متاح أيضًا:
- VPN: IPsec بدون Docker، WireGuard، OpenVPN، Headscale
- الذكاء الاصطناعي: Self-Hosted AI Stack للنماذج اللغوية الكبيرة المحلية، والدردشة، و RAG، والصوت، وأدوات الذكاء الاصطناعي
- الكتب: دليل منشئ الذكاء الاصطناعي المستضاف ذاتيًا، أدوات الخصوصية في عصر الذكاء الاصطناعي
بدء سريع
استخدم هذا الأمر لإعداد خادم IPsec VPN على Docker:```bash
docker run
--name ipsec-vpn-server
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
سيتم إنشاء تفاصيل تسجيل الدخول إلى VPN بشكل عشوائي. انظر [استرداد تفاصيل تسجيل الدخول إلى VPN](#retrieve-vpn-login-details).
بدلاً من ذلك، يمكنك [إعداد VPN عبر IPsec بدون Docker](https://github.com/hwdsl2/setup-ipsec-vpn). لمعرفة المزيد حول كيفية استخدام هذه الصورة، اقرأ الأقسام أدناه.
## المجتمع
- 📬 [اشترك للحصول على تحديثات المشروع](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1–2 رسائل بريد إلكتروني شهريًا) — احصل على أدلة نشر VPN وAI مجانية (PDF)
- 💬 انضم إلى مجتمع [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) للمناقشات
- ⭐ امنح المستودع نجمة إذا وجدته مفيدًا — فهو يساعد الآخرين على اكتشافه
## المتطلبات
- خادم Linux بعنوان IP عام أو اسم DNS
- Docker مثبت
- منافذ VPN مفتوحة في جدار الحماية الخاص بك (UDP 500 و4500)
- يمكنك أيضًا استخدام [Podman](https://docs.podman.io) لتشغيل هذه الصورة، بعد إنشاء اسم مستعار لـ `docker`
**ملاحظة:** يمكن للمستخدمين المتقدمين استخدام هذه الصورة على macOS مع [Docker for Mac](https://docs.docker.com/desktop/setup/install/mac-install/). قبل استخدام وضع IPsec/L2TP، قد تحتاج إلى إعادة تشغيل الحاوية مرة واحدة باستخدام `docker restart ipsec-vpn-server`. هذه الصورة لا تدعم Docker for Windows.
## التنزيل
احصل على الإصدار الموثوق من [سجل Docker Hub](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/):```bash
docker pull hwdsl2/ipsec-vpn-server
بدلاً من ذلك، يمكنك التنزيل من Quay.io:```bash docker pull quay.io/hwdsl2/ipsec-vpn-server docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server
Supported platforms: `linux/amd64`, `linux/arm64` و `linux/arm/v7`.
يمكن للمستخدمين المتقدمين [البناء من الكود المصدري](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md) على GitHub.
### مقارنة الصور
تتوفر صورتان مبنيّتان مسبقًا. الصورة الافتراضية المبنية على Alpine يبلغ حجمها ~19 ميجابايت فقط.
| | Alpine-based | Debian-based |
| ----------------- | ------------------------ | ------------------------------ |
| اسم الصورة | hwdsl2/ipsec-vpn-server | hwdsl2/ipsec-vpn-server:debian |
| الحجم المضغوط | ~ 19 MB | ~ 62 MB |
| الصورة الأساسية | Alpine Linux 3.23 | Debian Linux 12 |
| المنصات | amd64, arm64, arm/v7 | amd64, arm64, arm/v7 |
| إصدار Libreswan | 5.3.2 | 5.3.2 |
| IPsec/L2TP | ✅ | ✅ |
| Cisco IPsec | ✅ | ✅ |
| IKEv2 | ✅ | ✅ |
**ملاحظة:** لاستخدام الصورة المبنية على Debian، استبدل كل `hwdsl2/ipsec-vpn-server` بـ `hwdsl2/ipsec-vpn-server:debian` في ملف README هذا. هذه الصور غير متوافقة حاليًا مع أنظمة Synology NAS.
<details>
<summary>
أريد استخدام إصدار Libreswan الأقدم 4.
</summary>
يُنصح عمومًا باستخدام أحدث إصدار من [Libreswan](https://libreswan.org/) وهو الإصدار 5، وهو الإصدار الافتراضي في هذا المشروع. ومع ذلك، إذا كنت تريد استخدام إصدار Libreswan الأقدم 4، يمكنك بناء صورة Docker من الكود المصدري:```bash
git clone https://github.com/hwdsl2/docker-ipsec-vpn-server
cd docker-ipsec-vpn-server
# Specify Libreswan version 4
sed -i 's/SWAN_VER=5\..*/SWAN_VER=4.15/' Dockerfile Dockerfile.debian
# To build Alpine-based image
docker build -t hwdsl2/ipsec-vpn-server .
# To build Debian-based image
docker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian .
كيفية استخدام هذه الصورة
متغيرات البيئة
ملاحظة: جميع المتغيرات في هذه الصورة اختيارية، مما يعني أنك لست بحاجة إلى إدخال أي متغير، ويمكنك الحصول على خادم IPsec VPN جاهز فورًا! للقيام بذلك، أنشئ ملف env فارغًا باستخدام touch vpn.env، وانتقل إلى القسم التالي.
تستخدم صورة Docker هذه المتغيرات التالية، التي يمكن تعريفها في ملف env (انظر مثال):```
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
سيؤدي هذا إلى إنشاء حساب مستخدم لتسجيل الدخول إلى VPN، ويمكن استخدامه بواسطة أجهزتك المتعددة[\*](#important-notes). يتم تحديد مفتاح IPsec المشترك مسبقًا (PSK) بواسطة متغير البيئة `VPN_IPSEC_PSK`. يتم تعريف اسم مستخدم VPN في `VPN_USER`، وكلمة مرور VPN محددة بواسطة `VPN_PASSWORD`.
يتم دعم مستخدمي VPN إضافيين، ويمكن الإعلان عنهم اختياريًا في ملف `env` الخاص بك مثل هذا. يجب فصل أسماء المستخدمين وكلمات المرور بمسافات، ولا يمكن أن تحتوي أسماء المستخدمين على تكرارات. سيتشارك جميع مستخدمي VPN في نفس PSK الخاص بـ IPsec.```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2
المتغيرات أعلاه مخصصة فقط لوضعي IPsec/L2TP وIPsec/XAuth ("Cisco IPsec"). بالنسبة لـ IKEv2، انظر تكوين واستخدام VPN عبر IKEv2.
ملاحظة: في ملف env الخاص بك، لا تضع "" أو '' حول القيم، ولا تضف مسافة حول =. لا تستخدم هذه الأحرف الخاصة داخل القيم: \ " '. يجب أن يتكون PSK الآمن لـ IPsec من 20 حرفًا عشوائيًا على الأقل.
ملاحظة: إذا قمت بتعديل ملف env بعد إنشاء حاوية Docker بالفعل، فيجب عليك إزالة الحاوية وإعادة إنشائها حتى تدخل التغييرات حيز التنفيذ. راجع تحديث صورة Docker.
متغيرات بيئة إضافية
يمكن للمستخدمين المتقدمين اختياريًا تحديد اسم DNS واسم عميل و/أو خوادم DNS مخصصة.
تعرّف على كيفية تحديد اسم DNS واسم عميل و/أو خوادم DNS مخصصة.
يمكن للمستخدمين المتقدمين اختياريًا تحديد اسم DNS لعنوان خادم IKEv2. يجب أن يكون اسم DNS اسم نطاق مؤهل بالكامل (FQDN). مثال:``` VPN_DNS_NAME=vpn.example.com
يمكنك تحديد اسم لعميل IKEv2 الأول. استخدم كلمة واحدة فقط، بدون أحرف خاصة باستثناء `-` و `_`. الافتراضي هو `vpnclient` إذا لم يتم تحديده.```
VPN_CLIENT_NAME=your_client_name
بشكل افتراضي، يتم ضبط العملاء لاستخدام Google Public DNS عندما يكون VPN نشطًا. يمكنك تحديد خادم (خوادم) DNS مخصص لجميع أوضاع VPN. مثال:``` VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1
لمزيد من التفاصيل وقائمة ببعض مزودي DNS العامين المشهورين، راجع [استخدام خوادم DNS بديلة](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).
افتراضيًا، لا تكون كلمة المرور مطلوبة عند استيراد إعدادات عميل IKEv2. يمكنك اختيار حماية ملفات إعدادات العميل باستخدام كلمة مرور عشوائية.```
VPN_PROTECT_CONFIG=yes
ملاحظة: المتغيرات أعلاه ليس لها أي تأثير في وضع IKEv2 إذا كان IKEv2 مضبوطًا مسبقًا داخل حاوية Docker. في هذه الحالة، يمكنك إزالة IKEv2 وإعداده مرة أخرى باستخدام خيارات مخصصة. راجع إعداد واستخدام VPN عبر IKEv2.
تشغيل خادم IPsec VPN
أنشئ حاوية Docker جديدة من هذه الصورة (استبدل ./vpn.env بملف env الخاص بك):```bash
docker run
--name ipsec-vpn-server
--env-file ./vpn.env
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
في هذا الأمر، نستخدم الخيار `-v` من `docker run` لإنشاء [وحدة تخزين Docker](https://docs.docker.com/storage/volumes/) جديدة باسم `ikev2-vpn-data`، وتثبيتها في المسار `/etc/ipsec.d` داخل الحاوية. سيتم الاحتفاظ ببيانات IKEv2 مثل الشهادات والمفاتيح في وحدة التخزين، وعندما تحتاج لاحقًا إلى إعادة إنشاء حاوية Docker، ما عليك سوى تحديد نفس وحدة التخزين مرة أخرى.
يُوصى بتمكين IKEv2 عند استخدام هذه الصورة. ومع ذلك، إذا كنت تفضل عدم تمكين IKEv2 واستخدام وضعي IPsec/L2TP وIPsec/XAuth ("Cisco IPsec") فقط للاتصال بالشبكة الافتراضية الخاصة VPN، فقم بإزالة الخيار `-v` الأول من أمر `docker run` أعلاه.
**ملاحظة:** يمكن للمستخدمين المتقدمين أيضًا [التشغيل بدون وضع الامتياز](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).
### استرداد تفاصيل تسجيل الدخول إلى VPN
إذا لم تحدد ملف `env` في أمر `docker run` أعلاه، فستكون قيمة `VPN_USER` افتراضيًا `vpnuser` وسيتم إنشاء كل من `VPN_IPSEC_PSK` و`VPN_PASSWORD` بشكل عشوائي. لاستردادهما، اعرض سجلات الحاوية:```bash
docker logs ipsec-vpn-server
ابحث عن هذه الأسطر في المخرجات:``` Connect to your new VPN with these details:
Server IP: your_vpn_server_ip IPsec PSK: your_ipsec_pre_shared_key Username: your_vpn_username Password: your_vpn_password
سيتضمن الإخراج أيضًا تفاصيل وضع IKEv2، إذا تم تفعيله.
(اختياري) قم بحفظ نسخة احتياطية من بيانات تسجيل دخول VPN المُولّدة (إن وُجدت) في الدليل الحالي:```bash
docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./
استخدام docker-compose```bash
cp vpn.env.example vpn.env
Edit vpn.env if needed, then:
docker compose up -d docker logs ipsec-vpn-server
مثال على `docker-compose.yml` (مرفق بالفعل):```yaml
volumes:
ikev2-vpn-data:
services:
vpn:
image: hwdsl2/ipsec-vpn-server
restart: always
env_file:
- ./vpn.env
ports:
- "500:500/udp"
- "4500:4500/udp"
privileged: true
hostname: ipsec-vpn-server
container_name: ipsec-vpn-server
volumes:
- ikev2-vpn-data:/etc/ipsec.d
- /lib/modules:/lib/modules:ro
الخطوات التالية
اقرأ هذا بلغات أخرى: English, 简体中文, 繁體中文, Русский.
اجعل جهاز الكمبيوتر أو الجهاز الخاص بك يستخدم VPN. يرجى الرجوع إلى:
إعداد واستخدام IKEv2 VPN (موصى به)
إعداد عملاء IPsec/XAuth ("Cisco IPsec") VPN
اقرأ 📖 كتاب VPN للوصول إلى محتوى إضافي.
استمتع بشبكة VPN الخاصة بك! ✨🎉🚀✨
ملاحظات هامة
مستخدمو Windows: بالنسبة لوضع IPsec/L2TP، يلزم تغيير السجل مرة واحدة إذا كان خادم VPN أو العميل خلف NAT (مثل جهاز التوجيه المنزلي).
يمكن استخدام نفس حساب VPN على أجهزتك المتعددة. ومع ذلك، نظرًا لقيود IPsec/L2TP، إذا كنت ترغب في توصيل أجهزة متعددة من خلف نفس NAT (مثل جهاز التوجيه المنزلي)، فيجب عليك استخدام وضع IKEv2 أو IPsec/XAuth.
إذا كنت ترغب في إضافة أو تعديل أو إزالة حسابات مستخدمي VPN، فقم أولاً بتحديث ملف env الخاص بك، ثم يجب عليك إزالة وإعادة إنشاء حاوية Docker باستخدام التعليمات الواردة في القسم التالي. يمكن للمستخدمين المتقدمين استخدام bind mount لملف env.
بالنسبة للخوادم التي تحتوي على جدار حماية خارجي (مثل EC2/GCE)، افتح منافذ UDP 500 و4500 لشبكة VPN. مستخدمو Aliyun، راجعوا #433.
يتم ضبط العملاء لاستخدام Google Public DNS عندما تكون شبكة VPN نشطة. إذا كان مزود DNS آخر مفضلًا، فاقرأ هذا القسم.
تحديث صورة Docker
لتحديث صورة Docker والحاوية، قم أولاً بـ تنزيل أحدث إصدار:```bash docker pull hwdsl2/ipsec-vpn-server
إذا كانت صورة Docker محدثة بالفعل، يجب أن ترى:```
Status: Image is up to date for hwdsl2/ipsec-vpn-server:latest
وإلا، سيقوم بتنزيل أحدث إصدار. لتحديث حاوية Docker الخاصة بك، دوّن أولاً تفاصيل تسجيل الدخول إلى VPN. ثم أزل حاوية Docker باستخدام docker rm -f ipsec-vpn-server. أخيرًا، أعد إنشاءها باستخدام التعليمات الواردة في كيفية استخدام هذه الصورة.
تكوين واستخدام IKEv2 VPN
يتميز وضع IKEv2 بتحسينات مقارنة بـ IPsec/L2TP و IPsec/XAuth ("Cisco IPsec")، ولا يتطلب PSK أو اسم مستخدم أو كلمة مرور. اقرأ المزيد هنا.
أولاً، تحقق من سجلات الحاوية لعرض تفاصيل IKEv2:```bash docker logs ipsec-vpn-server
**ملاحظة:** إذا لم تتمكن من العثور على تفاصيل IKEv2، فقد لا يكون IKEv2 مفعّلاً في الحاوية. جرّب تحديث صورة Docker والحاوية باستخدام التعليمات الواردة في قسم [تحديث صورة Docker](#update-docker-image).
أثناء إعداد IKEv2، يتم إنشاء عميل IKEv2 (بالاسم الافتراضي `vpnclient`)، مع تصدير إعداداته إلى `/etc/ipsec.d` **داخل الحاوية**. لنسخ ملف(ملفات) الإعداد إلى مضيف Docker:```bash
# Check contents of /etc/ipsec.d in the container
docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# Example: Copy a client config file from the container
# to the current directory on the Docker host
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./
الخطوات التالية: قم بتكوين أجهزتك لاستخدام VPN الخاص بـ IKEv2.
تعرّف على كيفية إدارة عملاء IKEv2.
يمكنك إدارة عملاء IKEv2 باستخدام السكربت المساعد. راجع الأمثلة أدناه. لتخصيص خيارات العميل، شغّل السكربت بدون وسائط.```bash
Add a new client (using default options)
docker exec -it ipsec-vpn-server ikev2.sh --addclient [client name]
Export configuration for an existing client
docker exec -it ipsec-vpn-server ikev2.sh --exportclient [client name]
List existing clients
docker exec -it ipsec-vpn-server ikev2.sh --listclients
Show usage
docker exec -it ipsec-vpn-server ikev2.sh -h
**ملاحظة:** إذا واجهت خطأ "executable file not found"، فاستبدل `ikev2.sh` أعلاه بـ `/opt/src/ikev2.sh`.
</details>
<details>
<summary>
تعلّم كيفية تغيير عنوان خادم IKEv2.
</summary>
في بعض الظروف، قد تحتاج إلى تغيير عنوان خادم IKEv2. على سبيل المثال، للتبديل إلى استخدام اسم DNS، أو بعد تغيّر عنوان IP للخادم. لتغيير عنوان خادم IKEv2، أولاً [افتح قشرة bash داخل الحاوية](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md)، ثم [اتبع هذه التعليمات](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md#change-ikev2-server-address). لاحظ أن سجلات الحاوية لن تُظهر عنوان خادم IKEv2 الجديد حتى تعيد تشغيل حاوية Docker.
</details>
<details>
<summary>
إزالة IKEv2 وإعداده مرة أخرى باستخدام خيارات مخصصة.
</summary>
في بعض الظروف، قد تحتاج إلى إزالة IKEv2 وإعداده مرة أخرى باستخدام خيارات مخصصة.
**تحذير:** ستُحذف جميع إعدادات IKEv2 بما في ذلك الشهادات والمفاتيح **نهائيًا**. **لا يمكن التراجع عن هذا**!
**الخيار 1:** قم بإزالة IKEv2 وإعداده مرة أخرى باستخدام البرنامج النصي المساعد.
لاحظ أن هذا سيتجاوز المتغيرات التي حددتها في ملف `env`، مثل `VPN_DNS_NAME` و`VPN_CLIENT_NAME`، ولن تعرض سجلات الحاوية بعد الآن معلومات محدّثة لـ IKEv2.```bash
# Remove IKEv2 and delete all IKEv2 configuration
docker exec -it ipsec-vpn-server ikev2.sh --removeikev2
# Set up IKEv2 again using custom options
docker exec -it ipsec-vpn-server ikev2.sh
الخيار 2: احذف ikev2-vpn-data وأعد إنشاء الحاوية.
- دوّن جميع تفاصيل تسجيل الدخول إلى VPN.
- احذف حاوية Docker:
docker rm -f ipsec-vpn-server. - احذف وحدة التخزين
ikev2-vpn-data:docker volume rm ikev2-vpn-data. - حدّث ملف
envوأضف خيارات IKEv2 مخصصة مثلVPN_DNS_NAMEوVPN_CLIENT_NAME، ثم أعد إنشاء الحاوية. راجع كيفية استخدام هذه الصورة.
الاستخدام المتقدم
انظر الاستخدام المتقدم.
- استخدام خوادم DNS بديلة
- التشغيل بدون الوضع المميز
- تحديد أوضاع VPN
- تفعيل السرية التامة للإرسال في IKEv2
- الوصول إلى حاويات أخرى على مضيف Docker
- تحديد عنوان IP العام لخادم VPN
- تعيين عناوين IP ثابتة لعملاء VPN
- تخصيص الشبكات الفرعية لـ VPN
- دعم IPv6
- تجزئة النفق (Split tunneling)
- حول وضع شبكة المضيف
- تفعيل سجلات Libreswan
- التحقق من حالة الخادم
- البناء من الكود المصدري
- قشرة Bash داخل الحاوية
- تركيب ملف env عبر Bind mount
- نشر آلية التحكم بالازدحام Google BBR
التفاصيل التقنية
يوجد خدمان قيد التشغيل: Libreswan (pluto) لـ IPsec VPN، وxl2tpd لدعم L2TP.
يدعم تكوين IPsec الافتراضي ما يلي:
- IPsec/L2TP باستخدام PSK
- IKEv1 مع PSK وXAuth ("Cisco IPsec")
- IKEv2
المنافذ المطلوبة: 500/udp و4500/udp (IPsec)
الترخيص
ملاحظة: المكونات البرمجية داخل الصورة المبنية مسبقًا (مثل Libreswan وxl2tpd) تخضع للتراخيص التي يختارها أصحاب حقوق النشر المعنيون. وبالنسبة لأي استخدام لصورة مبنية مسبقًا، تقع على مستخدم الصورة مسؤولية ضمان أن أي استخدام لهذه الصورة يتوافق مع أي تراخيص ذات صلة بجميع البرامج الموجودة بداخلها.
حقوق النشر (C) 2016-2026 Lin Song 
استنادًا إلى عمل Thomas Sarlandie (حقوق النشر 2012)

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي نَسب المُصنَّف - الترخيص بالمثل 3.0 غير المُقيَّد
الإسناد مطلوب: يرجى تضمين اسمي في أي عمل مشتق وإخباري كيف قمت بتحسينه!