Featured image of post 使用 IpSec 搭建服务器 VPN

使用 IpSec 搭建服务器 VPN

很多时候,处在两个局域网之中的计算机是无法通信的,如果项目是微服务架构,将无法进行协作开发

搭建服务器 VPN

服务端:需要被访问的一方,一般是服务器或对方电脑

客户端:有访问需求的一方,一般是当前用户(你)

搭建 VPN,就是把客户端当前所在的网络环境,挂载到服务端端的一方

  • 这样做客户端就在服务端的局域网内,所有的网络请求都需经过服务端
  • 客户端当前局域网的网络将不可用

不使用 Docker

查看官方步骤

使用 Docker

参考: 官方示例

  • 首先: 安装 Docker

  • 拉取镜像,支持以下架构系统:linux/amd64, linux/arm64linux/arm/v7

1
2
3
4
5
# docker 官方仓库
$ docker pull hwdsl2/ipsec-vpn-server
# https://quay.io/repository/hwdsl2/ipsec-vpn-server
$ docker pull quay.io/hwdsl2/ipsec-vpn-server
$ docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server
  • 镜像对照表

有两个预构建的镜像可用。默认的基于 Alpine 的镜像大小仅 ~17MB。

基于 Alpine 基于 Debian
镜像名称 hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server:debian
压缩后大小 ~ 17 MB ~ 62 MB
基础镜像 Alpine Linux 3.17 Debian Linux 11
系统架构 amd64, arm64, arm/v7 amd64, arm64, arm/v7
Libreswan 版本 4.10 4.10
IPsec/L2TP
Cisco IPsec
IKEv2
  • 环境变量,选择一个目录创建 env 配置文件
    • 例如:/config/vpn.env 文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
## 基本配置
VPN_IPSEC_PSK=密钥
VPN_USER=用户名
VPN_PASSWORD=密码
## 可选:其他用户(空格隔开)
VPN_ADDL_USERS=root1 root2
VPN_ADDL_PASSWORDS=Hskj1234 Hskj1234
## 可选:DNS 换成国内的(默认为Google)
VPN_DNS_SRV1=114.114.114.114
VPN_DNS_SRV2=223.5.5.5
## 可选:子网,分配内网IP
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
  • 启动服务(--env-file 指定上一步配置的文件)
1
$ docker run --net=host --name ipsec-vpn-server --env-file /config/vpn.env --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 hwdsl2/ipsec-vpn-server
  • 查看是否启动成功
1
$ docker ps
  • 开启端口:UDP 500 UDP 4500

windows 使用 IPsec/L2TP

  • 首次连接,需要更新注册表(处理 windows 兼容性)。管理员打开 CMD

    1
    
    REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
    
  • windows 设置中打开 VPN 连接,输入连接名称 连接地址 共享密钥 用户名 密码 ,点击连接

如果连接失败,请检查输入内容及连接方式

确认无误后仍然失败,尝试重启计算机(可能注册表更改未生效)

重启后还是失败,可以尝试 IKEv2 连接

  • ipconfig 查看连接情况,可以看到建立的 VPN 连接及分配的局域网地址

windows 使用 IKEv2(推荐)

docker 容器启动后,会生成 IKEV2 客户端在容器内的 /etc/ipsec.d 目录下

  • 将配置文件复制到 Linux 主机 /config/vpn.env 文件同级目录下
1
2
3
4
# 查看容器内的 /etc/ipsec.d 目录的文件
$ docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# 示例:将一个客户端配置文件从容器复制到 Docker 主机当前目录
$ docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./
  • 从 Linux 主机下载 /config/vpnclient.p12 到 windows 电脑

  • 参考此链接 ,按步骤拷贝文件并连接(会提供一个 CMD 脚本,用于导入刚刚连接)

  • ipconfig 查看连接情况,可以看到建立的 VPN 连接及分配的局域网地址

非 Windows 电脑

参考官方文档

Licensed under CC BY-NC-SA 4.0