本篇文章将详细记录我在CentOS 7虚拟机上使用Docker搭建IPsec VPN服务器的全过程。通过本教程,您将了解从环境准备、安装配置到最终调试的详细步骤,帮助您顺利完成VPN的搭建。
第零步:购买一台服务器(学生党可以试着领取)
博主因为因为穷困潦倒只能求助国外留子领取了一个免费的阿里云ECS服务器(地址是香港,操作系统是CentOS 7.9 64位)。如果是学生党可以免费去领取阿里云服务器只需要完成任务即可,图中的公网ip要记住那个下面配置/.env文件的时候就是你的外网ip地址!!!
第一步:安装Docker
本次VPN的搭建是基于您已经在服务器上面安装并配置成功的基础上执行的,如果没有安装Docker请按照以下步骤安装docker,如果已经按照可以跳过此步骤去第二步。
首先跟新系统确保你的系统是最新的:
sudo yum update -y
安装Docker依赖的包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker的官方仓库(这里也可以使用阿里云,或者其他源仓库需要去配置文件手动添加一下),以便安装最新版本:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker的最新版本:
sudo yum install -y docker-ce docker-ce-cli containerd.io
安装完成后,启动Docker并设置为开机自启动:
sudo systemctl start docker
sudo systemctl enable docker
执行以下命令查看Docker版本,确保安装成功:
docker --version
运行一个简单的容器来验证Docker是否正常工作:
sudo docker run hello-world
等待代码执行之后,使用docker命令查看镜像是否拉取成功:
第二步:规划vpn配置信息
首先在根下创建一个目录来存放你的VPN配置文件。比如
mkdir -p /vpn
**创建
.env
文件:**在
/vpn
目录下创建
.env
文件并编辑:
nano /vpn/.env
# 如果使用不了nano用vim也行
vim /vpn/.env
按i进入编辑模式将如下信息写入.env文件:
# 这个很重要!!!!
VPN_IPSEC_PSK=AKIDkQD7!
# 配置用于登陆VPN的账号和密码
VPN_USER=test
VPN_PASSWORD=vpn1234
# 如下应该填写本机的外网IP(服务器外网ip)
VPN_PUBLIC_IP=36.111.***.***
# 配置额外的用户名和密码,记得中间要有空格隔开!
VPN_ADDL_USERS=vpn1 vpn2
VPN_ADDL_PASSWORDS=vpn11234 pass21234
#DNS配置
VPN_DNS_SRV1=8.8.8.5
VPN_DNS_SRV2=114.114.114.114
启动 IPsec VPN 容器: 在虚拟机的终端运行以下命令来启动 IPsec VPN Server:
docker run \
--name ipsec-vpn-server \
--env-file /vpn/.env \
--restart=always \
-p 500:500/udp \
-p 4500:4500/udp \
-v /lib/modules:/lib/modules:ro \
-d hwdsl2/ipsec-vpn-server
检查容器是否正常运行: 运行 docker ps 命令来查看容器状态:如果容器正常运行,你会看到容器的状态和端口映射信息。
按照以上步骤配置后,你的 IPsec VPN Server 应该会在 Docker 中正常运行。如果有任何问题,请查看容器日志:
docker logs ipsec-vpn-server
ps:额外补充这一步可能会遇到的问题,当你敲出这条命令后会显示很多这样的问题出来(如果没有可以跳过)
Error: This Docker image should be run in privileged mode. See: https://github.com/hwdsl2/docker-ipsec-vpn-server
Error: This Docker image should be run in privileged mode. See: https://github.com/hwdsl2/docker-ipsec-vpn-server
这个错误是因为 Docker 容器需要以特权模式(privileged mode)运行,以便能够访问和管理网络设备。要解决这个问题,你需要在运行 Docker 容器时加上
--privileged
标志。
如果之前已经启动了容器并且它处于运行或停止状态,你需要先将其删除,然后再重新执行命令。否则会出现容器名称冲突的问题。
停止并删除现有容器
docker stop ipsec-vpn-server
docker rm ipsec-vpn-server
重新运行容器
--privileged
:启用特权模式,使容器能够访问主机的网络设备
docker run \
--name ipsec-vpn-server \
--env-file /vpn/.env \
--restart=always \
--privileged \
-v /lib/modules:/lib/modules:ro \
-p 500:500/udp \
-p 4500:4500/udp \
-d hwdsl2/ipsec-vpn-server
第三步:查看 Docker 容器内的日志,以确认连接情况
敲如下命令
docker logs ipsec-vpn-server
这样就算成功了一半毕竟连上去了才算成功,这时候需要去对外开放VPN端口不然会出现连接不上的情况,因为阿里云提供了控制面板我就不演示用代码对外开放端口了(代码放下面了)
# 开放 UDP 500 端口
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT
# 开放 UDP 4500 端口
sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
# 开放 UDP 1701 端口
sudo iptables -A INPUT -p udp --dport 1701 -j ACCEPT
第四步:开放端口(控制面板)
点击后选择手动添加添加如下三个端口即可
- 协议类型:选择“自定义”或“UDP”(根据需要)。
- 端口范围:输入您的 VPN 使用的端口,例如
500
(ISAKMP)和4500
(NAT-T),以及1701
(L2TP)等。 - 授权对象:可以选择“0.0.0.0/0”表示允许所有 IP 访问,或限制为特定的 IP 段。
- 描述:可以给规则添加一个描述,便于后续识别。
配置好了记得重启一下docker容器
docker restart ipsec-vpn-server
第五步:电脑连接VPN(手机结尾随手讲一下)
这里我因为之前已经创建过了所以会有些许不同不必在意
这里右键点开属性
以上步骤全部都是要点确定的!!!不然不会生效最后在左下角右键点开win图标选择Windows PowerShell将如下命令敲进去
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
执行成功后重启计算机,再次开机你点开wifi/网络图标会发现一个VPN连接点击连接他会让你输入账号密码,就使用你在/.env文件里面的账号密码就行了
PS:手机版本的顺带讲一下吧(我用的是安卓系统)
在设置里面找到更多连接通常在wifi下面,里面就有VPN连接新建一个
名称:任意自定义名称,比如 "My VPN"。
服务器地址:填写你 VPN 服务器的 公网 IP 地址,这个在
.env
文件中的
VPN_PUBLIC_IP
配置项。
L2TP 密钥:一般情况下,这个可以留空或者不填(很多客户端也不要求这个)。
IPsec 共享密钥(预共享密钥):这个在
.env
文件中配置的
VPN_IPSEC_PSK
。
用户名:填写
.env
文件中的
VPN_USER
。
密码:填写
.env
文件中的
VPN_PASSWORD
。
IPsec 标识符 通常也可以不填写或留空,因为它并不总是需要配置。只要你的共享密钥、用户名和密码匹配,连接应该成功。
版权归原作者 河间瘦虎 所有, 如有侵权,请联系我们删除。