我有一个本地网络和一个远程网络。我的本地网络有路由器、ubuntu 盒子和电视。远程网络有一个路由器和一个树莓派。本地ubuntu盒子和远程树莓派通过wireguard隧道连接。
目标是通过远程树莓派将电视连接到互联网,以便来自电视的互联网请求看起来来自我的远程网络的公共 IP。为此,我将 ubuntu 盒子设置为电视的网关,然后它应该将流量从电视的本地 IP 仅转发到wireguard 接口(wg0),以便它最终到达远程树莓派。但这不起作用,似乎流量永远不会到达 wg0。
ubuntu 盒子和树莓派上的 IP 转发均已启用。我添加了基于策略的路由,如下所示:
ip rule add from <TV local IP> table wg0
ip route add default via <rpi wireguard IP> dev wg0 table wg
此外,在 wg0 接口上配置 iptables,如下所示:
iptables -A FORWARD -i enp1s0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o enp1s0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
我缺少什么?
答案1
从头开始,我发现我缺少 Raspberry Pi 上的相关 iptables 规则,无法将流量从其wireguard 接口转发到其以太网接口:
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
现在,将 Linux 盒子设置为电视的网关会导致所有流量根据需要通过wireguard 路由到树莓派。