219.1.1.3 00:04:3c:ab:dd:eb UHLS2 0 0 xl0
4. 在网关A上为客户机器的外部IP做主机路由
route add -host 219.1.1.3/32 192.168.254.250
可以用netstat -rn | grep 219.1.1.3看到:
219.1.1.3 192.168.254.250 UGHS 0 7 fxp0
上述做法的说明:
使用ipfw 的fwd命令进行转发的语法,是容易看懂的。下面说明一下arp代理与主机路由
从客户机出发的访问,通过网关B和网关A即可。
但是从外网回来的IP地址,网关A如何才能接收呢?方法是在网关A上使用arp代理,告诉上级路由器219.1.1.3的包发到网关A上来。
然后在网关A上检查到 route add -host 219.1.1.3/32 192.168.254.250生成的路由,即会把包转发到该机器上。
注意事项:
为何必须同时使用
ipfw add 582 fwd 192.168.254.250 ip from 61.1.1.1 to 219.1.1.3 和
route add -host 219.1.1.3/32 192.168.254.250
按道理说,在网关A上应该可以找到192.168.254.250,那么不需要特意增加路由,即能正确的把包转发到192.168.254.250上。这在freebsd4.x上是正确的。
但是在freebsd5.3中,我发现如果不指定路由表,那么这个包最后会被网卡xl0截获(可能是因为arp代理的原因)。被截获后,网关A发出arp请求,最后无法找到219.1.1.3的mac地址(在本机上,arp代理被忽略)。
使用tcpdump来看,结果如下:
[root@ftp1]/root # tcpdump -i xl0 host 219.1.1.3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on xl0, link-type EN10MB (Ethernet), capture size 96 bytes
10:43:01.052683 IP 219.1.1.3 >; 61.1.1.1: icmp 40: echo request seq 16384
10:43:01.059563 IP 61.1.1.1 >; 219.1.1.3: icmp 40: echo reply seq 16384
10:43:01.059606 arp who-has 219.1.1.3 tell ftp1.tgegroup.com
10:43:02.279858 IP 219.1.1.3 >; 61.1.1.1: icmp 40: echo request seq 16640
10:43:02.287605 IP 61.1.1.1 >; 219.1.1.3: icmp 40: echo reply seq 16640
10:43:02.287635 arp who-has 219.1.1.3 tell ftp1.tgegroup.com
所以,freebsd5的网络实现时,在通过规则检查后,需要目标IP在路由表中的位置。我认为这或许是一个小bug吧。fwd命令并没有得到完美的执行。
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 转发 路由器 模拟 使用 网关 地址 命令 路由 回复 route |
注册
个人空间
