العودة إلى التحديثات
UpdatedAug 1, 2026

Docker IPsec VPN Server — Updated!

خادم VPN قائم على Docker يدعم IPsec/L2TP وCisco IPsec وIKEv2، مع توليد تلقائي لبيانات الاعتماد وإعداد عملاء لمنصات متعددة.

مشاركة

English | 简体中文 | 繁體中文 | Русский

خادم IPsec VPN على Docker

Build Status GitHub Stars Docker Stars Docker Pulls

صورة Docker لتشغيل خادم IPsec VPN، مع IPsec/L2TP وCisco IPsec وIKEv2.

مبنية على Alpine 3.23 أو Debian 12 مع Libreswan (برنامج IPsec VPN) وxl2tpd (خادم L2TP).

يقوم IPsec VPN بتشفير حركة مرور الشبكة لديك، بحيث لا يمكن لأي شخص بينك وبين خادم 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

متاح أيضًا:

بدء سريع

استخدم هذا الأمر لإعداد خادم 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).

بدلاً من ذلك، يمكنك [إعداد IPsec VPN بدون Docker](https://github.com/hwdsl2/setup-ipsec-vpn). لمعرفة المزيد حول كيفية استخدام هذه الصورة، اقرأ الأقسام أدناه.

## المجتمع

- 📬 [اشترك للحصول على تحديثات المشروع](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1–2 رسائل بريد إلكتروني شهريًا) — احصل على أدلة مجانية لنشر VPN والذكاء الاصطناعي (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

المنصات المدعومة: `linux/amd64` و `linux/arm64` و `linux/arm/v7`.

يمكن للمستخدمين المتقدمين [البناء من الكود المصدري](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#build-from-source-code) على GitHub.

### مقارنة الصور

تتوفر صورتان مبنيتان مسبقًا. الصورة الافتراضية المبنية على Alpine يبلغ حجمها حوالي 19 ميجابايت فقط.

|                   | المبنية على Alpine             | المبنية على Debian                   |
| ----------------- | ------------------------ | ------------------------------ |
| اسم الصورة        | hwdsl2/ipsec-vpn-server  | hwdsl2/ipsec-vpn-server:debian |
| الحجم المضغوط   | ~ 19 ميجابايت                  | ~ 62 ميجابايت                        |
| الصورة الأساسية        | Alpine Linux 3.23        | Debian Linux 12                |
| المنصات         | amd64, arm64, arm/v7     | amd64, arm64, arm/v7           |
| إصدار Libreswan | 5.4                      | 5.4                            |
| 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 نفس مفتاح 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

بشكل افتراضي، يتم ضبط العملاء على استخدام DNS العام من Google عندما يكون 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#run-without-privileged-mode).

### استرجاع تفاصيل تسجيل الدخول إلى 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/L2TP VPN

تكوين عملاء IPsec/XAuth ("Cisco IPsec") VPN

اقرأ 📖 كتاب VPN للوصول إلى محتوى إضافي.

استمتع بـ VPN الخاص بك! ✨🎉🚀✨

ملاحظات مهمة

مستخدمو Windows: بالنسبة لوضع IPsec/L2TP، يلزم تغيير تسجيل لمرة واحدة إذا كان خادم VPN أو العميل خلف NAT (مثل جهاز التوجيه المنزلي).

يمكن استخدام نفس حساب VPN بواسطة أجهزتك المتعددة. ومع ذلك، نظرًا لقيود IPsec/L2TP، إذا كنت ترغب في توصيل أجهزة متعددة من خلف نفس NAT (مثل جهاز التوجيه المنزلي)، فيجب عليك استخدام وضع IKEv2 أو IPsec/XAuth.

إذا كنت ترغب في إضافة أو تعديل أو إزالة حسابات مستخدمي VPN، فقم أولاً بتحديث ملف env الخاص بك، ثم يجب عليك إزالة وإعادة إنشاء حاوية Docker باستخدام التعليمات الواردة في القسم التالي. يمكن للمستخدمين المتقدمين تثبيت الربط لملف 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 لـ IPsec أو اسم مستخدم أو كلمة مرور. اقرأ المزيد هنا.

أولاً، تحقق من سجلات الحاوية لعرض تفاصيل 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#bash-shell-inside-container)، ثم [اتبع هذه التعليمات](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 وإعادة إنشاء الحاوية.

  1. اكتب جميع تفاصيل تسجيل الدخول إلى VPN.
  2. أزل حاوية Docker: docker rm -f ipsec-vpn-server.
  3. أزل وحدة التخزين ikev2-vpn-data: docker volume rm ikev2-vpn-data.
  4. حدّث ملف env الخاص بك وأضف خيارات IKEv2 مخصصة مثل VPN_DNS_NAME وVPN_CLIENT_NAME، ثم أعد إنشاء الحاوية. راجع كيفية استخدام هذه الصورة.

الاستخدام المتقدم

راجع الاستخدام المتقدم.

التفاصيل الفنية

هناك خدمتان قيد التشغيل: 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 عرض ملفي الشخصي على LinkedIn
استنادًا إلى عمل Thomas Sarlandie (حقوق النشر 2012)

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

الفئات