我已经在同一台机器上设置了 Wireguard 对等端和 OpenVPN 服务器。机器有一个公共 IP,因此其他 Wireguard 对等端和 OpenVPN 客户端可以连接到它。
对于 Wireguard,我使用子网:10.10.6.0/24
。对于 OpenVPN,我使用子网:10.10.8.0/24
。
现在...Wireguard 对等端可以互相看到(ping)。OpenVPN 客户端也可以互相看到(ping)。
但是...Wireguard 对等端无法 ping OpenVPN 客户端,反之亦然。怎么办?
在 Wireguard 激活后,我立即运行此脚本:
#!/bin/bash
IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"
IN_FACE="ens3" # NIC connected to the internet
WG_FACE="wg0" # WG NIC
SUB_NET="10.10.6.0/24" # WG IPv4 sub/net aka CIDR
WG_PORT="51194" # WG udp port
SUB_NET_6="fd42:42:42:42::/112" # WG IPv6 sub/net
## IPv4 ##
$IPT -t nat -I POSTROUTING 1 -s $SUB_NET -o $IN_FACE -j MASQUERADE
$IPT -I INPUT 1 -i $WG_FACE -j ACCEPT
$IPT -I FORWARD 1 -i $IN_FACE -o $WG_FACE -j ACCEPT
$IPT -I FORWARD 1 -i $WG_FACE -o $IN_FACE -j ACCEPT
$IPT -I INPUT 1 -i $IN_FACE -p udp --dport $WG_PORT -j ACCEPT
# Peers can see each other
$IPT -I FORWARD -i $WG_FACE -o $WG_FACE -j ACCEPT
在/etc/ufw/before.rules
我有(前 *filter
部分):
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.8.0/24 -o ens3 -j MASQUERADE
COMMIT
任何帮助都将受到高度赞赏。
答案1
你通常需要做三件事:
1. 向 WireGuard 客户端添加 OpenVPN 网络的路由。
在每个 WireGuard 客户端配置中,您可能已经有如下条目,以允许 WireGuard 客户端访问其网络中的其他对等方:
AllowedIPs = 10.10.6.0/24
向 OpenVPN 网络的每个 WireGuard 客户端添加类似的条目:
AllowedIPs = 10.10.6.0/24
AllowedIPs = 10.10.8.0/24
2. 向 OpenVPN 客户端添加 WireGuard 网络的路由。
为此,您只需在 OpenVPN 服务器配置中添加一个条目,即可将 WireGuard 网络的路由推送到每个 OpenVPN 客户端:
push "route 10.10.6.0 255.255.255.0"
或者,您可以使用以下路由手动更新每个 OpenVPN 客户端的配置:
route 10.10.6.0 255.255.255.0
3. 允许通过服务器的防火墙在网络之间转发连接。
看起来您已经遵循了许多 OpenVPN 教程之一,这些教程指导您使用 UFW 来管理服务器的防火墙。大多数教程都告诉您通过DEFAULT_FORWARD_POLICY="ACCEPT"
在 中设置允许服务器无差别地转发所有连接/etc/default/ufw
。如果您这样做了,则无需执行任何其他操作。
但是,如果您想锁定服务器,以便您允许的唯一连接转发是在 OpenVPN 和 WireGuard 网络内,请撤消该更改(以及对您的更改,/etc/ufw/before.rules
使您的 OpenVPN 客户端能够伪装成其 LAN 上的服务器,也可能伪装成 Internet 上的服务器),停止使用 WireGuard 的额外 iptables 脚本,而是添加这些 UFW 规则(以 root 身份运行;调整1194
到您的 OpenVPN 服务器的实际端口和tun0
实际接口名称):
# allow access to server's OpenVPN service
ufw allow 1194/udp
# allow access to server's WireGuard service
ufw allow 51194/udp
# allow OpenVPN clients to access other OpenVPN clients
ufw route allow in on tun0 out on tun0
# allow WireGuard clients to access other WireGuard clients
ufw route allow in on wg0 out on wg0
# allow OpenVPN clients to access WireGuard clients
ufw route allow in on tun0 out on wg0
# allow WireGuard clients to access OpenVPN clients
ufw route allow in on wg0 out on tun0
对于服务器本身的远程管理,您可能还需要添加以下一个或多个规则:
# allow access to server's SSH service
ufw allow ssh
# allow access to any service on server itself from OpenVPN clients
ufw allow in on tun0
# allow access to any service on server itself from WireGuard clients
ufw allow in on wg0
如果您将所有这些规则添加到 UFW 并运行ufw status
,您将看到以下内容:
Status: active
To Action From
-- ------ ----
1194/udp ALLOW Anywhere
51194/udp ALLOW Anywhere
22/tcp ALLOW Anywhere
Anywhere on tun0 ALLOW Anywhere
Anywhere on wg0 ALLOW Anywhere
Anywhere on tun0 ALLOW FWD Anywhere on tun0
Anywhere on wg0 ALLOW FWD Anywhere on wg0
Anywhere on wg0 ALLOW FWD Anywhere on tun0
Anywhere on tun0 ALLOW FWD Anywhere on wg0