Linux 使用 WireGuard 进行内网穿透,可以在公网机子上不开启 NAT,把内网机子上 WireGuard 的 allowed ips 设置成 0.0.0.0/0,然后按如下设置 ip rule:
ip route add default via $GW dev wg0 table 20
ip rule add from $IP table 20
其中 $IP 是 WireGuard 接口的 IP,因为 WireGuard 是隧道协议,不需要 gateway,$GW 可以写 0.0.0.0,或者直接去掉 via $GW。20 是 table id,可以写任意整数。
这样设置后内网机子能拿到外部访问者的 IP 地址,同时沿原路发回数据包。这个方案也可以用于其他多网络的情况。
ip route add default via $GW dev wg0 table 20
ip rule add from $IP table 20
其中 $IP 是 WireGuard 接口的 IP,因为 WireGuard 是隧道协议,不需要 gateway,$GW 可以写 0.0.0.0,或者直接去掉 via $GW。20 是 table id,可以写任意整数。
这样设置后内网机子能拿到外部访问者的 IP 地址,同时沿原路发回数据包。这个方案也可以用于其他多网络的情况。