项目地址:https://github.com/hwdsl2/setup-ipsec-vpn/tree/master
只需几分钟即可使用 IPsec/L2TP、Cisco IPsec 和 IKEv2 设置您自己的 IPsec VPN 服务器。
IPsec VPN 会加密您的网络流量,这样您和 VPN 服务器之间的任何人都无法窃听您的数据在互联网上传输。这在使用不安全的网络(例如在咖啡店、机场或酒店房间)时尤其有用。
快速开始
首先,准备好您的 Linux 服务器,安装 Ubuntu、Debian 或 CentOS。
使用以下一行命令设置 IPsec VPN 服务器:
wget https://get.vpnsetup.net -O vpn.sh && sudo sh vpn.sh
您的 VPN 登录详细信息将随机生成,并在完成后显示。
可选:在同一服务器上安装WireGuard或OpenVPN 。
查看脚本的运行情况(终端录制)
注意:此录制仅用于演示目的。此录制中的 VPN 凭据无效。

您也可以使用 curl
下载:
curl -fsSL https://get.vpnsetup.net -o vpn.sh && sudo sh vpn.sh
备选设置 URL:
https://github.com/hwdsl2/setup-ipsec-vpn/raw/master/vpnsetup.sh
https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/raw/master/vpnsetup.sh
如果无法下载,请打开vpnsetup.sh,然后点击 Raw
右侧的按钮。Ctrl/Cmd+A
按 全选,Ctrl/Cmd+C
按 复制,然后粘贴到您喜欢的编辑器中。
特征
- 全自动 IPsec VPN 服务器设置,无需用户输入
- 支持具有强大和快速密码的 IKEv2(例如 AES-GCM)
- 生成 VPN 配置文件以自动配置 iOS、macOS 和 Android 设备
- 支持 Windows、macOS、iOS、Android、Chrome OS 和 Linux 作为 VPN 客户端
- 包括用于管理 VPN 用户和证书的帮助脚本
要求
云服务器、虚拟专用服务器 (VPS) 或专用服务器,安装以下内容:
- Ubuntu 24.04、22.04 或 20.04
- Debian 12、11 或 10
- CentOS 7 或 CentOS Stream 9
- Rocky Linux 或 AlmaLinux 9/8
- Oracle Linux 9、8 或 7
- 亚马逊Linux 2
其他受支持的 Linux 发行版
- 树莓派操作系统 (Raspbian)
- 卡利Linux
- Alpine Linux
- 红帽企业 Linux(RHEL)
- 请勿在您的 PC 或 Mac 上运行这些脚本!它们只能在服务器上使用!
安装
首先,使用 sudo apt-get update && sudo apt-get dist-upgrade
(Ubuntu/Debian) 更新您的服务器或 sudo yum update
重新启动。这是可选的,但建议这样做。
要安装 VPN,请选择以下选项之一:
选项 1:让脚本为您生成随机 VPN 凭据(完成后将显示)。
wget https://get.vpnsetup.net -O vpn.sh && sudo sh vpn.sh
选项 2:编辑脚本并提供您自己的 VPN 凭据。
wget https://get.vpnsetup.net -O vpn.sh
nano -w vpn.sh
[Replace with your own values: YOUR_IPSEC_PSK, YOUR_USERNAME and YOUR_PASSWORD]
sudo sh vpn.sh
注意:安全的 IPsec PSK 应至少包含 20 个随机字符。
选项 3:将您的 VPN 凭据定义为环境变量。
# All values MUST be placed inside 'single quotes'
# DO NOT use these special characters within values: \ " '
wget https://get.vpnsetup.net -O vpn.sh
sudo VPN_IPSEC_PSK='your_ipsec_pre_shared_key' \
VPN_USER='your_vpn_username' \
VPN_PASSWORD='your_vpn_password' \
sh vpn.sh
Docker容器安装
使用此命令在 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 \
-e VPN_USER=8i7P3BSBAVU4CaC4LvoF \ # 固定内容可选
-e VPN_PASSWORD=8i7P3BSBAVU4CaC4LvoF \ # 固定内容可选
-e VPN_PUBLIC_IP=你的公网ip \ # 可选
hwdsl2/ipsec-vpn-server
不指定内容的话 VPN 登录详细信息将随机生成。
自定义 VPN 选项
使用备用 DNS 服务器
默认情况下,当 VPN 处于活动状态时,客户端设置为使用Google 公共 DNS。安装 VPN 时,您可以选择为所有 VPN 模式指定自定义 DNS 服务器。示例:
sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 sh vpn.sh
用于 VPN_DNS_SRV1
指定主 DNS 服务器,并 VPN_DNS_SRV2
指定辅助 DNS 服务器(可选)。
以下是一些流行的公共 DNS 提供商的列表,供您参考。
如果你需要在安装 VPN 之后更改 DNS 服务器,参见高级用法。
注: 如果服务器上已经配置了 IKEv2,则以上变量对 IKEv2 模式无效。在这种情况下,如需自定义 IKEv2 选项(例如 DNS 服务器),你可以首先 移除 IKEv2,然后运行 sudo ikev2.sh
重新配置。
自定义 IKEv2 选项
在安装 VPN 时,高级用户可以自定义 IKEv2 选项。这是可选的。
选项 1: 在安装 VPN 时跳过 IKEv2,然后使用自定义选项配置 IKEv2。
在安装 VPN 时,你可以跳过 IKEv2,仅安装 IPsec/L2TP 和 IPsec/XAuth ("Cisco IPsec") 模式:
```shell
sudo VPN_SKIP_IKEV2=yes sh vpn.sh
```
(可选)如需为 VPN 客户端指定另外的 DNS 服务器,你可以定义 `VPN_DNS_SRV1` 和 `VPN_DNS_SRV2`(可选)。有关详细信息,参见[使用其他的 DNS 服务器](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md#%E4%BD%BF%E7%94%A8%E5%85%B6%E4%BB%96%E7%9A%84-dns-%E6%9C%8D%E5%8A%A1%E5%99%A8)。
然后运行 IKEv2 辅助脚本以使用自定义选项以交互方式配置 IKEv2:
```shell
sudo ikev2.sh
```
你可以自定义以下选项:VPN 服务器的域名,第一个客户端的名称和证书有效期,VPN 客户端的 DNS 服务器以及是否对客户端配置文件进行密码保护。
**注:** 如果服务器上已经配置了 IKEv2,则 `VPN_SKIP_IKEV2` 变量无效。在这种情况下,如需自定义 IKEv2 选项,你可以首先 [移除 IKEv2](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto-zh.md#%E7%A7%BB%E9%99%A4-ikev2),然后运行 `sudo ikev2.sh` 重新配置。
选项 2: 使用环境变量自定义 IKEv2 选项。
在安装 VPN 时,你可以指定一个域名作为 IKEv2 服务器地址。这是可选的。该域名必须是一个全称域名(FQDN)。示例如下:
```shell
sudo VPN_DNS_NAME='vpn.example.com' sh vpn.sh
```
类似地,你可以指定第一个 IKEv2 客户端的名称。如果未指定,则使用默认值 `vpnclient`。
```shell
sudo VPN_CLIENT_NAME='your_client_name' sh vpn.sh
```
在 VPN 已连接时,客户端默认配置为使用 [Google Public DNS](https://developers.google.com/speed/public-dns/)。你可以为所有的 VPN 模式指定另外的 DNS 服务器。示例如下:
```shell
sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 sh vpn.sh
```
默认情况下,导入 IKEv2 客户端配置时不需要密码。你可以选择使用随机密码保护客户端配置文件。
```shell
sudo VPN_PROTECT_CONFIG=yes sh vpn.sh
```
供参考:IKEv1 和 IKEv2 参数列表
| IKEv1 参数 | 默认值 | 自定义(环境变量) |
| --------------------- | ----------------- | ----------------------------------- |
| 服务器地址(DNS域名) | - | 不能,但你可以使用 DNS 域名进行连接 |
| 服务器地址(公网IP) | 自动检测 | VPN\_PUBLIC\_IP |
| IPsec 预共享密钥 | 自动生成 | VPN\_IPSEC\_PSK |
| VPN 用户名 | vpnuser | VPN\_USER |
| VPN 密码 | 自动生成 | VPN\_PASSWORD |
| 客户端的 DNS 服务器 | Google Public DNS | VPN\_DNS\_SRV1, VPN\_DNS\_SRV2 |
| 跳过 IKEv2 安装 | no | VPN\_SKIP\_IKEV2=yes |
这些 IKEv1 参数适用于 IPsec/L2TP 和 IPsec/XAuth ("Cisco IPsec") 模式。
在运行 vpn(setup).sh 时将这些定义为环境变量。
| IKEv2 参数 | 默认值 | 自定义(环境变量) | 自定义(交互式) |
| --------------------- | ------------------ | ------------------------------ | ---------------- |
| 服务器地址(DNS域名) | - | VPN\_DNS\_NAME | ✅ |
| 服务器地址(公网IP) | 自动检测 | VPN\_PUBLIC\_IP | ✅ |
| 第一个客户端的名称 | vpnclient | VPN\_CLIENT\_NAME | ✅ |
| 客户端的 DNS 服务器 | Google Public DNS | VPN\_DNS\_SRV1, VPN\_DNS\_SRV2 | ✅ |
| 保护客户端配置文件 | no | VPN\_PROTECT\_CONFIG=yes | ✅ |
| 启用/禁用 MOBIKE | 如果系统支持则启用 | ❌ | ✅ |
| 客户端证书有效期 | 10 年(120 个月) | VPN\_CLIENT\_VALIDITY | ✅ |
| CA 和服务器证书有效期 | 10 年(120 个月) | ❌ | ❌ |
| CA 证书名称 | IKEv2 VPN CA | ❌ | ❌ |
| 证书密钥长度 | 3072 bits | ❌ | ❌ |
这些 IKEv2 参数适用于 IKEv2 模式。
在运行 vpn(setup).sh 时,或者在自动模式下配置 IKEv2 时 (`sudo ikev2.sh --auto`) 将这些定义为环境变量。
可以在交互式配置 IKEv2 期间自定义 (`sudo ikev2.sh`)。参见上面的选项 2。
使用 `VPN_CLIENT_VALIDITY` 定义客户端证书的有效期(单位:月)。它必须是 1 到 120 之间的整数。
除了这些参数,高级用户还可以在安装时 [自定义 VPN 子网](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/advanced-usage-zh.md#%E8%87%AA%E5%AE%9A%E4%B9%89-vpn-%E5%AD%90%E7%BD%91)。
## 下一步
配置你的计算机或其它设备使用 VPN。请参见:
**[配置 IKEv2 VPN 客户端(推荐)](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto-zh.md)**
**[配置 IPsec/L2TP VPN 客户端](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md)**
**[配置 IPsec/XAuth ("Cisco IPsec") VPN 客户端](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth-zh.md)**
开始使用自己的专属 VPN! ✨🎉🚀✨
## 重要提示
**Windows 用户** 对于 IPsec/L2TP 模式,在首次连接之前需要 [修改注册表](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md#windows-%E9%94%99%E8%AF%AF-809),以解决 VPN 服务器或客户端与 NAT(比如家用路由器)的兼容问题。
同一个 VPN 账户可以在你的多个设备上使用。但是由于 IPsec/L2TP 的局限性,如果需要连接在同一个 NAT(比如家用路由器)后面的多个设备,你必须使用 [IKEv2](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto-zh.md) 或者 [IPsec/XAuth](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth-zh.md) 模式。要查看或更改 VPN 用户账户,请参见 [管理 VPN 用户](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/manage-users-zh.md)。
对于有外部防火墙的服务器(比如 [EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html)/[GCE](https://cloud.google.com/vpc/docs/firewalls)),请为 VPN 打开 UDP 端口 500 和 4500。阿里云用户请参见 [#433](https://github.com/hwdsl2/setup-ipsec-vpn/issues/433)。
在 VPN 已连接时,客户端配置为使用 [Google Public DNS](https://developers.google.com/speed/public-dns/)。如果偏好其它的域名解析服务,请参见 [高级用法](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/advanced-usage-zh.md)。
使用内核支持有助于提高 IPsec/L2TP 性能。它在所有 [受支持的系统](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md#%E7%B3%BB%E7%BB%9F%E8%A6%81%E6%B1%82) 上可用。Ubuntu 系统需要安装 `linux-modules-extra-$(uname -r)` 软件包并运行 `service xl2tpd restart`。
这些脚本在更改现有的配置文件之前会先做备份,使用 `.old-日期-时间` 为文件名后缀。
## 升级Libreswan
使用以下命令更新你的 VPN 服务器上的 [Libreswan](https://libreswan.org/)([更新日志](https://github.com/libreswan/libreswan/blob/main/CHANGES) | [通知列表](https://lists.libreswan.org/mailman/listinfo/swan-announce))。
```shell
wget https://get.vpnsetup.net/upg -O vpnup.sh && sudo sh vpnup.sh
```
当前支持的 Libreswan 最新版本是 `5.0`。查看已安装版本:`ipsec --version`。
**注:** `xl2tpd` 可以使用系统的软件包管理器进行更新,例如 Ubuntu/Debian 上的 `apt-get`。
## 管理 VPN 用户
请参见 [管理 VPN 用户](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/manage-users-zh.md)。
* [使用辅助脚本管理 VPN 用户](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/manage-users-zh.md#%E4%BD%BF%E7%94%A8%E8%BE%85%E5%8A%A9%E8%84%9A%E6%9C%AC%E7%AE%A1%E7%90%86-vpn-%E7%94%A8%E6%88%B7)
* [查看 VPN 用户](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/manage-users-zh.md#%E6%9F%A5%E7%9C%8B-vpn-%E7%94%A8%E6%88%B7)
* [查看或更改 IPsec PSK](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/manage-users-zh.md#%E6%9F%A5%E7%9C%8B%E6%88%96%E6%9B%B4%E6%94%B9-ipsec-psk)
* [手动管理 VPN 用户](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/manage-users-zh.md#%E6%89%8B%E5%8A%A8%E7%AE%A1%E7%90%86-vpn-%E7%94%A8%E6%88%B7)
# 高级用法
## 选择 VPN 模式
使用此 Docker 映像,IPsec/L2TP 和 IPsec/XAuth(“Cisco IPsec”)模式默认启用。此外,如果在创建 Docker 容器时在命令中指定 `-v ikev2-vpn-data:/etc/ipsec.d`该选项,则会启用 IKEv2 模式。[](https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/README.md#start-the-ipsec-vpn-server)`docker run`
高级用户可以通过在文件中设置以下变量来有选择地禁用 VPN 模式 `env`,然后重新创建 Docker 容器。
禁用 IPsec/L2TP 模式:`VPN_DISABLE_IPSEC_L2TP=yes`
禁用 IPsec/XAuth(“Cisco IPsec”)模式:`VPN_DISABLE_IPSEC_XAUTH=yes`
禁用 IPsec/L2TP 和 IPsec/XAuth 模式:`VPN_IKEV2_ONLY=yes`
## 访问 Docker 主机上的其他容器
连接到 VPN 后,VPN 客户端通常可以访问同一 Docker 主机上其他容器中运行的服务,而无需进行额外的配置。
例如,如果 IPsec VPN 服务器容器具有 IP `172.17.0.2`,并且具有 IP 的 Nginx 容器 `172.17.0.3`正在同一 Docker 主机上运行,则 VPN 客户端可以使用 IP `172.17.0.3`访问 Nginx 容器上的服务。要找出分配给容器的 IP,请运行 `docker inspect `。
## 指定 VPN 服务器的公共 IP
`VPN_PUBLIC_IP`在具有多个公共 IP 地址的 Docker 主机上,高级用户可以使用文件中的变量为 VPN 服务器指定一个公共 IP `env`,然后重新创建 Docker 容器。例如,如果 Docker 主机具有 IP `192.0.2.1`和 `192.0.2.2`,并且您希望 VPN 服务器使用 `192.0.2.2`:
```
VPN_PUBLIC_IP=192.0.2.2
```
请注意,如果 Docker 容器中已设置 IKEv2,则此变量对 IKEv2 模式无效。在这种情况下,您可以删除 IKEv2 并使用自定义选项重新设置。请参阅[配置和使用 IKEv2 VPN](https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/README.md#configure-and-use-ikev2-vpn)。
如果您希望 VPN 客户端在 VPN 连接处于活动状态时使用指定的公共 IP 作为其“传出 IP”,并且指定的 IP 不是 Docker 主机上的主 IP(或默认路由),则可能需要进行其他配置。在这种情况下,您可以尝试 `SNAT`在 Docker 主机上添加 IPTables 规则。要在重启后继续保留,您可以将命令添加到 `/etc/rc.local`。
继续上面的例子,如果 Docker 容器有内部 IP `172.17.0.2`(使用 检查 `docker inspect ipsec-vpn-server`),Docker 的网络接口名称是 `docker0`(使用 检查 `iptables -nvL -t nat`),并且你想要的“传出 IP”是 `192.0.2.2`:
```
iptables -t nat -I POSTROUTING -s 172.17.0.2 ! -o docker0 -j SNAT --to 192.0.2.2
```
要检查已连接的 VPN 客户端的“传出 IP”,您可以在客户端上打开浏览器并[在 Google 上查找 IP 地址](https://www.google.com/search?q=my+ip)。
## 为 VPN 客户端分配静态 IP
使用 IPsec/L2TP 模式连接时,VPN 服务器(Docker 容器)`192.168.42.1`在 VPN 子网内具有内部 IP `192.168.42.0/24`。客户端被分配从 `192.168.42.10`到 的内部 IP `192.168.42.250`。要检查分配给客户端的 IP,请查看 VPN 客户端上的连接状态。
使用 IPsec/XAuth(“Cisco IPsec”)或 IKEv2 模式连接时,VPN 服务器(Docker 容器)在 VPN 子网内没有内部 IP `192.168.43.0/24`。客户端被分配了从 `192.168.43.10`到 的内部 IP `192.168.43.250`。
高级用户可以选择为 VPN 客户端分配静态 IP。IKEv2 模式不支持此功能。要分配静态 IP,请 `VPN_ADDL_IP_ADDRS`在 `env`文件中声明变量,然后重新创建 Docker 容器。示例:
```
VPN_ADDL_USERS=user1 user2 user3 user4 user5
VPN_ADDL_PASSWORDS=pass1 pass2 pass3 pass4 pass5
VPN_ADDL_IP_ADDRS=* * 192.168.42.2 192.168.43.2
```
在此示例中,我们为 IPsec/L2TP 模式分配静态 IP `192.168.42.2`,`user3`并为 IPsec/XAuth(“Cisco IPsec”)模式分配静态 IP `192.168.43.2`。`user4`、 和 的内部 IP `user1`将 `user2`自动 `user5`分配。`user3`IPsec/XAuth 模式的内部 IP 和 IPsec/L2TP 模式的内部 IP `user4`也将自动分配。您可以使用 `*`指定自动分配的 IP,或将这些用户放在列表末尾。
您为 IPsec/L2TP 模式指定的静态 IP 必须在 到 范围内 `192.168.42.2`。`192.168.42.9`您为 IPsec/XAuth(“Cisco IPsec”)模式指定的静态 IP 必须在 到 范围 `192.168.43.2`内 `192.168.43.9`。
如果需要分配更多静态 IP,则必须缩小自动分配 IP 地址池。示例:
```
VPN_L2TP_POOL=192.168.42.100-192.168.42.250
VPN_XAUTH_POOL=192.168.43.100-192.168.43.250
```
`192.168.42.2`这将允许您为 IPsec/L2TP 模式分配从到范围内的静态 IP ,并为IPsec/XAuth(“Cisco IPsec”)模式 `192.168.42.99`分配从到范围内的静态 IP。`192.168.43.2``192.168.43.99`
`VPN_XAUTH_POOL`请注意,如果您在文件中指定 `env`,并且 IKEv2 已在 Docker 容器中设置,则**必须**在重新创建 Docker 容器之前手动 `/etc/ipsec.d/ikev2.conf`在容器内编辑并替换 `rightaddresspool=192.168.43.10-192.168.43.250`为与相同**的值。否则,IKEv2 可能会停止工作。**`VPN_XAUTH_POOL`
**注意:**在您的 `env`文件中,请勿在值周围放置 `""`或,或在 周围添加空格。请勿在值内使用这些特殊字符:。`''``=``\ " '`
## 自定义 VPN 子网
默认情况下,IPsec/L2TP VPN 客户端将使用内部 VPN 子网 `192.168.42.0/24`,而 IPsec/XAuth(“Cisco IPsec”)和 IKEv2 VPN 客户端将使用内部 VPN 子网 `192.168.43.0/24`。有关更多详细信息,请阅读上一节。
对于大多数用例,没有必要也不建议自定义这些子网。但是,如果您的用例需要,您可以在文件中指定自定义子网 `env`,然后必须重新创建 Docker 容器。
```
# Example: Specify custom VPN subnet for IPsec/L2TP mode
# Note: All three variables must be specified.
VPN_L2TP_NET=10.1.0.0/16
VPN_L2TP_LOCAL=10.1.0.1
VPN_L2TP_POOL=10.1.0.10-10.1.254.254
```
```
# Example: Specify custom VPN subnet for IPsec/XAuth and IKEv2 modes
# Note: Both variables must be specified.
VPN_XAUTH_NET=10.2.0.0/16
VPN_XAUTH_POOL=10.2.0.10-10.2.254.254
```
**注意:**在您的 `env`文件中,请勿在值周围放置 `""`或 `''`,或在周围添加空格 `=`。
在上面的例子中,`VPN_L2TP_LOCAL`是 IPsec/L2TP 模式下 VPN 服务器的内部 IP。`VPN_L2TP_POOL`和 `VPN_XAUTH_POOL`是 VPN 客户端的自动分配 IP 地址池。
`VPN_XAUTH_POOL`请注意,如果您在文件中指定 `env`,并且 IKEv2 已在 Docker 容器中设置,则**必须**在重新创建 Docker 容器之前手动 `/etc/ipsec.d/ikev2.conf`在容器内编辑并替换 `rightaddresspool=192.168.43.10-192.168.43.250`为与相同**的值。否则,IKEv2 可能会停止工作。**`VPN_XAUTH_POOL`
## 分割隧道
使用拆分隧道,VPN 客户端将仅通过 VPN 隧道发送特定目标子网的流量。其他流量将不会通过 VPN 隧道。这样,您就可以通过 VPN 安全地访问网络,而无需通过 VPN 路由所有客户端的流量。拆分隧道有一些限制,并非所有 VPN 客户端都支持。
高级用户可以选择为 IKEv2 模式启用拆分隧道。将变量添加 `VPN_SPLIT_IKEV2`到您的 `env`文件,然后重新创建 Docker 容器。例如,如果目标子网是 `10.123.123.0/24`:
```
VPN_SPLIT_IKEV2=10.123.123.0/24
```
请注意,如果 Docker 容器中已设置 IKEv2,则此变量无效。在这种情况下,您有两个选择:
**选项 1:**首先[在容器内启动 bash shell](https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/docs/advanced-usage.md#bash-shell-inside-container),然后编辑 `/etc/ipsec.d/ikev2.conf`并替换 `leftsubnet=0.0.0.0/0`为所需的子网。完成后,`exit`容器并运行 `docker restart ipsec-vpn-server`。
**选项 2:**删除 Docker 容器和 `ikev2-vpn-data`卷,然后重新创建 Docker 容器。所有 VPN 配置将被**永久删除**。请参阅[配置和使用 IKEv2 VPN](https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/README.md#configure-and-use-ikev2-vpn)中的“删除 IKEv2” 。
或者,Windows 用户可以通过手动添加路由来启用拆分隧道。有关更多详细信息,请参阅[拆分隧道](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/advanced-usage.md#split-tunneling)。
## 关于主机网络模式
高级用户可以通过在命令中添加以下内容,以[主机网络模式](https://docs.docker.com/network/host/)运行此映像。此外,如果以非特权模式运行,您可能还需要将其替换为 Docker 主机的网络接口名称。`--network=hostdocker run eth0`
除非您的用例需要,否则不建议对此映像使用主机网络模式。在此模式下,容器的网络堆栈与 Docker 主机不隔离,VPN 客户端在使用 IPsec/L2TP 模式连接后,可能能够使用其内部 VPN IP 访问 Docker 主机上的端口或服务。请注意,当您不再使用此映像时,您需要通过run.sh `192.168.42.1`手动清除对 IPTables 规则和 sysctl 设置的更改,或者重新启动服务器。
由于使用了 nftables,某些 Docker 主机操作系统(例如 Debian 10)无法在主机网络模式下运行此映像。
## 启用 Libreswan 日志
为了保持 Docker 镜像较小,默认情况下不启用 Libreswan (IPsec) 日志。如果您需要启用它以进行故障排除,请首先在正在运行的容器中启动 Bash 会话:
```
docker exec -it ipsec-vpn-server env TERM=xterm bash -l
```
然后运行以下命令:
```
# For Alpine-based image
apk add --no-cache rsyslog
rsyslogd
rc-service ipsec stop; rc-service -D ipsec start >/dev/null 2>&1
sed -i '\|pluto\.pid|a rm -f /var/run/rsyslogd.pid; rsyslogd' /opt/src/run.sh
exit
# For Debian-based image
apt-get update && apt-get -y install rsyslog
rsyslogd
service ipsec restart
sed -i '\|pluto\.pid|a rm -f /var/run/rsyslogd.pid; rsyslogd' /opt/src/run.sh
exit
```
**注意:**`rsyslogd: imklog: cannot open kernel log`如果您在没有特权模式的情况下使用此 Docker 镜像,则出现错误是正常的。
完成后,你可以使用以下命令检查 Libreswan 日志:
```
docker exec -it ipsec-vpn-server grep pluto /var/log/auth.log
```
要检查 xl2tpd 日志,请运行 `docker logs ipsec-vpn-server`。
## 检查服务器状态
检查 IPsec VPN 服务器的状态:
```
docker exec -it ipsec-vpn-server ipsec status
```
显示当前建立的VPN连接:
```
docker exec -it ipsec-vpn-server ipsec trafficstatus
```
## 从源代码构建
高级用户可以从GitHub下载并编译源代码:
```
git clone https://github.com/hwdsl2/docker-ipsec-vpn-server
cd docker-ipsec-vpn-server
# 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 .
```
或者如果不修改源代码的话使用这个:
```
# To build Alpine-based image
docker build -t hwdsl2/ipsec-vpn-server github.com/hwdsl2/docker-ipsec-vpn-server
# To build Debian-based image
docker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian \
github.com/hwdsl2/docker-ipsec-vpn-server
```
## 容器内的 Bash shell
要在正在运行的容器中启动 Bash 会话:
```
docker exec -it ipsec-vpn-server env TERM=xterm bash -l
```
(可选)安装 `nano`编辑器:
```
# For Alpine-based image
apk add --no-cache nano
# For Debian-based image
apt-get update && apt-get -y install nano
```
然后在容器内运行命令。完成后,退出容器并重新启动(如果需要):
```
exit
docker restart ipsec-vpn-server
```
## 绑定挂载环境文件
作为该选项的替代 `--env-file`,高级用户可以绑定挂载 `env`文件。此方法的优点是,更新文件后 `env`,您可以重新启动 Docker 容器以使其生效,而不是重新创建它。要使用此方法,您必须首先编辑文件 `env`并使用单引号 `''`将所有变量的值括起来。然后(重新)创建 Docker 容器(将第一个替换 `vpn.env`为您自己的 `env`文件):
```
docker run \
--name ipsec-vpn-server \
--restart=always \
-v "$(pwd)/vpn.env:/opt/src/env/vpn.env:ro" \
-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
```
## 部署Google BBR拥塞控制
设置 VPN 服务器后,可以通过在 Docker 主机上部署 Google BBR 拥塞控制算法来提高性能。
这通常是通过修改配置文件来完成的 `/etc/sysctl.conf`。但是,某些 Linux 发行版可能还需要更新 Linux 内核。
详细部署方法请参考[此文档](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/bbr.md)。完成后重启Docker容器:
```
docker restart ipsec-vpn-server
```
## 卸载 VPN
要卸载 IPsec VPN,运行[辅助脚本](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/extras/vpnuninstall.sh):
**警告:** 此辅助脚本将从你的服务器中删除 IPsec VPN。所有的 VPN 配置将被**永久删除**,并且 Libreswan 和 xl2tpd 将被移除。此操作**不可撤销**!
```shell
wget https://get.vpnsetup.net/unst -O unst.sh && sudo bash unst.sh
```
更多信息请参见 [卸载 VPN](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/uninstall-zh.md)。