通过 VPN 进行端口重定向

通过 VPN 进行端口重定向

我想通过 VPN 将我的 TCP 流量重定向到 IRC。

我用 iptables 标记数据包并为这些数据包创建新的路由:

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter

iptables -t mangle -A OUTPUT ! -d 192.168.0.0/16 -p tcp --dport 6667 -j MARK --set-mark 0x42

ip route add default dev tun0 src 10.5.82.5 table VPN
ip rule add fwmark 0x42 table VPN

VPN 连接:

# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet adr:10.5.82.5  P-t-P:10.5.82.6  Masque:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:2898 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3163 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:100 
          RX bytes:159644 (155.9 KiB)  TX bytes:257601 (251.5 KiB)

数据包被重定向到本地机器上的 tun0(iptables 标记和 ip 规则正常)但没有数据包到达 VPN 的 tun0 接口。

你有主意吗?

提前致谢。

答案1

如果您的 IRC 流量源自您创建规则的同一主机,您可能会看到传出数据包中“错误”的源 IP 地址问题 - 使用 检查源地址是否为 10.5.82.5 tcpdump -i tun0 -v -n。如果不是,只需附加src 10.5.82.5到您的ip route add命令即可。

如果流量源自其他地方,请考虑 NAT 规则:iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

另外,你的路线应该是通过 10.5.82.6(远程网关 IP 地址),而不是您的本地接口。虽然由于它是 PtP 接口,因此它在任何情况下都应该可以工作,但感觉不对。添加路由 via 脚本时,您可以简单地省略“via”参数,而只使用dev tun0。这适用于 PtP 接口,因为对于在链路的另一端联系哪个主机没有任何歧义。

答案2

使用 OpenVPN重定向网关自动将默认网关重定向到 VPN 的选项,无需手动操作路由和 iptables。

相关内容