Client<------>Gateway_intf0--Gateway_intf1<------->Server
如上所示的连接,Client和Server之间经过Gateway连接。各个设备(接口)的IP如下:
Client: 192.168.0.168/24
Gateway_intf0:192.168.0.169/24
Gateway_intf1:192.168.1.169/24
Server:192.168.2.200/24
由于工作需要在Gataway和Server之间增加一个Linux主机,组网修改为如下:
Client<------>Gateway_intf0--Gateway_intf1<------->Linux_eth0--Linux_eth1<------->Server
各个接口IP
Linux_eth0:192.168.1.170/24
Linux_eth1:192.168.2.170/24
物理上组网完成了,进一步如下操作:
1. Gateway上配置如下路由:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.200 192.168.1.170 255.255.255.255 U 2 0 intf1 ------- (目的地址Server的下一跳为Linux_eth0接口地址192.168.1.170/24)
2. Linux上IP转发使能打开 echo 1 > /proc/sys/net/ipv4/ip_forward
Client上访问Server,同时在Linux上tcpdump -i eth0抓包发现报文已经到达eth0,源IP是Client的IP(192.168.0.168),目的IP是Server的IP(192.168.2.200)。同时由于 Linux_eth1和Server的IP是一个网段,Linux主机上自动生成到Server的出接口是eth1的路由,这样上行(Client-->Server)的路由是完备了,但是奇怪的是报文在eth0收到后没有从eth1送出发给Server。经过尝试后,在Linux上配置如下路由后报文上行报文可以发给Server:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.168 192.168.1.169 255.255.255.255 U 2 0 eth0 ------- (目的地址Client的下一跳为Gateway_intf1接口地址192.168.1.169/24)
按理说上行报文已经有路由了,报文也已经在eth0上收到了,为什么Linux主机上不配置下行报文的路由上行报文也不转发呢?可能是Linux为了防止攻击,对于收到报文如果没有源IP的路由是不处理的?