【实用github项目】IPsec VPN 服务器自动设置脚本
本文最后更新于 2024-08-14,
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。
本站只有Telegram群组为唯一交流群组, 点击加入
文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请
项目地址: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🐳
使用此命令在 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 提供商的列表,供您参考。
提供者 | 主 DNS | 辅助 DNS | 笔记 |
---|---|---|---|
Google 公共 DNS | 8.8.8.8 | 8.8.4.4 | 本项目中的默认设置 |
Cloudflare | 1.1.1.1 | 1.0.0.1 | 另请参阅:适用于家庭的 Cloudflare |
Quad9 | 9.9.9.9 | 149.112.112.112 | 阻止恶意域名 |
OpenDNS | 208.67.222.222 | 208.67.220.220 | 阻止网络钓鱼域名,可配置。 |
CleanBrowsing | 185.228.168.9 | 185.228.169.9 | 可用的域过滤器 |
NextDNS | 各不相同 | 各不相同 | 广告拦截,提供免费套餐。了解更多。 |
Control D | 各不相同 | 各不相同 | 广告拦截,可配置。了解更多。 |
如果你需要在安装 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") 模式:
sudo VPN_SKIP_IKEV2=yes sh vpn.sh
(可选)如需为 VPN 客户端指定另外的 DNS 服务器,你可以定义 VPN_DNS_SRV1
和 VPN_DNS_SRV2
(可选)。有关详细信息,参见使用其他的 DNS 服务器。
然后运行 IKEv2 辅助脚本以使用自定义选项以交互方式配置 IKEv2:
sudo ikev2.sh
你可以自定义以下选项:VPN 服务器的域名,第一个客户端的名称和证书有效期,VPN 客户端的 DNS 服务器以及是否对客户端配置文件进行密码保护。
注: 如果服务器上已经配置了 IKEv2,则 VPN_SKIP_IKEV2
变量无效。在这种情况下,如需自定义 IKEv2 选项,你可以首先 移除 IKEv2,然后运行 sudo ikev2.sh
重新配置。
选项 2: 使用环境变量自定义 IKEv2 选项。
在安装 VPN 时,你可以指定一个域名作为 IKEv2 服务器地址。这是可选的。该域名必须是一个全称域名(FQDN)。示例如下:
sudo VPN_DNS_NAME='vpn.example.com' sh vpn.sh
类似地,你可以指定第一个 IKEv2 客户端的名称。如果未指定,则使用默认值 vpnclient
。
sudo VPN_CLIENT_NAME='your_client_name' sh vpn.sh
在 VPN 已连接时,客户端默认配置为使用 Google Public DNS。你可以为所有的 VPN 模式指定另外的 DNS 服务器。示例如下:
sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 sh vpn.sh
默认情况下,导入 IKEv2 客户端配置时不需要密码。你可以选择使用随机密码保护客户端配置文件。
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 子网。
下一步
配置你的计算机或其它设备使用 VPN。请参见:
配置 IPsec/XAuth ("Cisco IPsec") VPN 客户端
开始使用自己的专属 VPN! ✨🎉🚀✨
重要提示
Windows 用户 对于 IPsec/L2TP 模式,在首次连接之前需要 修改注册表,以解决 VPN 服务器或客户端与 NAT(比如家用路由器)的兼容问题。
同一个 VPN 账户可以在你的多个设备上使用。但是由于 IPsec/L2TP 的局限性,如果需要连接在同一个 NAT(比如家用路由器)后面的多个设备,你必须使用 IKEv2 或者 IPsec/XAuth 模式。要查看或更改 VPN 用户账户,请参见 管理 VPN 用户。
对于有外部防火墙的服务器(比如 EC2/GCE),请为 VPN 打开 UDP 端口 500 和 4500。阿里云用户请参见 #433。
在 VPN 已连接时,客户端配置为使用 Google Public DNS。如果偏好其它的域名解析服务,请参见 高级用法。
使用内核支持有助于提高 IPsec/L2TP 性能。它在所有 受支持的系统 上可用。Ubuntu 系统需要安装 linux-modules-extra-$(uname -r)
软件包并运行 service xl2tpd restart
。
这些脚本在更改现有的配置文件之前会先做备份,使用 .old-日期-时间
为文件名后缀。
升级Libreswan
使用以下命令更新你的 VPN 服务器上的 Libreswan(更新日志 | 通知列表)。
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 用户。
高级用法
选择 VPN 模式
使用此 Docker 映像,IPsec/L2TP 和 IPsec/XAuth(“Cisco IPsec”)模式默认启用。此外,如果在创建 Docker 容器时在命令中指定 -v ikev2-vpn-data:/etc/ipsec.d
该选项,则会启用 IKEv2 模式。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 <container name>
。
指定 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。
如果您希望 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 地址。
为 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,然后编辑 /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中的“删除 IKEv2” 。
或者,Windows 用户可以通过手动添加路由来启用拆分隧道。有关更多详细信息,请参阅拆分隧道。
关于主机网络模式
高级用户可以通过在命令中添加以下内容,以主机网络模式运行此映像。此外,如果以非特权模式运行,您可能还需要将其替换为 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 内核。
详细部署方法请参考此文档。完成后重启Docker容器:
docker restart ipsec-vpn-server
卸载 VPN
要卸载 IPsec VPN,运行辅助脚本:
警告: 此辅助脚本将从你的服务器中删除 IPsec VPN。所有的 VPN 配置将被永久删除,并且 Libreswan 和 xl2tpd 将被移除。此操作不可撤销!
wget https://get.vpnsetup.net/unst -O unst.sh && sudo bash unst.sh
更多信息请参见 卸载 VPN。