
Docker IPsec VPN Server — 已更新!
基于Docker的IPsec VPN服务器,支持IPsec/L2TP、Cisco IPsec和IKEv2,具备自动生成凭据和多平台客户端配置功能。
English | 简体中文 | 繁體中文 | Русский
Docker 上的 IPsec VPN 服务器
使用这个 Docker 镜像快速搭建 IPsec VPN 服务器。支持 IPsec/L2TP,Cisco IPsec 和 IKEv2 协议。
本镜像以 Alpine 3.23 或 Debian 12 为基础,并使用 Libreswan (IPsec VPN 软件) 和 xl2tpd (L2TP 服务进程)。
IPsec VPN 可以加密你的网络流量,以防止在通过因特网传送时,你和 VPN 服务器之间的任何人对你的数据的未经授权的访问。在使用不安全的网络时,这是特别有用的,例如在咖啡厅,机场或旅馆房间。
功能特性:
- 首次启动时自动生成 VPN 凭证和 IKEv2 配置
- 支持具有强大和快速加密算法(例如 AES-GCM)的 IKEv2 模式
- 生成 VPN 配置文件以自动配置 iOS, macOS 和 Android 设备
- 支持 Windows, macOS, iOS, Android, Chrome OS 和 Linux 客户端
- 包括辅助脚本以管理 IKEv2 用户和证书
- 通过 GitHub Actions 自动构建和发布
- 使用 Docker 卷实现数据持久化
- 多架构支持:
linux/amd64、linux/arm64、linux/arm/v7
另提供:
- VPN:IPsec 无 Docker 版、WireGuard、OpenVPN、Headscale
- AI:自托管 AI 套件,用于本地 LLM、聊天、RAG、语音和 AI 工具
📘 对自托管 AI 感兴趣吗?The Self-Hosted AI Builder’s Guide 是一本关于构建、保护和运维自己的私有 AI 技术栈的实用指南。
快速开始
使用以下命令在 Docker 上快速搭建 IPsec VPN 服务器:
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 登录信息。
另外,你也可以在不使用 Docker 的情况下安装 IPsec VPN。要了解更多有关如何使用本镜像的信息,请继续阅读以下部分。
社区
- 📬 获取项目更新和免费部署指南(每月 1–2 封邮件;指南为英文 PDF)
- 💬 加入 r/selfhostedstack 社区参与讨论
- ⭐ 如果你觉得本项目有用,请为仓库加星——这有助于让更多人发现它。
系统要求
- 具有公网 IP 地址或 DNS 名称的 Linux 服务器
- 已安装 Docker
- 在防火墙中开放 VPN 端口(UDP 500 和 4500)
- 你也可以使用 Podman 运行本镜像,需要首先为
docker命令创建一个别名
注: 高级用户可以在 macOS 上通过安装 Docker for Mac 使用本镜像。在使用 IPsec/L2TP 模式之前,你可能需要运行 docker restart ipsec-vpn-server 重启一次容器。本镜像不支持 Docker for Windows。
下载
预构建的可信任镜像可在 Docker Hub registry 下载:
docker pull hwdsl2/ipsec-vpn-server
或者,你也可以从 Quay.io 下载:
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。
高级用户可以自己从 GitHub 编译源代码。
镜像对照表
有两个预构建的镜像可用。默认的基于 Alpine 的镜像大小仅 ~19 MB。
| 基于 Alpine | 基于 Debian | |
|---|---|---|
| 镜像名称 | 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.4 | 5.4 |
| IPsec/L2TP | ✅ | ✅ |
| Cisco IPsec | ✅ | ✅ |
| IKEv2 | ✅ | ✅ |
注: 要使用基于 Debian 的镜像,请将本自述文件中所有的 hwdsl2/ipsec-vpn-server 替换为 hwdsl2/ipsec-vpn-server:debian。这些镜像当前与 Synology NAS 系统不兼容。
我需要使用较旧版本的 Libreswan 版本 4。
一般建议使用最新的 Libreswan 版本 5,它是本项目的默认版本。但是,如果你想要使用较旧版本的 Libreswan 版本 4,你可以从源代码构建 Docker 镜像:
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 服务器。你可以运行 touch vpn.env 创建一个空的 env 文件,然后跳到下一节。
这个 Docker 镜像使用以下几个变量,可以在一个 env 文件中定义(参见示例):
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
这将创建一个用于 VPN 登录的用户账户,它可以在你的多个设备上使用*。IPsec PSK (预共享密钥) 由 VPN_IPSEC_PSK 环境变量指定。VPN 用户名和密码分别在 VPN_USER 和 VPN_PASSWORD 中定义。
支持创建额外的 VPN 用户,如果需要,可以像下面这样在你的 env 文件中定义。用户名和密码必须分别使用空格进行分隔,并且用户名不能有重复。所有的 VPN 用户将共享同一个 IPsec PSK。
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,参见配置并使用 IKEv2 VPN。
[!IMPORTANT] 在
env文件中填写值时,不要在值外添加引号,也不要在=两侧添加空格。值中不能包含\、"或'。一个安全的 IPsec PSK 应该至少包含 20 个随机字符。
注: 如果在创建 Docker 容器后修改 env 文件,则必须删除并重新创建容器才能使更改生效。参见更新 Docker 镜像。
其他环境变量
高级用户可以指定一个域名,客户端名称和/或另外的 DNS 服务器。这是可选的。
了解如何指定一个域名,客户端名称和/或另外的 DNS 服务器。
高级用户可以指定一个域名作为 IKEv2 服务器地址。这是可选的。该域名必须是一个全称域名 (FQDN)。示例如下:
VPN_DNS_NAME=vpn.example.com
你可以指定第一个 IKEv2 客户端的名称。该名称不能包含空格或者除 - _ 之外的任何特殊字符。如果未指定,则使用默认值 vpnclient。
VPN_CLIENT_NAME=your_client_name
在 VPN 已连接时,客户端默认配置为使用 Google Public DNS。你可以为所有的 VPN 模式指定另外的 DNS 服务器。示例如下:
VPN_DNS_SRV1=1.1.1.1
VPN_DNS_SRV2=1.0.0.1
有关详细信息以及一些流行的公共 DNS 提供商的列表,参见使用其他的 DNS 服务器。
默认情况下,导入 IKEv2 客户端配置时不需要密码。你可以选择使用随机密码保护客户端配置文件。
VPN_PROTECT_CONFIG=yes
注: 如果在 Docker 容器中已经配置了 IKEv2,则以上变量对 IKEv2 模式无效。在这种情况下,你可以移除 IKEv2 并使用自定义选项重新配置它。参见配置并使用 IKEv2 VPN。
运行 IPsec VPN 服务器
使用本镜像创建一个新的 Docker 容器(将 ./vpn.env 替换为你自己的 env 文件):
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
在该命令中,我们使用 docker run 的 -v 选项来创建一个名为 ikev2-vpn-data 的新 Docker 卷,并且将它挂载到容器内的 /etc/ipsec.d 目录下。IKEv2 的相关数据(比如证书和密钥)在该卷中保存,之后当你需要重新创建 Docker 容器的时候,只需指定同一个卷。