我需要在具有活动 OpenVPN 客户端的计算机上运行 Wireguard 服务器。连接到 Wireguard 服务器的客户端将通过 NAT 连接到“tun0”处的 OpenVPN 客户端,并通过该接口访问互联网。
以前,当我必须使用其他没有自己的 tun/tap 接口(如 Shadowsocks)的 VPN 解决方案创建类似的设置时,我会使用 iptables 'fwmark' 来标记不会通过创建的 tun0 接口路由的数据包打开VPN。
我将在本地 IP 10.3.0.11(VPN 服务器位于端口 2000)的服务器上按顺序启动以下命令,我将能够连接到我的 VPN 服务器并通过活动的 OpenVPN 客户端浏览互联网。
ip route add default via 10.3.0.11 dev eth0 table 7
ip rule add fwmark 0x55 priority 1000 table 7
ip route flush cache
iptables -t mangle -A OUTPUT -p udp --sport 2000 -j MARK --set-mark 0x55
iptables -I INPUT -p udp -m udp --dport 2000 -j ACCEPT
但是,由于 Wireguard 创建了自己的接口 (wg0),因此该解决方案不起作用。一旦 OpenVPN 客户端建立连接,Wireguard 服务器就无法访问。
我已经检查过,没有防火墙阻止与在 UDP 端口 3333 上运行的 Wireguard 服务器的连接,并且当 OpenVPN 连接未处于活动状态时,连接工作正常。
这是 OpenVPN 连接之前“route -n”的输出
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0
10.33.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
169.254.0.0 0.0.0.0 255.255.0.0 U 1040 0 0 eth0
这是 OpenVPN 连接后“route -n”的输出
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0
10.8.8.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
10.33.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
128.0.0.0 10.8.8.1 128.0.0.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 1040 0 0 eth0
<OVPN Server> 10.0.0.1 255.255.255.255 UGH 0 0 0 eth0
这是Wireguard的配置文件
[Interface]
Address = 10.33.0.1/24
Address = fd33:3300::1/64
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o tun0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o tun0 -j MASQUERADE
ListenPort = 3333
FwMark = 0x55
PrivateKey = <private key>
[Peer]
PublicKey = <public key>
AllowedIPs = 10.33.0.11/32, fd33:3300::11/128
我怎样才能改变我的服务器的配置,以便
- 客户端可以通过 UDP 端口 3333 连接到 Wireguard 服务器
- 客户端可以通过 Wireguard 服务器访问互联网,该服务器将通过 tun0(由 OpenVPN 创建)路由所有互联网流量