让192.168.10.232发送到192.168.10.234的数据包,都经过192.168.10.233。也就是把192.168.10.232发送到192.168.10.234的数据包,的网关设置为192.168.10.233。
一、配置route
1.1 查看路由
在192.168.10.232上,route -n
1.2 添加路由
在192.168.10.232上, route add -host 192.168.10.234 gw 192.168.10.233 dev eth0
route -n
该路由是:让192.168.10.232发送到192.168.10.234的数据包,都经过192.168.10.233,232上的出口为eth0。
1.3 配置“转发”
在192.168.10.233上,将/proc/sys/net/ipv4/ip_forward的值设置为1:echo 1 > /proc/sys/net/ipv4/ip_forward。
或将 /etc/sysctl.conf中的net.ipv4.ip_forward设置为1。
二、测试
2.1 出错的测试
在192.168.10.232上执行:ping 192.168.10.234。
在192.168.10.233上抓包:tcpdump -i em1 icmp -nn -vv -s0 如下:
产生“ICMP redirect”,当再次执行上述2步骤时,数据包不再经过234。
原因:232、233、234在同一个局域网内,当232发往234的数据包,经过233时,233发现都在同一个局域网内,就发送“ICMP redirect”告诉232可以直接将数据包发送到234,不必经过233,以后的数据包,就不会再经过233。
2.2 解决办法
1.不让233发送redirect数据包:在233,将/proc/sys/net/ipv4/conf下的 all/send_redirects、default/send_redirects、em1/send_redirects、 lo/send_redirects的值改为0。
echo 0 > all/send_redirects
echo 0 > default/send_redirects
echo 0 > em1/send_redirects
echo 0 > lo/send_redirects
或者
2.不让232接收redirect数据包:在232,将/proc/sys/net/ipv4/conf下的 all/accept_redirects、default/accept_redirects、em1/accept_redirects、 lo/accept_redirects的值改为0。
最好用解决办法1。解决办法2,虽然232不接受包,但是233会不停的想232发送“redirect”包,不太好。
2.3 正确的测试
再次执行2.1中的测试,即可发现结果正确,所有由232发送到234的数据包,都经过了233。