Linux的高级路由和流量控制HOWTO中文版(2)
路的另一端只有一个地址:212.64.94.1./32意思是说没有表示网络的bit.
掌握这些概念是绝对重要的.如果有问题,不妨先参考以下这个HOWTO文件
开头曾经提到的那些文档.
你应该注意到了"qdisc",它是基于对列规范的一个概念.它在后面会变得很重
要.
3.4.3. 让ip显示路由
好的,现在我们已经知道如何找到10.x.y.z了,然后我们就可以到达212.64.94.1.
但这还不够,我们还得说明如何找到全世界.可以通过我们的ppp连接找到
Internet,212.64.94.1愿意把我们的数据包发给全世界,并把回应的数据包传回给
我们.
[ahu@home ahu]$ ip route show
212.64.94.1 dev ppp0 proto kernel scope link src 212.64.94.251
10.0.0.0/8 dev eth0 proto kernel scope link src 10.0.0.1
127.0.0.0/8 dev lo scope link
default via 212.64.94.1 dev ppp0
字面的意思相当清楚.前4行的输出明确地说明了ip address show的意思,最
后一行说明了世界的其它部分可以通过我们的缺省网关212.64.94.1找到.我们
通过"via"这个词断定这是一个网关,我们要把数据包交给它.这就是我们要
留心的问题
下面列出以前route 命令的输出作为参考:
[ahu@home ahu]$ route -n
8
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
212.64.94.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 212.64.94.1 0.0.0.0 UG 0 0 0 ppp0
3.5. ARP
ARP 是由 RFC 826 所描述的"地址解析协议".ARP是网络上的计算机在居域
网中用来解析另一台机器的硬件地址/位置的时候使用的.互联网上的机器一般
都是通过机器名解析成IP地址来互相找到的.这就能够解决foo.com网络能够
与bar.net网络通讯.但是,仅仅依靠IP地址,却无法得到一台计算机在一个网
络中的物理位置.这时候就需要ARP.
让我们举一个非常简单的例子.假定我有一个网络,里面有几台机器.其中的两
台在我的子网上,一台叫foo,IP地址是10.0.0.1,另一台叫bar,IP地址是10.0.0.2.
现在,foo想ping一下bar看看是不是正常,但是呢,foo只知道bar的IP地址,
却并不知道bar的硬件(MAC)地址.所以foo在ping bar之前就会先发出ARP询
问.这个ARP询问就像在喊:"Bar(10.0.0.2)!你在哪里(你的MAC地址是多少)?!"
结果这个广播域中的每台机器都能听到foo的喊话,但是只有bar(10.0.0.2)会回
应.Bar会直接给foo发送一个ARP回应,告诉它"Foo (10.0.0.1),我的Mac地
址是00:60:94:E9:08:12".经过这种简单的交谈,机器就能够在局域网中定位它
要通话的对象.Foo会一直使用这个结果,直到它的ARP缓冲忘掉这个结果(在
Unix系统上通常是15分钟之后).
现在我们来看一看具体的工作过程.你可以这样察看你的ARP表(缓冲):
[root@espa041 /home/src/iputils]# ip neigh show
9.3.76.42 dev eth0 lladdr 00:60:08:3f:e9:f9 nud reachable
9.3.76.1 dev eth0 lladdr 00:06:29:21:73:c8 nud reachable
你可以看到,我的机器 espa041 (9.3.76.41) 知道如何找到 espa042 (9.3.76.42) 和
espagate (9.3.76.1).现在让我们往缓冲中添加另一台机器.
[root@espa041 /home/paulsch/.gnome-desktop]# ping -c 1 espa043
PING espa043.austin.ibm.com (9.3.76.43) from 9.3.76.41 : 56(84) bytes of data.
64 bytes from 9.3.76.43: icmp_seq=0 ttl=255 time=0.9 ms
--- espa043.austin.ibm.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.9/0.9/0.9 ms
[root@espa041 /home/src/iputils]# ip neigh show
9.3.76.43 dev eth0 lladdr 00:06:29:21:80:20 nud reachable
9.3.76.42 dev eth0 lladdr 00:60:08:3f:e9:f9 nud reachable
9.3.76.1 dev eth0 lladdr 00:06:29:21:73:c8 nud reachable
由于espa041试图联络espa043,espa043的硬件地址已经添加到ARP缓冲里了.
所以直到espa043的记录失效以前(也就是两个机器间长时间没有通讯),espa041
知道如何找到espa043,也就不必频繁地进行ARP询问了.
9
现在让我们来删除 espa043 的ARP缓冲:
[root@espa041 /home/src/iputils]# ip neigh delete 9.3.76.43 dev eth0
[root@espa041 /home/src/iputils]# ip neigh show
9.3.76.43 dev eth0 nud failed
9.3.76.42 dev eth0 lladdr 00:60:08:3f:e9:f9 nud reachable
9.3.76.1 dev eth0 lladdr 00:06:29:21:73:c8 nud stale
现在espa041 已经忘记了espa043 的MAC地址,如果下次它要与espa043 通讯,
需要再次发送 ARP询问.你在espagate (9.3.76.1) 上也会发现以上输出已经变成
了"stale"状态.这意味着MAC地址仍然是在册,但是接下来第一次通讯的时候
需要确认一下.
10
第4章 规则——路由策略数据库
如果你有一个大规模的路由器,你可能不得不同时满足不同用户对于路由的不同
需求.路由策略数据库可以帮助你通过多路由表技术来实现.
如果你想使用这个特性,请确认你的内核配置中带有 "IP: advanced router" 和
"IP: policy routing" 两项.
当内核需要做出路由选择时,它会找出应该参考哪一张路由表.除了 "ip" 命令
之外,以前的 "route" 命令也能修改 main 和 local 表.
缺省规则:
[ahu@home ahu]$ ip rule list
0:
f
rom all lookup local
32766:
f
rom all lookup main
32767:
f
rom all lookup default
上面列出了规则的优先顺序.我们看到,所有的规则都应用到了所有的包上
("from all".我们前面已经看到了 "main" 表,就是"ip route ls"命令的输出,
但是"local"和"default"是初次见到.
如果我们想做点有趣的事情,就可以生成一些指向不同路由表的规则,取代系统
中的路由规则.
对于内核如何处理一个IP包匹配多个规则的精确意义,请参见Alexey关于
ip-cref文档.
4.1. 简单的源策略路由
让我们再来一个真实的例子.我有两个Cable Modem,连接到了一个 Linux的
NAT ("伪装" 路由器上.这里的室友们向我付费使用 Internet.假如我其中的
一个室友因为只想访问 hotmail 而希望少付一些钱.对我来说这没有问题, 他们
肯定只能使用那个比较次的 Cable Modem.
那个比较快的cable modem 的IP地址是 212.64.94.251, PPP 链路,对端IP是
212.64.94.1.而那个比较慢的cable modem 的IP 地址是212.64.78.148,对端是
195.96.98.253.
local 表:
[ahu@home ahu]$ ip route list table local
11
/etc/iproute2/rt_tables
# ip rule add from 10.0.0.10 table John
# ip rule ls
0:
f
rom all lookup local
32765:
f
rom 10.0.0.10 lookup John
32766:
f
rom all lookup main
32767:
f
rom all lookup default
现在,剩下的事情就是为 John 的路由表创建路由项了.别忘了刷新路由缓存:
# ip route add default via 195.96.98.253 dev ppp2 table John
# ip route flush cache
这样就做好了.至于如何在 ip-up 阶段实现就留给读者自己去研究吧.
4.2. 多重上连ISP的路由
下图是很常见的配置,同一个局域网(甚至是同一台计算机)?A
顶(0)
踩(0)
- 最新评论