使用 OpenVPN 配置虚拟局域网
由于 WMMT
那边的需要,因此研究了一手如何配置虚拟局域网,以便能够远程联机揽抄(确信)
本文使用的是 Linux
进行配置,只要有 Docker
和公网IP就可以了。
首先需要先拉取 Docker
的镜像,一般用 kylemanna/openvpn
如果服务器是 arm64
,则使用 nubacuk/docker-openvpn:arm64
1. 新建文件夹
在服务器内合适的地方新建一个文件夹:
mkdir openvpn
cd openvpn
2. 创建 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
然后启动终端,切换到 docker-compose.yml
所在的文件夹,执行以下命令:
提示
第一条命令执行前,需要进行更改:
udp://VPN.SERVERNAME.COM
中的VPN.SERVERNAME.COM
换成服务器公网IP或者域名xxx.xxx.xxx.0/24
中的xxx.xxx.xxx.0
换成自定义子网范围,如192.168.50.0/24
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
。
成功后,在 docker-compose.yml
的同一个文件夹下会出现一个 config
文件夹。
3. 编辑 openvpn.conf
文件
将原文件中
dev tun0
进行修改:- 如果是搭建代理隧道,则用
dev tun0
- 如果是搭建虚拟局域网,则用
dev tap
- 如果是搭建代理隧道,则用
注释原有
DNS
设置conf# push "block-outside-dns" # push "dhcp-option DNS 8.8.8.8" # push "dhcp-option DNS 8.8.4.4"
新增配置
conf# 告诉客户端代理下面的 IP 段,这里换上之前自定义的子网范围 push "route xxx.xxx.xxx.0 255.255.255.0 vpn_gateway" # 添加一条 允许客户端通过 VPN 互相通讯 client-to-client # 允许多客户端复用 .oven 文件 duplicate-cn
4. 生成 .ovpn
文件
在 docker-compose.yml
的同一个文件夹下进行操作
生成客户端密钥
shdocker-compose run --rm openvpn easyrsa build-client-full client nopass
生成客户端
ovpn
文件shdocker-compose run --rm openvpn ovpn_getclient client > client.ovpn
成功后当前文件夹下会出现名为 client.ovpn
的配置文件。
5. 修改 client.ovpn
配置文件
配置文件默认是 tun
,如果我们使用 tap
则需要将配置文件中的 dev tun
修改成 dev tap
。
默认配置文件是全局代理。
如果全局代理的话,就会导致服务器的带宽被我们正常上网的流量所占满。
因此,为了只代理局域网部分的流量,我们需要删除配置文件的这一行(一般在最后一行):
redirect-gateway def1
在配置文件中添加下列几行,使得客户端能够自动重连:
resolv-retry infinite
persist-key
persist-tun
6. 启动服务器
在 docker-compose.yml
的同一个文件夹下进行操作
docker-compose up -d
然后,下载 client.ovpn
,并导入到其软件后连接,就可以访问其子网分配范围的某一个IP。
但需要注意的是,务必得关闭防火墙(Windows),否则有可能出现无法 ping
通的情况。