我想通过 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。