iptables 将流量转发至wireguard

iptables 将流量转发至wireguard

考虑以下设置。我有一个连接到互联网的 VPS,有固定 IP。此外,在我的家庭网络中,在 NAT 路由器后面,我的家庭网络确实有多个主机。我的家庭网络使用 网络192.168.1.0/24,并且在 Host1 上我已为我的 VPS 配置了 Wireguard VPN。在此 VPN 中,VPS 使用 IP 192.168.10.1,Host1 使用 IP 192.168.10.2。从 VPS,我可以 ping 家庭网络中的主机,反之亦然,这工作正常。

接下来我想从 VPS 访问我的家庭网络。为此,我在VPS上添加了一条路由,如下所示

ip route add 192.168.1.0/24 via 192.168.10.2 dev wg0

我的想法是我可以从 VPS 访问家庭网络上的不同主机。但是,我知道我需要在 Host1 上启用 IP 转发,我执行如下操作:

iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE

而且我也配置了net.ipv4.ip_forward = 1。通过这两个配置,我可以从 VPS ping 家庭网络中的任何主机。然而,我的家庭网络中有一台 Web 服务器,当我尝试在我的 VPS 上访问该服务器时,no route to host即使我可以 ping 通该 Web 服务器,也会出现问题。我tcpdump在家庭网络中的 Host1 上运行并看到错误消息admin prohibited filter,因此与 ICMP 相比,HTTP 流量似乎未正确转发。那么我需要如何配置iptables才能在 VPS 上访问我家庭网络中的 Web 服务器呢?我想我还需要添加 NAT,但我不确定如何添加。

答案1

你肯定错过了额外的密钥路由服务器的 WireGuard 配置中的条目。

服务器的 WireGuard 层必须知道匹配的对等点是什么,例如 IP 地址192.168.0.42。为此,它检查是否存在具有正确条目的对等点AllowedIPs。定义了一个对等点,并且它肯定具有以下条目:

AllowedIPs = 192.168.10.2

这不匹配192.168.0.42。通过 WireGuard 接口发送的数据包将192.168.0.42被丢弃。

因此,每当将额外的路线添加到服务器通过其 WireGuard 接口(通常不会AllowedIPs = 0.0.0/0/0像客户端那样使用),很可能其条目(其中之一)AllowedIPs也必须相应更改。在这种情况下应该有:

 AllowedIPs = 192.168.10.2, 192.168.1.0/24

这会将目的地与正确的出口相关联,并验证从该对等点接收到的数据包的入口。


iptables似乎与问题无关。

相关内容