{"id":13552201,"url":"https://github.com/hwdsl2/docker-ipsec-vpn-server","last_synced_at":"2026-10-18T23:07:07.808Z","repository":{"id":38344318,"uuid":"59257993","full_name":"hwdsl2/docker-ipsec-vpn-server","owner":"hwdsl2","description":"Docker image to run an IPsec VPN server, with IPsec/L2TP, Cisco IPsec and IKEv2. Auto-generates server config and supports VPN client setup on Linux, Windows, macOS, iOS and Android.","archived":false,"fork":false,"pushed_at":"2026-10-08T13:29:48.000Z","size":1262,"stargazers_count":7147,"open_issues_count":0,"forks_count":1461,"subscribers_count":114,"default_branch":"master","last_synced_at":"2026-10-11T17:54:06.130Z","etag":null,"topics":["cisco-ipsec","docker","docker-compose","docker-image","encryption","ikev2","ipsec","l2tp","libreswan","linux","network","privacy","raspberry-pi","security","self-hosted","strongswan","vpn","vpn-client","vpn-server"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/hwdsl2/ipsec-vpn-server","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hwdsl2.png","metadata":{"files":{"readme":"README-ru.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"hwdsl2","ko_fi":"hwdsl2"}},"created_at":"2016-05-20T02:19:32.000Z","updated_at":"2026-10-11T12:41:53.000Z","dependencies_parsed_at":"2026-09-07T07:52:11.506Z","dependency_job_id":null,"html_url":"https://github.com/hwdsl2/docker-ipsec-vpn-server","commit_stats":{"total_commits":621,"total_committers":8,"mean_commits":77.625,"dds":0.01610305958132041,"last_synced_commit":"42228bf2d9c24f9eff3a25ed9a2c84f41b0ed16c"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hwdsl2/docker-ipsec-vpn-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hwdsl2%2Fdocker-ipsec-vpn-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hwdsl2%2Fdocker-ipsec-vpn-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hwdsl2%2Fdocker-ipsec-vpn-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hwdsl2%2Fdocker-ipsec-vpn-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hwdsl2","download_url":"https://codeload.github.com/hwdsl2/docker-ipsec-vpn-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hwdsl2%2Fdocker-ipsec-vpn-server/sbom","scorecard":{"id":474596,"data":{"date":"2025-08-11","repo":{"name":"github.com/hwdsl2/docker-ipsec-vpn-server","commit":"94b077d5c2c1533fabbaf0077c8959cedd83f5c6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":6,"reason":"6 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/buildx.yml:1","Warn: no topLevel permission defined: .github/workflows/check_update.yml:1","Warn: no topLevel permission defined: .github/workflows/cron-alpine.yml:1","Warn: no topLevel permission defined: .github/workflows/cron-debian.yml:1","Warn: no topLevel permission defined: .github/workflows/main-alpine.yml:1","Warn: no topLevel permission defined: .github/workflows/main-debian.yml:1","Warn: no topLevel permission defined: .github/workflows/shellcheck.yml:1","Warn: no topLevel permission defined: .github/workflows/vpn_test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buildx.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/hwdsl2/docker-ipsec-vpn-server/buildx.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buildx.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/hwdsl2/docker-ipsec-vpn-server/buildx.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check_update.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/hwdsl2/docker-ipsec-vpn-server/check_update.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/shellcheck.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/hwdsl2/docker-ipsec-vpn-server/shellcheck.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vpn_test.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/hwdsl2/docker-ipsec-vpn-server/vpn_test.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:10: pin your Docker image by updating alpine:3.21 to alpine:3.21@sha256:b6a6be0ff92ab6db8acd94f5d1b7a6c2f0f5d10ce3c24af348d333ac6da80685","Warn: containerImage not pinned by hash: Dockerfile.debian:10: pin your Docker image by updating debian:bookworm-slim to debian:bookworm-slim@sha256:b1a741487078b369e78119849663d7f1a5341ef2768798f7b7406c4240f86aef","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-19T14:57:32.494Z","repository_id":38344318,"created_at":"2025-08-19T14:57:32.494Z","updated_at":"2025-08-19T14:57:32.494Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38343411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-18T02:00:06.448Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cisco-ipsec","docker","docker-compose","docker-image","encryption","ikev2","ipsec","l2tp","libreswan","linux","network","privacy","raspberry-pi","security","self-hosted","strongswan","vpn","vpn-client","vpn-server"],"created_at":"2024-08-01T12:02:00.471Z","updated_at":"2026-10-18T23:07:07.800Z","avatar_url":"https://github.com/hwdsl2.png","language":"Shell","funding_links":["https://github.com/sponsors/hwdsl2","https://ko-fi.com/hwdsl2","https://ko-fi.com/post/Support-this-project-and-get-access-to-supporter-o-O5O7FVF8J)."],"categories":["Shell","Shell (473)","\u003ca id=\"d62a971d37c69db9f3b9187318c3921a\"\u003e\u003c/a\u003e工具","docker","vpn"],"sub_categories":["\u003ca id=\"8ea8f890cf767c3801b5e7951fca3570\"\u003e\u003c/a\u003e公网访问局域网"],"readme":"[English](README.md) | [简体中文](README-zh.md) | [繁體中文](README-zh-Hant.md) | [Русский](README-ru.md)\n\n# IPsec VPN сервер на Docker\n\n[![Build Status](https://github.com/hwdsl2/docker-ipsec-vpn-server/actions/workflows/main-alpine.yml/badge.svg)](https://github.com/hwdsl2/docker-ipsec-vpn-server/actions/workflows/main-alpine.yml) [![GitHub Stars](https://raw.githubusercontent.com/hwdsl2/badges/main/img/github-stars-docker-ipsec-vpn-server.svg)](https://github.com/hwdsl2/docker-ipsec-vpn-server/stargazers) [![Docker Stars](https://raw.githubusercontent.com/hwdsl2/badges/main/img/docker-stars-ipsec-vpn-server.svg)](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/) [![Docker Pulls](https://raw.githubusercontent.com/hwdsl2/badges/main/img/docker-pulls-ipsec-vpn-server.svg)](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/)\n\nDocker-образ для запуска сервера IPsec VPN с поддержкой IPsec/L2TP, Cisco IPsec и IKEv2.\n\nОснован на Alpine 3.23 или Debian 12 с использованием [Libreswan](https://libreswan.org) (программное обеспечение IPsec VPN) и [xl2tpd](https://github.com/xelerance/xl2tpd) (демон L2TP).\n\nIPsec VPN шифрует сетевой трафик, поэтому никто между вами и VPN-сервером не сможет перехватывать ваши данные во время их передачи через Интернет. Это особенно полезно при использовании незащищённых сетей, например в кофейнях, аэропортах или гостиничных номерах.\n\n**Возможности:**\n\n- Автоматическая генерация учётных данных VPN и конфигурации IKEv2 при первом запуске\n- Поддержка IKEv2 с мощными и быстрыми шифрами (например, AES-GCM)\n- Генерация VPN-профилей для автоматической настройки устройств iOS, macOS и Android\n- Поддержка Windows, macOS, iOS, Android, Chrome OS и Linux в качестве VPN-клиентов\n- Включает вспомогательный скрипт для управления пользователями и сертификатами IKEv2\n- Автоматически собирается и публикуется через [GitHub Actions](https://github.com/hwdsl2/docker-ipsec-vpn-server/actions)\n- Постоянное хранение данных через Docker volume\n- Поддержка нескольких архитектур: `linux/amd64`, `linux/arm64`, `linux/arm/v7`\n\n**Также доступно:**\n\n- VPN: [IPsec без Docker](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-ru.md), [WireGuard](https://github.com/hwdsl2/docker-wireguard/blob/main/docs/README-ru.md), [OpenVPN](https://github.com/hwdsl2/docker-openvpn/blob/main/docs/README-ru.md), [Headscale](https://github.com/hwdsl2/docker-headscale/blob/main/docs/README-ru.md)\n- AI: [Стек ИИ на своём сервере](https://github.com/hwdsl2/self-hosted-ai-stack/blob/main/docs/README-ru.md) для локальных LLM, чата, RAG, голосовых функций и инструментов ИИ\n\n\u003e 📘 Хотите развернуть ИИ на собственном сервере? [The Self-Hosted AI Builder’s Guide](https://books2read.com/aiguide?store=amazon): практическое руководство по созданию, защите и эксплуатации собственного приватного ИИ-стека.\n\n## Быстрый старт\n\nИспользуйте эту команду для настройки сервера IPsec VPN в Docker:\n\n```bash\ndocker run \\\n    --name ipsec-vpn-server \\\n    --restart=always \\\n    -v ikev2-vpn-data:/etc/ipsec.d \\\n    -v /lib/modules:/lib/modules:ro \\\n    -p 500:500/udp \\\n    -p 4500:4500/udp \\\n    -d --privileged \\\n    hwdsl2/ipsec-vpn-server\n```\n\nДанные для входа в VPN будут сгенерированы случайным образом. См. раздел [Получение данных для входа в VPN](#получение-данных-для-входа-в-vpn).\n\nВ качестве альтернативы вы можете [настроить IPsec VPN без Docker](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-ru.md). Чтобы узнать больше о том, как использовать этот образ, прочитайте разделы ниже.\n\n## Сообщество\n\n- 📬 [Получайте новости проектов и бесплатные руководства по развёртыванию](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn-ru) (1–2 письма в месяц; руководства в формате PDF на английском языке)\n- 💬 Присоединяйтесь к сообществу [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) для обсуждений и демонстрации проектов\n- ⭐ Поставьте звезду репозиторию, если он оказался вам полезен — это поможет другим пользователям его найти.\n\n## Требования\n\n- Linux-сервер с публичным IP-адресом или DNS-именем\n- Установленный Docker\n- Открытые VPN-порты в брандмауэре (UDP 500 и 4500)\n- Вы также можете использовать [Podman](https://docs.podman.io) для запуска этого образа после создания псевдонима для `docker`\n\n**Примечание:** Продвинутые пользователи могут использовать этот образ на macOS с помощью [Docker for Mac](https://docs.docker.com/desktop/setup/install/mac-install/). Перед использованием режима IPsec/L2TP может потребоваться один раз перезапустить контейнер с помощью `docker restart ipsec-vpn-server`. Этот образ не поддерживает Docker for Windows.\n\n## Загрузка\n\nПолучите доверенную сборку из [реестра Docker Hub](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/):\n\n```bash\ndocker pull hwdsl2/ipsec-vpn-server\n```\n\nВ качестве альтернативы можно скачать из [Quay.io](https://quay.io/repository/hwdsl2/ipsec-vpn-server):\n\n```bash\ndocker pull quay.io/hwdsl2/ipsec-vpn-server\ndocker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server\n```\n\nПоддерживаемые платформы: `linux/amd64`, `linux/arm64` и `linux/arm/v7`.\n\nПродвинутые пользователи могут [собрать образ из исходного кода](docs/advanced-usage.md#build-from-source-code) на GitHub.\n\n### Сравнение образов\n\nДоступны два предварительно собранных образа. Образ на базе Alpine используется по умолчанию и имеет размер всего около ~19 MB.\n\n|                   | На базе Alpine            | На базе Debian                 |\n| ----------------- | ------------------------- | ------------------------------ |\n| Имя образа        | hwdsl2/ipsec-vpn-server   | hwdsl2/ipsec-vpn-server:debian |\n| Сжатый размер     | ~ 19 MB                   | ~ 62 MB                        |\n| Базовый образ     | Alpine Linux 3.23         | Debian Linux 12                |\n| Платформы         | amd64, arm64, arm/v7      | amd64, arm64, arm/v7           |\n| Версия Libreswan  | 5.4.1                     | 5.4.1                          |\n| IPsec/L2TP        | ✅                         | ✅                              |\n| Cisco IPsec       | ✅                         | ✅                              |\n| IKEv2             | ✅                         | ✅                              |\n\n**Примечание:** Чтобы использовать образ на базе Debian, замените каждое `hwdsl2/ipsec-vpn-server` на `hwdsl2/ipsec-vpn-server:debian` в этом README. В настоящее время эти образы несовместимы с системами Synology NAS.\n\n\u003cdetails\u003e\n\u003csummary\u003e\nЯ хочу использовать более старую версию Libreswan 4.\n\u003c/summary\u003e\n\nОбычно рекомендуется использовать последнюю версию [Libreswan](https://libreswan.org/) 5, которая является версией по умолчанию в этом проекте. Однако если вы хотите использовать более старую версию Libreswan 4, вы можете собрать Docker-образ из исходного кода:\n\n```bash\ngit clone https://github.com/hwdsl2/docker-ipsec-vpn-server\ncd docker-ipsec-vpn-server\n# Указать версию Libreswan 4\nsed -i 's/SWAN_VER=5\\..*/SWAN_VER=4.15/' Dockerfile Dockerfile.debian\n# Сборка образа на базе Alpine\ndocker build -t hwdsl2/ipsec-vpn-server .\n# Сборка образа на базе Debian\ndocker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian .\n```\n\u003c/details\u003e\n\n## Как использовать этот образ\n\n### Переменные окружения\n\n**Примечание:** Все переменные для этого образа являются необязательными, что означает, что вам не нужно указывать ни одну переменную — и вы сможете получить работающий сервер IPsec VPN «из коробки»! Для этого создайте пустой файл `env` с помощью `touch vpn.env`, а затем перейдите к следующему разделу.\n\nЭтот Docker-образ использует следующие переменные, которые можно объявить в файле `env` (см. [пример](vpn.env.example)):\n\n```\nVPN_IPSEC_PSK=your_ipsec_pre_shared_key\nVPN_USER=your_vpn_username\nVPN_PASSWORD=your_vpn_password\n```\n\nЭто создаст учетную запись пользователя для входа в VPN, которую можно использовать на нескольких ваших устройствах[\\*](#важные-замечания). IPsec PSK (предварительно общий ключ) задаётся переменной окружения `VPN_IPSEC_PSK`. Имя пользователя VPN задаётся в `VPN_USER`, а пароль VPN указывается в `VPN_PASSWORD`.\n\nПоддерживаются дополнительные пользователи VPN, и их можно при желании объявить в вашем файле `env` следующим образом. Имена пользователей и пароли должны быть разделены пробелами, а имена пользователей не могут повторяться. Все пользователи VPN будут использовать один и тот же IPsec PSK.\n\n```\nVPN_ADDL_USERS=additional_username_1 additional_username_2\nVPN_ADDL_PASSWORDS=additional_password_1 additional_password_2\n```\n\nПеременные выше используются только для режимов IPsec/L2TP и IPsec/XAuth («Cisco IPsec»). Для IKEv2 см. [Настройка и использование IKEv2 VPN](#настройка-и-использование-ikev2-vpn).\n\n\u003e [!IMPORTANT]\n\u003e В файле `env` указывайте значения без кавычек и не добавляйте пробелы вокруг `=`. Значения не должны содержать символы `\\`, `\"` или `'`. Надёжный IPsec PSK должен состоять как минимум из 20 случайных символов.\n\n**Примечание:** Если вы измените файл `env` после того, как Docker-контейнер уже создан, необходимо удалить и создать контейнер заново, чтобы изменения вступили в силу. См. раздел [Обновление Docker-образа](#обновление-docker-образа).\n\n### Дополнительные переменные окружения\n\nПродвинутые пользователи могут при желании указать DNS-имя, имя клиента и/или собственные DNS-серверы.\n\n\u003cdetails\u003e\n\u003csummary\u003e\nУзнайте, как указать DNS-имя, имя клиента и/или собственные DNS-серверы.\n\u003c/summary\u003e\n\nПродвинутые пользователи могут при желании указать DNS-имя для адреса сервера IKEv2. DNS-имя должно быть полным доменным именем (FQDN). Пример:\n\n```\nVPN_DNS_NAME=vpn.example.com\n```\n\nВы можете указать имя для первого клиента IKEv2. Используйте только одно слово, без специальных символов, кроме `-` и `_`. По умолчанию используется `vpnclient`, если имя не указано.\n\n```\nVPN_CLIENT_NAME=your_client_name\n```\n\nПо умолчанию клиенты используют [Google Public DNS](https://developers.google.com/speed/public-dns/) при активном VPN. Вы можете указать собственные DNS-серверы для всех режимов VPN. Пример:\n\n```\nVPN_DNS_SRV1=1.1.1.1\nVPN_DNS_SRV2=1.0.0.1\n```\n\nДля получения дополнительных сведений и списка популярных публичных DNS-провайдеров см. [Использование альтернативных DNS-серверов](docs/advanced-usage.md).\n\nПо умолчанию пароль не требуется при импорте конфигурации клиента IKEv2. Вы можете защитить файлы конфигурации клиента случайным паролем.\n\n```\nVPN_PROTECT_CONFIG=yes\n```\n\n**Примечание:** Переменные выше не влияют на режим IKEv2, если IKEv2 уже настроен в Docker-контейнере. В этом случае вы можете удалить IKEv2 и настроить его снова с пользовательскими параметрами. См. [Настройка и использование IKEv2 VPN](#настройка-и-использование-ikev2-vpn).\n\u003c/details\u003e\n\n### Запуск сервера IPsec VPN\n\nСоздайте новый Docker-контейнер из этого образа (замените `./vpn.env` на ваш собственный файл `env`):\n\n```bash\ndocker run \\\n    --name ipsec-vpn-server \\\n    --env-file ./vpn.env \\\n    --restart=always \\\n    -v ikev2-vpn-data:/etc/ipsec.d \\\n    -v /lib/modules:/lib/modules:ro \\\n    -p 500:500/udp \\\n    -p 4500:4500/udp \\\n    -d --privileged \\\n    hwdsl2/ipsec-vpn-server\n```\n\nВ этой команде используется параметр `-v` команды `docker run`, чтобы создать новый [Docker volume](https://docs.docker.com/storage/volumes/) с именем `ikev2-vpn-data` и смонтировать его в `/etc/ipsec.d` внутри контейнера. Данные, связанные с IKEv2 (такие как сертификаты и ключи), будут сохраняться в этом томе. Позже, если вам потребуется заново создать Docker-контейнер, просто укажите тот же том снова.\n\nРекомендуется включить IKEv2 при использовании этого образа. Однако если вы предпочитаете не использовать IKEv2 и подключаться к VPN только через режимы IPsec/L2TP и IPsec/XAuth («Cisco IPsec»), удалите первый параметр `-v` из команды `docker run`, приведённой выше.\n\n**Примечание:** Продвинутые пользователи также могут [запускать контейнер без привилегированного режима](docs/advanced-usage.md#run-without-privileged-mode).\n\n### Получение данных для входа в VPN\n\nЕсли вы не указали файл `env` в команде `docker run` выше, значение `VPN_USER` по умолчанию будет `vpnuser`, а `VPN_IPSEC_PSK` и `VPN_PASSWORD` будут сгенерированы случайным образом. Чтобы получить их, просмотрите журналы контейнера:\n\n```bash\ndocker logs ipsec-vpn-server\n```\n\nНайдите в выводе следующие строки:\n\n```\nConnect to your new VPN with these details:\n\nServer IP: your_vpn_server_ip\nIPsec PSK: your_ipsec_pre_shared_key\nUsername: your_vpn_username\nPassword: your_vpn_password\n```\n\nВывод также будет содержать сведения для режима IKEv2, если он включён.\n\n(Необязательно) Сохраните сгенерированные данные для входа в VPN (если они есть) в текущий каталог:\n\n```bash\ndocker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./\n```\n\n## Использование docker-compose\n\n```bash\ncp vpn.env.example vpn.env\n# При необходимости отредактируйте vpn.env, затем:\ndocker compose up -d\ndocker logs ipsec-vpn-server\n```\n\nПример `docker-compose.yml` (уже включён):\n\n```yaml\nvolumes:\n  ikev2-vpn-data:\n\nservices:\n  vpn:\n    image: hwdsl2/ipsec-vpn-server\n    restart: always\n    env_file:\n      - ./vpn.env\n    ports:\n      - \"500:500/udp\"\n      - \"4500:4500/udp\"\n    privileged: true\n    hostname: ipsec-vpn-server\n    container_name: ipsec-vpn-server\n    volumes:\n      - ikev2-vpn-data:/etc/ipsec.d\n      - /lib/modules:/lib/modules:ro\n```\n\n## Следующие шаги\n\n*Прочитать на других языках: [English](README.md#next-steps), [简体中文](README-zh.md#下一步), [繁體中文](README-zh-Hant.md#下一步), [Русский](README-ru.md#следующие-шаги).*\n\nНастройте ваш компьютер или устройство для использования VPN. Пожалуйста, обратитесь к следующим инструкциям (на английском языке):\n\n**[Настройка и использование IKEv2 VPN (рекомендуется)](#настройка-и-использование-ikev2-vpn)**\n\n**[Настройка клиентов IPsec/L2TP VPN](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients.md)**\n\n**[Настройка клиентов IPsec/XAuth («Cisco IPsec»)](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth.md)**\n\n**Прочитайте [📘 книгу о VPN](docs/vpn-book.md), чтобы получить доступ к [дополнительному контенту](https://ko-fi.com/post/Support-this-project-and-get-access-to-supporter-o-O5O7FVF8J).**\n\nНаслаждайтесь собственным VPN! :sparkles::tada::rocket::sparkles:\n\n## Важные замечания\n\n**Пользователи Windows**: для режима IPsec/L2TP требуется [одноразовое изменение реестра](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients.md#windows-error-809), если VPN-сервер или клиент находится за NAT (например, домашним роутером).\n\nОдна и та же учетная запись VPN может использоваться на нескольких ваших устройствах. Однако из-за ограничения IPsec/L2TP, если вы хотите подключить несколько устройств из-за одного NAT (например, домашнего роутера), необходимо использовать режим [IKEv2](#настройка-и-использование-ikev2-vpn) или [IPsec/XAuth](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth.md).\n\nЕсли вы хотите добавить, изменить или удалить учетные записи пользователей VPN, сначала обновите файл `env`, затем удалите и заново создайте Docker-контейнер, следуя инструкциям из [следующего раздела](#обновление-docker-образа). Продвинутые пользователи могут использовать [bind mount](docs/advanced-usage.md#bind-mount-the-env-file) для файла `env`.\n\nДля серверов с внешним файрволом (например, [EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html)/[GCE](https://cloud.google.com/vpc/docs/firewalls)) откройте UDP-порты 500 и 4500 для VPN. Пользователям Aliyun см. [#433](https://github.com/hwdsl2/setup-ipsec-vpn/issues/433).\n\nКлиенты настроены использовать [Google Public DNS](https://developers.google.com/speed/public-dns/) при активном VPN. Если вы предпочитаете другого DNS-провайдера, прочитайте [этот раздел](docs/advanced-usage.md#use-alternative-dns-servers).\n\n## Обновление Docker-образа\n\nЧтобы обновить Docker-образ и контейнер, сначала [загрузите](#загрузка) последнюю версию:\n\n```bash\ndocker pull hwdsl2/ipsec-vpn-server\n```\n\nЕсли Docker-образ уже обновлён, вы увидите:\n\n```\nStatus: Image is up to date for hwdsl2/ipsec-vpn-server:latest\n```\n\nВ противном случае будет загружена последняя версия. Чтобы обновить Docker-контейнер, сначала запишите все ваши [данные для входа в VPN](#получение-данных-для-входа-в-vpn). Затем удалите контейнер Docker с помощью `docker rm -f ipsec-vpn-server`. После этого создайте его заново, следуя инструкциям из раздела [Как использовать этот образ](#как-использовать-этот-образ).\n\n## Настройка и использование IKEv2 VPN\n\nРежим IKEv2 имеет преимущества по сравнению с IPsec/L2TP и IPsec/XAuth («Cisco IPsec») и не требует IPsec PSK, имени пользователя или пароля. Подробнее можно прочитать [здесь](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md).\n\nСначала проверьте журналы контейнера, чтобы увидеть сведения о IKEv2:\n\n```bash\ndocker logs ipsec-vpn-server\n```\n\n**Примечание:** Если вы не можете найти сведения о IKEv2, возможно, IKEv2 не включён в контейнере. Попробуйте обновить Docker-образ и контейнер, следуя инструкциям из раздела [Обновление Docker-образа](#обновление-docker-образа).\n\nВо время настройки IKEv2 создаётся клиент IKEv2 (с именем по умолчанию `vpnclient`), а его конфигурация экспортируется в `/etc/ipsec.d` **внутри контейнера**. Чтобы скопировать файл(ы) конфигурации на Docker-хост:\n\n```bash\n# Проверить содержимое /etc/ipsec.d в контейнере\ndocker exec -it ipsec-vpn-server ls -l /etc/ipsec.d\n# Пример: копирование файла конфигурации клиента из контейнера\n# в текущий каталог на Docker-хосте\ndocker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./\n```\n\n**Следующие шаги:** [Настройте ваши устройства](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md) для использования IKEv2 VPN.\n\n\u003cdetails\u003e\n\u003csummary\u003e\nУзнайте, как управлять клиентами IKEv2.\n\u003c/summary\u003e\n\nВы можете управлять клиентами IKEv2 с помощью вспомогательного скрипта. Ниже приведены примеры. Чтобы настроить параметры клиента, запустите скрипт без аргументов.\n\n```bash\n# Добавить нового клиента (с параметрами по умолчанию)\ndocker exec -it ipsec-vpn-server ikev2.sh --addclient [имя клиента]\n# Экспортировать конфигурацию для существующего клиента\ndocker exec -it ipsec-vpn-server ikev2.sh --exportclient [имя клиента]\n# Показать список существующих клиентов\ndocker exec -it ipsec-vpn-server ikev2.sh --listclients\n# Показать справку\ndocker exec -it ipsec-vpn-server ikev2.sh -h\n```\n\n**Примечание:** Если возникает ошибка «executable file not found», замените `ikev2.sh` выше на `/opt/src/ikev2.sh`.\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e\nУзнайте, как изменить адрес сервера IKEv2.\n\u003c/summary\u003e\n\nВ некоторых случаях может потребоваться изменить адрес сервера IKEv2. Например, чтобы перейти на использование DNS-имени или после изменения IP-адреса сервера. Чтобы изменить адрес сервера IKEv2, сначала [откройте bash-оболочку внутри контейнера](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-контейнер.\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e\nУдаление IKEv2 и повторная настройка с пользовательскими параметрами.\n\u003c/summary\u003e\n\nВ некоторых случаях может потребоваться удалить IKEv2 и настроить его заново с пользовательскими параметрами.\n\n**Предупреждение:** Вся конфигурация IKEv2, включая сертификаты и ключи, будет **безвозвратно удалена**. Это **нельзя отменить**!\n\n**Вариант 1:** Удалить IKEv2 и настроить его снова с помощью вспомогательного скрипта.\n\nОбратите внимание, что это переопределит переменные, указанные в файле `env`, такие как `VPN_DNS_NAME` и `VPN_CLIENT_NAME`, а журналы контейнера больше не будут показывать актуальную информацию для IKEv2.\n\n```bash\n# Удалить IKEv2 и удалить всю конфигурацию IKEv2\ndocker exec -it ipsec-vpn-server ikev2.sh --removeikev2\n# Настроить IKEv2 снова с пользовательскими параметрами\ndocker exec -it ipsec-vpn-server ikev2.sh\n```\n\n**Вариант 2:** Удалить `ikev2-vpn-data` и создать контейнер заново.\n\n1. Запишите все ваши [данные для входа в VPN](#получение-данных-для-входа-в-vpn).\n1. Удалите Docker-контейнер: `docker rm -f ipsec-vpn-server`.\n1. Удалите том `ikev2-vpn-data`: `docker volume rm ikev2-vpn-data`.\n1. Обновите файл `env` и добавьте пользовательские параметры IKEv2, такие как `VPN_DNS_NAME` и `VPN_CLIENT_NAME`, затем создайте контейнер заново. См. раздел [Как использовать этот образ](#как-использовать-этот-образ).\n\u003c/details\u003e\n\n## Расширенное использование\n\nСм. [Расширенное использование (на английском)](docs/advanced-usage.md).\n\n- [Использование альтернативных DNS-серверов](docs/advanced-usage.md#use-alternative-dns-servers)\n- [Запуск без привилегированного режима](docs/advanced-usage.md#run-without-privileged-mode)\n- [Выбор режимов VPN](docs/advanced-usage.md#select-vpn-modes)\n- [Включить совершенную прямую секретность IKEv2](docs/advanced-usage.md#enable-ikev2-perfect-forward-secrecy)\n- [Доступ к другим контейнерам на Docker-хосте](docs/advanced-usage.md#access-other-containers-on-the-docker-host)\n- [Указание публичного IP-адреса VPN-сервера](docs/advanced-usage.md#specify-vpn-servers-public-ip)\n- [Назначение статических IP-адресов клиентам VPN](docs/advanced-usage.md#assign-static-ips-to-vpn-clients)\n- [Настройка подсетей VPN](docs/advanced-usage.md#customize-vpn-subnets)\n- [Поддержка IPv6](docs/advanced-usage.md#ipv6-support)\n- [Раздельная маршрутизация (Split tunneling)](docs/advanced-usage.md#split-tunneling)\n- [О режиме сетевого хоста](docs/advanced-usage.md#about-host-network-mode)\n- [Включение журналов Libreswan](docs/advanced-usage.md#enable-libreswan-logs)\n- [Проверка состояния сервера](docs/advanced-usage.md#check-server-status)\n- [Сборка из исходного кода](docs/advanced-usage.md#build-from-source-code)\n- [Bash-оболочка внутри контейнера](docs/advanced-usage.md#bash-shell-inside-container)\n- [Bind mount файла env](docs/advanced-usage.md#bind-mount-the-env-file)\n- [Развёртывание алгоритма управления перегрузкой Google BBR](docs/advanced-usage.md#deploy-google-bbr-congestion-control)\n\n## Технические детали\n\nЗапущены два сервиса: `Libreswan (pluto)` для IPsec VPN и `xl2tpd` для поддержки L2TP.\n\nКонфигурация IPsec по умолчанию поддерживает:\n\n* IPsec/L2TP с PSK\n* IKEv1 с PSK и XAuth («Cisco IPsec»)\n* IKEv2\n\nНеобходимые порты: `500/udp` и `4500/udp` (IPsec)\n\n## Лицензия\n\n**Примечание:** Компоненты программного обеспечения внутри предварительно собранного образа (например, Libreswan и xl2tpd) распространяются по лицензиям, выбранным их правообладателями. Как и в случае использования любого готового образа, пользователь образа несёт ответственность за то, чтобы использование этого образа соответствовало всем применимым лицензиям для программного обеспечения, содержащегося внутри.\n\nCopyright (C) 2016-2026 [Lin Song](https://github.com/hwdsl2) [![View my profile on LinkedIn](https://static.licdn.com/scds/common/u/img/webpromo/btn_viewmy_160x25.png)](https://www.linkedin.com/in/linsongui)  \nОсновано на [работе Thomas Sarlandie](https://github.com/sarfata/voodooprivacy) (Copyright 2012)\n\n[![Creative Commons License](https://i.creativecommons.org/l/by-sa/3.0/88x31.png)](http://creativecommons.org/licenses/by-sa/3.0/)  \nЭта работа распространяется по лицензии [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/)  \nТребуется указание авторства: пожалуйста, указывайте моё имя в любых производных работах и сообщайте мне, как вы её улучшили!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhwdsl2%2Fdocker-ipsec-vpn-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhwdsl2%2Fdocker-ipsec-vpn-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhwdsl2%2Fdocker-ipsec-vpn-server/lists"}