我的系统上有多个接口,用于不同的子网。我还有一个伪接口,它是用于隧道数据包的点对点驱动程序。我尝试使用 ip route 命令添加路由,以便在隧道接口上发送数据包时使用特定接口的源 IP。
在此示例中,当将数据包发送到可通过隧道到达的 60.60.60.1 时,我想使用 eth1.100 上设置的源 IP 11.11.11.1。这就是我的路由表的样子。
/tmp # ip route show
60.60.60.1 dev tsgw scope link src 11.11.11.1 >> Added this route.
11.11.11.0/24 dev eth1.100 proto kernel scope link src 11.11.11.1
default via 192.168.1.254 dev eth1.4094 metric 10
192.168.1.0/24 dev eth1.4094 proto kernel scope link src 192.168.1.3
如果我 ping 60.60.60.1,它仍会选择通过其编程默认路由的接口。
PING 60.60.60.1 (60.60.60.1): 56 data bytes
19:35:32.848428 IP 192.168.1.3 > 60.60.60.1: ICMP echo request, id 16986, seq 0, length 64
19:35:33.848621 IP 192.168.1.3 > 60.60.60.1: ICMP echo request, id 16986, seq 1, length 64
19:35:34.848819 IP 192.168.1.3 > 60.60.60.1: ICMP echo request, id 16986, seq 2, length 64
我在设置源时做错了什么吗?正确的做法是什么?基本上,我希望发送所有使用 tsgw 接口的数据包以使用特定的私有源 IP。
eth1.100 Link encap:Ethernet HWaddr 00:0B:86:B8:91:10
inet addr:11.11.11.1 Bcast:11.11.11.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1602 Metric:1
RX packets:560 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:97395 (95.1 KiB) TX bytes:704 (704.0 B)
tsgw Link encap:Point-Point Protocol
inet addr:127.0.0.2 P-t-P:127.0.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:960 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6240 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:1121650 (1.0 MiB)
答案1
我将使用 iptables 来实现这一点。
经过伪装后它看起来会像这样:
iptables -t nat -A POSTROUTING -o tsgw -j MASQUERADE