使服务器不使用 VPN 作为默认网关

使服务器不使用 VPN 作为默认网关

我有一台连接到远程 WireGuard VPN 的本地服务器。该服务器通过 VPN(wg0 接口)路由其所有流量,但我需要它仅使用 VPN 与 VPN 网络的其他成员通信,并使用 eth0 接口传输其余流量。

我怎样才能实现这个目标?

VPN 服务器 wireguard 配置:

[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 60207
PrivateKey = privatekey
PostUp = iptables -I INPUT -p udp --dport 60207 -j ACCEPT
PostUp = iptables -I FORWARD -i eth0 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -I FORWARD -i wg0 -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport 60207 -j ACCEPT
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

### Client
[Peer]
PublicKey = pubkey
PresharedKey = preshardkey
AllowedIPs = 10.66.66.3/32,fd42:42:42::3/128

### Client
...
### Client
...

客户端(本地服务器)wireguard 配置:

[Interface]
PrivateKey = privatekey
Address = 10.66.66.3/32,fd42:42:42::3/128

[Peer]
PublicKey = pubkey
PresharedKey = preshardkey
Endpoint = endpoint:60207
AllowedIPs = 0.0.0.0/0,::/0

答案1

[Peer]
AllowedIPs = 0.0.0.0/0,::/0

wg-quick工具将安装与每个对等体的 AllowedIP 对应的内核路由。因此,避免让 wg-quick 安装默认路由的最简单方法是未指定AllowedIPs 中的默认路由 - 将 catch-all 0.0.0.0/0 和 ::/0(分别代表 IPv4 和 IPv6 的“默认”路由)更改为网络前缀列表,这就是将被路由的内容。

(从技术上讲,这两个参数是独立的,因此可以使用选项Table=让 wg-quick 将路由放在其他地方 - 或者根本不安装任何路由 - 结合PostUp=这样做可以添加必要的路由。然而在实践中,这对于基本的工作站客户端来说并不是真正需要的;只需编辑 AllowedIPs 会更容易。)


另一方面,如果 VPN 仅用于访问本地网络,那么您不需要服务器上的任何“MASQUERADE”规则;本地网络应该有一条常规路由回到 VPN 网络。

相关内容