Docker 上的 IPsec VPN 服务器

使用这个 Docker 镜像快速搭建 IPsec VPN 服务器。支持 IPsec/L2TP,Cisco IPsec 和 IKEv2 协议。

本镜像以 Alpine 3.15 或 Debian 11 为基础,并使用 Libreswan (IPsec VPN 软件) 和 xl2tpd (L2TP 服务进程)。

IPsec VPN 可以加密你的网络流量,以防止在通过因特网传送时,你和 VPN 服务器之间的任何人对你的数据的未经授权的访问。在使用不安全的网络时,这是特别有用的,例如在咖啡厅,机场或旅馆房间。

首先安装docker

curl -fsSL https://get.docker.com | bash -s docker
service docker restart
chkconfig docker on
service firewalld stop
chkconfig firewalld off

快速开始

使用以下命令在 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

要了解更多有关如何使用本镜像的信息,请继续阅读以下部分。

功能特性

  • 支持具有强大和快速加密算法(例如 AES-GCM)的 IKEv2 模式

  • 生成 VPN 配置文件以自动配置 iOS, macOS 和 Android 设备

  • 支持 Windows, macOS, iOS, Android 和 Linux 作为 VPN 客户端

  • 包括辅助脚本以管理 IKEv2 用户和证书

如何使用本镜像

环境变量

注: 所有这些变量对于本镜像都是可选的,也就是说无需定义它们就可以搭建 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_USERVPN_PASSWORD 中定义。

支持创建额外的 VPN 用户,如果需要,可以像下面这样在你的 env 文件中定义。用户名和密码必须分别使用空格进行分隔,并且用户名不能有重复。所有的 VPN 用户将共享同一个 IPsec PSK。

VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2

注: 在你的 env 文件中,不要为变量值添加 "" 或者 '',或在 = 两边添加空格。不要在值中使用这些字符: \ " '。一个安全的 IPsec PSK 应该至少包含 20 个随机字符。

ℹ️ 你可以指定一个域名,客户端名称和/或另外的 DNS 服务器。这是可选的。ℹ️

运行 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 容器的时候,只需指定同一个卷。

推荐在使用本镜像时启用 IKEv2。如果你不想启用 IKEv2 而仅使用 IPsec/L2TP 和 IPsec/XAuth ("Cisco IPsec") 模式连接到 VPN,可以去掉上面 docker run 命令中的第一个 -v 选项。

获取 VPN 登录信息

如果你在上述 docker run 命令中没有指定 env 文件,VPN_USER 会默认为 vpnuser,并且 VPN_IPSEC_PSKVPN_PASSWORD 会被自动随机生成。要获取这些登录信息,可以查看容器的日志:

docker logs ipsec-vpn-server

在命令输出中查找这些行:

Connect to your new VPN with these details:

Server IP: 你的VPN服务器IP
IPsec PSK: 你的IPsec预共享密钥
Username: 你的VPN用户名
Password: 你的VPN密码

在命令输出中也会包含 IKEv2 配置信息(如果启用)。要开始使用 IKEv2,请参见 配置并使用 IKEv2 VPN

(可选步骤)备份自动生成的 VPN 登录信息(如果有)到当前目录:

docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./

更新 Docker 镜像

要更新 Docker 镜像和容器,首先 下载 最新版本:

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

其他语言版本: English, 中文

IKEv2 模式是比 IPsec/L2TP 和 IPsec/XAuth ("Cisco IPsec") 更佳的连接模式,该模式无需 IPsec PSK, 用户名或密码。更多信息请看这里

首先,查看容器的日志以获取 IKEv2 配置信息:

docker logs ipsec-vpn-server

注: 如果你无法找到 IKEv2 配置信息,IKEv2 可能没有在容器中启用。尝试按照 更新 Docker 镜像 一节的说明更新 Docker 镜像和容器。

在 IKEv2 安装过程中会创建一个 IKEv2 客户端(默认名称为 vpnclient),并且导出它的配置到 容器内/etc/ipsec.d 目录下。你可以将配置文件复制到 Docker 主机:

# 查看容器内的 /etc/ipsec.d 目录的文件
docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# 示例:将一个客户端配置文件从容器复制到 Docker 主机当前目录
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./

最后更新于