我刚刚设置了一个新的 Wireguard 服务器(尽可能原始),它连接到两个不同的子网,eth0 连接到互联网,eth1 连接到本地/专用网络。
当我连接我的 Wireguard 客户端时,我可以像您预期的那样通过绑定到 eth0 的 IP 有效地访问互联网,但我无法访问 eth1 上 192.168.1.0/24 子网中的任何内容。
我认为这是因为 /etc/wireguard/wg0.conf 设置为将所有内容从 wg0 路由到 eth0:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
有没有办法设置转发规则,以便给定的 IP 范围通过 eth1 转发,而其他所有内容都通过 eth0 发送?
任何指点都将不胜感激。
答案1
eth0
您的 WireGuard 服务器可能已经为和设定了适当的路由eth1
。运行ip route
检查。它可能看起来像这样:
$ ip route
default via 198.51.100.1 dev eth0 proto dhcp metric 100
198.51.100.0/24 dev eth0 proto kernel scope link src 198.51.100.123 metric 100
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.234 metric 200
10.0.0.0/24 dev wg0 scope link
对于 IPv6 路由,运行ip -6 route
。
您可能只需要复制MASQUERADE
已经存在的 iptables 规则,以eth0
添加类似的伪装eth1
:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUp = iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
PostUp = ip6tables -A FORWARD -i wg0 -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -t nat -D POSTROUTING -o eth1 -j MASQUERADE
使用 关闭服务器上的 WireGuard sudo wg-quick down wg0
,更改配置文件,然后使用 重新启动 WireGuard sudo wg-quick up wg0
。