本文于 2021/12/11 00:09 进行了修改。
寒假到了,为了能更方便地和朋友本地联机游戏,有必要用 OpenVPN 搭建一个虚拟局域网。
服务器使用的 Docker 来自 kylemanna/openvpn,如果是 arm64 则使用 nubacuk/docker-openvpn:arm64。
首先新建一个文件夹:
mkdir openvpn |
创建 docker-compose.yml
,文件内容如下:
version: '2' |
执行下面的命令初始化配置文件,把里面的 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 |
运行期间你需要输入 CA pass phrase 并再次输入确认,生成完毕后同样也要再次输入刚刚设置的 pass phrase。
成功后会出现一个 config 文件夹,里面有个 openvpn.conf 文件,我们要做一些修改:
# 修改 tap/tun,若是搭建虚拟局域网则推荐使用 tap,若是搭建代理隧道则推荐使用 tun |
然后生成 .ovpn 文件:
# 生成客户端密钥 |
成功后当前文件夹下会出现名为 client.ovpn
的配置文件。
配置文件默认是 tun
,如果我们使用 tap
则需要将配置文件中的 dev tun
修改成 dev tap
。
默认配置文件是全局代理,但我们只希望代理局域网的流量,不想代理上网流量。编辑配置文件删除下面一行(一般在最后一行):
redirect-gateway def1 |
在配置文件中添加下列几行,使得客户端能够自动重连:
resolv-retry infinite |
在手机、电脑上安装好对应操作系统的 OpenVPN 客户端,把修改好的 .ovpn 配置文件下载到手机、电脑。最后用下面的命令启动 OpenVPN 服务器,测试一下连接。
# 加 -d 可在后台运行 |
如果没有问题的话,连接上的设备会被分配到之前自定义的子网范围内的某一个 IP,并且可以互相 ping 通。
如果使用的是 Windows,那还可能还遇到被系统防火墙拦截的情况,推荐进入防火墙的高级设定,增加一个入站规则,让整个子网变成白名单即可。