admin 管理员组

文章数量: 887836

本篇文章将详细记录我在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/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/hwdsl2/docker-ipsec-vpn-server

Error: This Docker image should be run in privileged mode. See: https://github/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 标识符 通常也可以不填写或留空,因为它并不总是需要配置。只要你的共享密钥、用户名和密码匹配,连接应该成功。

本文标签: 学术交流 图文并茂 仅作 器上 详细