前言
OpenVPN 是一款强大且高度灵活的 VPN 守护进程。它支持 SSL/TLS 安全协议、以太网桥接、通过代理或 NAT 进行 TCP 或 UDP 隧道传输。此外,它还支持动态 IP 地址和 DHCP,可扩展至数百或数千用户,并可移植到大多数主流操作系统平台
参考:
https://wiki.archlinux.org/title/OpenVPN
环境搭建
由于我的公网 vps 无了,只好用两台机器进行环境模拟
服务端:192.168.231.170
客户端:192.168.231.196
服务端上 docker-compose.yml
version: '3'
services:
openvpn:
image: kylemanna/openvpn
container_name: openvpn
cap_add:
- NET_ADMIN # 提供网络管理权限,用于创建虚拟网卡
ports:
- "1194:1194/udp"
restart: always
volumes:
- ./openvpn-data:/etc/openvpn
生成服务端配置:
docker-compose run --rm openvpn ovpn_genconfig -u udp://192.168.231.170

初始化 PKI:
docker-compose run --rm openvpn ovpn_initpki


此处的密码设置为 123456,在后面要求输入 pass 时填入密码即可生成服务端证书
然后就可以启动 openvpn 服务了
docker-compose up -d
客户端连接
服务端创建一个 client01 的用户
docker-compose run --rm openvpn easyrsa build-client-full client01 nopass

然后将生成的证书打包为 ovpn 文件
docker-compose run --rm openvpn ovpn_getclient client01 > client01.ovpn

接下来把这个 ovpn 文件传给客户端进行连接

连接成功,同时分配了一个 ip 192.168.255.6
ping 和 traceroute 验证一下

此处代理之后第一跳是服务端的虚拟 ip,而不是当前路由器的 ip