Docker 搭建 IPsec VPN 服务器
一、准备工作
1.1 获取服务器
本文使用阿里云 ECS 服务器(香港节点,CentOS 7.9 64位)进行演示。学生用户可通过阿里云学生计划免费领取服务器。
重要信息记录:
- 公网 IP 地址:在服务器控制台查看并记录(后续配置需要)
- 操作系统:CentOS 7.9 64位
1.2 安装 Docker(如未安装)
1.2.1 更新系统并安装依赖
1 | sudo yum update -y |
1.2.2 添加 Docker 官方仓库
1 | sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
1.2.3 安装 Docker
1 | sudo yum install -y docker-ce docker-ce-cli containerd.io |
1.2.4 启动并设置开机自启
1 | sudo systemctl start docker |
1.2.5 验证安装
1 | # 查看 Docker 版本 |
验证成功标志:能看到 hello-world 镜像拉取成功并运行。
二、配置 VPN 服务器
2.1 创建配置目录
1 | mkdir -p /vpn |
2.2 创建环境配置文件
创建并编辑 .env 文件:
1 | nano /vpn/.env |
2.3 配置文件内容
将以下配置粘贴到 .env 文件中,根据实际情况修改:
1 | # IPsec 预共享密钥(重要!) |
配置说明:
VPN_PUBLIC_IP:必须替换为你的服务器公网 IPVPN_IPSEC_PSK:建议使用强密码,包含大小写字母、数字和特殊字符- 多个用户配置:确保用户名和密码顺序对应
三、部署 VPN 容器
3.1 首次运行容器
1 | docker run \ |
3.2 处理特权模式错误
如果出现错误提示需要特权模式,按以下步骤操作:
停止并删除现有容器:
1 | docker stop ipsec-vpn-server |
重新以特权模式运行:
1 | docker run \ |
3.3 检查容器状态
1 | # 查看容器运行状态 |
成功标志:日志中显示 IPsec VPN server started 或类似信息。
四、配置服务器防火墙
4.1 开放必要端口
VPN 服务需要以下 UDP 端口:
- 500:ISAKMP(IKE 协商)
- 4500:NAT-T(NAT 穿越)
- 1701:L2TP(可选)
方法一:使用 iptables(命令行)
1 | # 开放 UDP 500 端口 |
方法二:使用云控制台(推荐)
以阿里云为例:
- 登录阿里云控制台
- 进入 ECS 实例详情页
- 找到「安全组」配置
- 点击「配置规则」
- 手动添加以下入方向规则:
| 授权策略 | 协议类型 | 端口范围 | 授权对象 | 描述 |
|---|---|---|---|---|
| 允许 | UDP | 500/500 | 0.0.0.0/0 | IPsec ISAKMP |
| 允许 | UDP | 4500/4500 | 0.0.0.0/0 | IPsec NAT-T |
| 允许 | UDP | 1701/1701 | 0.0.0.0/0 | L2TP(可选) |
4.2 重启容器使配置生效
1 | docker restart ipsec-vpn-server |
五、Windows 客户端连接配置
5.1 创建 VPN 连接
- 打开「设置」→「网络和 Internet」→「VPN」
- 点击「添加 VPN 连接」
- 填写以下信息:
- VPN 提供商:Windows(内置)
- 连接名称:自定义(如 MyVPN)
- 服务器名称或地址:你的服务器公网 IP
- VPN 类型:使用预共享密钥的 L2TP/IPsec
- 预共享密钥:
.env文件中的VPN_IPSEC_PSK - 登录信息的类型:用户名和密码
- 用户名:
.env文件中的VPN_USER - 密码:
.env文件中的VPN_PASSWORD
5.2 修改注册表(解决连接问题)
以管理员身份打开 PowerShell 或命令提示符,执行:
1 | REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f |
5.3 连接 VPN
- 执行上述命令后重启计算机
- 在系统托盘点击网络图标
- 选择创建的 VPN 连接
- 点击「连接」
- 输入用户名和密码(如已保存则自动连接)
六、Android 客户端连接配置
6.1 创建 VPN 连接
- 打开「设置」→「更多连接」→「VPN」
- 点击「添加 VPN」或「+」
- 填写以下信息:
- 名称:自定义(如 MyVPN)
- 类型:L2TP/IPSec PSK
- 服务器地址:你的服务器公网 IP
- L2TP 密钥:留空
- IPSec 标识符:留空
- IPSec 预共享密钥:
.env文件中的VPN_IPSEC_PSK - 用户名:
.env文件中的VPN_USER - 密码:
.env文件中的VPN_PASSWORD
6.2 保存并连接
- 点击「保存」
- 在 VPN 列表中选择刚创建的连接
- 点击「连接」
七、故障排除
7.1 常见问题及解决
问题1:容器启动失败,提示特权模式错误
解决:使用 --privileged 参数重新运行容器(见3.2节)
问题2:客户端连接超时
检查步骤:
- 确认服务器公网 IP 正确
- 检查防火墙端口是否开放
- 验证容器是否正常运行
1
docker logs ipsec-vpn-server
问题3:Windows 连接错误 789
解决:
- 确保已执行注册表修改命令(5.2节)
- 重启计算机
- 检查预共享密钥是否正确
问题4:能连接但无法上网
检查:
- 确认 DNS 配置正确
- 检查服务器是否开启 IP 转发
1
echo 1 > /proc/sys/net/ipv4/ip_forward
7.2 查看连接状态
1 | # 查看容器实时日志 |
八、安全建议
8.1 密码安全
- 使用强密码:预共享密钥和用户密码应包含大小写字母、数字和特殊字符
- 定期更换:建议每月更换一次密码
- 最小权限:只为必要用户创建 VPN 账号
8.2 服务器安全
- 限制访问:在安全组中限制源 IP(如只允许特定国家或 IP 段)
- 监控日志:定期检查 VPN 连接日志
- 更新维护:定期更新 Docker 镜像和系统
8.3 备份配置
1 | # 备份 .env 配置文件 |
九、总结
通过以上步骤,你已成功在 CentOS 7 服务器上使用 Docker 搭建了 IPsec VPN 服务器。关键要点:
- 环境准备:确保 Docker 正确安装
- 配置正确:
.env文件中的公网 IP 必须准确 - 端口开放:确保 UDP 500 和 4500 端口对外开放
- 客户端配置:注意 Windows 需要修改注册表
优势:
- 使用 Docker 部署,简单快速
- 支持多用户同时连接
- 跨平台客户端支持(Windows、Android、iOS、macOS)
- 配置易于备份和迁移
后续维护:
- 定期检查容器日志
- 关注安全更新
- 监控服务器资源使用情况
现在你可以安全地通过 VPN 访问你的服务器资源,或用于保护公共 Wi-Fi 下的网络通信。