null

使用 OpenVPN 搭建虚拟局域网

本文于 2021/12/11 00:09 进行了修改。


寒假到了,为了能更方便地和朋友本地联机游戏,有必要用 OpenVPN 搭建一个虚拟局域网。

服务器使用的 Docker 来自 kylemanna/openvpn,如果是 arm64 则使用 nubacuk/docker-openvpn:arm64

首先新建一个文件夹:

mkdir openvpn
cd openvpn

创建 docker-compose.yml,文件内容如下:

version: '2'

services:
openvpn:
cap_add:
- NET_ADMIN
image: kylemanna/openvpn
# image: nubacuk/docker-openvpn:arm64
container_name: openvpn
ports:
- "1194:1194/udp" # 冒号左边为外部映射端口
restart: unless-stopped
volumes:
- ./config:/etc/openvpn

执行下面的命令初始化配置文件,把里面的 VPN.SERVERNAME.COM 换成你的域名或者 IP 地址,把 xxx.xxx.xxx.0 换成你想要自定义的子网范围,例如 192.168.255.0

docker-compose run --rm openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM -s xxx.xxx.xxx.0/24
docker-compose run --rm openvpn ovpn_initpki

运行期间你需要输入 CA pass phrase 并再次输入确认,生成完毕后同样也要再次输入刚刚设置的 pass phrase。

成功后会出现一个 config 文件夹,里面有个 openvpn.conf 文件,我们要做一些修改:

# 修改 tap/tun,若是搭建虚拟局域网则推荐使用 tap,若是搭建代理隧道则推荐使用 tun
# dev tun0
dev tap

# 将原本的 dns 设置注释掉
# push "block-outside-dns"
# push "dhcp-option DNS 8.8.8.8"
# push "dhcp-option DNS 8.8.4.4"

# 告诉客户端代理下面的 IP 段,这里换上之前自定义的子网范围
push "route xxx.xxx.xxx.0 255.255.255.0 vpn_gateway"

# 添加一条 允许客户端通过 VPN 互相通讯
client-to-client

# 允许多客户端复用 .oven 文件
duplicate-cn

然后生成 .ovpn 文件:

# 生成客户端密钥
docker-compose run --rm openvpn easyrsa build-client-full client nopass
# 生成客户端 ovpn 文件
docker-compose run --rm openvpn ovpn_getclient client > client.ovpn

成功后当前文件夹下会出现名为 client.ovpn 的配置文件。

配置文件默认是 tun,如果我们使用 tap 则需要将配置文件中的 dev tun 修改成 dev tap

默认配置文件是全局代理,但我们只希望代理局域网的流量,不想代理上网流量。编辑配置文件删除下面一行(一般在最后一行):

redirect-gateway def1

在配置文件中添加下列几行,使得客户端能够自动重连:

resolv-retry infinite
persist-key
persist-tun

在手机、电脑上安装好对应操作系统的 OpenVPN 客户端,把修改好的 .ovpn 配置文件下载到手机、电脑。最后用下面的命令启动 OpenVPN 服务器,测试一下连接。

# 加 -d 可在后台运行
docker-compose up

如果没有问题的话,连接上的设备会被分配到之前自定义的子网范围内的某一个 IP,并且可以互相 ping 通。

如果使用的是 Windows,那还可能还遇到被系统防火墙拦截的情况,推荐进入防火墙的高级设定,增加一个入站规则,让整个子网变成白名单即可。

参考教程:https://eyhn.in/eyhn-network/

支持一下
资助 Nano 让 Nano 吃得更胖!
  • 微信扫一扫
  • 支付宝扫一扫