分类: LINUX
2009-09-21 13:43:59
路由修改route
我们在网络基础的时候谈过关于路由的问题,两台主机之间一定要有路由才能够互通TCP/IP的协议,否则就无法进行联机。一般来说,只要有网络接口,该接口就会产生一个路由,例如,在鸟哥实验室内部的主机有一个eth0及lo,所以:
[root@linux ~]# route [-nee] [root@linux ~]# route add [-net|-host] [网段或主机] netmask [mask] [gw|dev] [root@linux ~]# route del [-net|-host] [网段或主机] netmask [mask] [gw|dev] 观察的参数: -n,不要使用通信协议或主机名称,直接使用 IP 或 Port Number; -ee,使用更详细的信息来显示; 增加 (add) 与删除 (del) 路由的相关参数; -net,表示后面接的路由为一个网段; -host,表示后面接的为连接到单台主机的路由; Netmask,与网段有关,可以设置 netmask 决定网段的大小; Gw,gateway 的简写,后续接的是 IP 的数值,与 dev 不同; Dev,如果只是要指定由哪一块网卡联机出去,则使用这个设置,后面接 eth0 等。 范例一:单纯的观察路由状态 [root@linux ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.10.30 0.0.0.0 UG 0 0 0 eth0 [root@linux ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default Server.cluster 0.0.0.0 UG 0 0 0 eth0 |
在上面的例子中仔细观察route与route -n的输出结果,你可以发现有加-n参数的主要是显示出IP,至于使用route,显示的则是“主机名称”。也就是说,在默认的情况下,route会去找出该IP的主机名称,如果找不到呢?就会显示得迟钝(有点慢),所以说,鸟哥通常都直接使用route-n了。由上面看起来,我们也知道default = 0.0.0.0/0.0.0.0,而上面的信息有哪些你需要知道的呢?
· Destination、Genmask:这两个术语就分别是Network与Netmask了。所以这两个东西就组合成为一个完整的网段了。
· Gateway:该网段是通过哪个Gateway连接出去的?如果显示0.0.0.0表示该路由是直接由本机传送,亦即可以通过局域网的MAC直接传输;如果有显示IP的话,表示该路由需要经过路由器(网关)的帮忙才能够传送出去。
· Flags:总共有多个标记,代表的意义如下。
Ø U(route is up):该路由是启动的。
Ø H(target is a host):目标是一台主机(IP)而非网段。
Ø G(use gateway):需要通过外部的主机来传递数据包。
Ø R(reinstate route for dynamic routing):使用动态路由时,恢复路由信息的标记。
Ø D(dynamically installed by daemon or redirect):已经由服务器或转port功能设置为动态路由。
Ø M(modified from routing daemon or redirect):路由已经被修改了。
Ø!(reject route):这个路由将不会被接受(用来阻止不安全的网段)。
· Iface:这个路由传递数据包的接口。
此外,观察一下上面的路由排列顺序,依序是由小网段(192.168.10.0/24是Class C),逐渐到大网段(169.254.0.0/16 是Class B),最后则是默认路由(0.0.0.0/0.0.0.0)。然后当我们要判断某个网络数据包应该如何传送的时候,该数据包会经由这个路由的过程来判断。例如,我上头仅有三个路由,若我有一个传往192.168.10.20的数据包要传递,那首先会找192.168.10.0/24这个网段的路由,找到了,就直接由eth0传送出去。
如果是传送到Yahoo的主机呢?Yahoo的主机IP是202.43.195.52,我通过判断不是192.168.10.0/24,也不是169.254.0.0/16,结果到达0/0时,传出去了,通过eth0将数据包传给192.168.10.30那台Gateway主机。所以说,路由是有顺序的。
因此当你重复设置多个同样的路由时,例如,在你的主机上的两张网卡设置为相同网段的IP时,会出现什么情况?会出现如下的情况:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 |
也就是说,由于路由是依照顺序来排列与传送的,所以不论数据包是由哪个接口(eth0、eth1)所接收,都会由上述的eth0传送出去,所以,在一台主机上面设置两个相同网段的IP本身没有什么意义。多此一举。除非是类似虚拟主机(Xen、VMware等软件)所架设的多主机,才会有这个必要。
范例二:路由的增加与删除 [root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0 # 上面这个操作可以删除掉 169.254.0.0/16 这个网段 # 请注意,在删除的时候,需要将路由表上面出现的信息都写入 # 包括netmask、dev 等参数 [root@linux ~]# route add -net 192.168.100.0 \ > netmask 255.255.255.0 dev eth0 # 通过 route add 来增加一个路由。请注意,这个路由必须能够与你互通 # 例如,如果我下达下面的命令就会显示错误: # route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254 # 因为我的环境内仅有 192.168.10.100 这个 IP ,所以不能与 192.168.200.254 # 这个网段直接使用 MAC 互通 [root@linux ~]# route add default gw 192.168.10.30 # 增加默认路由的方法。请注意,只要有一个默认路由就够了 # 在这个地方如果你随便设置后,记得使用下面的命令重新设置你的网络 # /etc/init.d/network restart |