linux 路由ip?linux配置永久路由
各位老铁们好,相信很多人对linux 路由ip都不是特别的了解,因此呢,今天就来为大家分享下关于linux 路由ip以及linux配置永久路由的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
Linux系统查看IP地址 IP设置与查看命令大全
Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核,在很多专业计算机场合都有用到。Linux操作系统使用相对较为复杂,由于通常都是命令操作,比我们熟知的Winodows系统更不容易上手,但其安全性却要更高,针对需要设置Linux系统网络的朋友,以下百事网小编为其附上linux系统IP设置与查看命令大全,希望对新手朋友有所帮助。
1.使用ifconfig命令配置并查看网络接口情况示例1:配置eth0的IP,同时激活设备:# ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up示例2:配置eth0别名设备 eth0:1的IP,并添加路由# ifconfig eth0:1 192.168.4.2# route add–host 192.168.4.2 dev eth0:1示例3:激活(禁用)设备# ifconfig eth0:1 up(down)示例4:查看所有(指定)网络接口配置# ifconfig(eth0)—————————2.使用route命令配置路由表示例1:添加到主机路由# route add–host 192.168.4.2 dev eth0:1# route add–host 192.168.4.1 gw 192.168.4.250示例2:添加到网络的路由# route add–net IP netmask MASK eth0# route add–net IP netmask MASK gw IP# route add–net IP/24 eth1示例3:添加默认网关# route add default gw IP示例4:删除路由# route del–host 192.168.4.1 dev eth0:1示例5:查看路由信息#route或route-n(-n表示不解析名字,列出速度会比route快)—————————3.ARP管理命令示例1:查看ARP缓存# arp示例2:添加# arp–s IP MAC示例3:删除# arp–d IP—————————4.ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等,上面的示例完全可以用下面的ip命令实现,而且ip命令可以实现更多的功能.下面介绍一些示例:
4.0 ip命令的语法ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
4.1 ip link set–改变设备的属性.缩写:set、s
示例1:up/down起动/关闭设备。# ip link set dev eth0 up这个等于传统的# ifconfig eth0 up(down)示例2:改变设备传输队列的长度。参数:txqueuelen NUMBER或者txqlen NUMBER# ip link set dev eth0 txqueuelen 100示例3:改变网络设备MTU(最大传输单元)的值。# ip link set dev eth0 mtu 1500示例4:修改网络设备的MAC地址。参数: address LLADDRESS# ip link set dev eth0 address 00:01:4f:00:15:f1
4.2 ip link show–显示设备属性.缩写:show、list、lst、sh、ls、l-s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。示例:# ip-s-s link ls eth0这个命令等于传统的 ifconfig eth0—————————5.1 ip address add–添加一个新的协议地址.缩写:add、a示例1:为每个地址设置一个字符串作为标签。为了和Linux-2.0的网络别名兼容,这个字符串必须以设备名开头,接着一个冒号,# ip addr add local 192.168.4.1/28 brd+ label eth0:1 dev eth0示例2:在以太网接口eth0上增加一个地址192.168.20.0,掩码长度为24位(155.155.155.0),标准广播地址,标签为eth0:Alias:# ip addr add 192.168.4.2/24 brd+ dev eth1 label eth1:1这个命令等于传统的:ifconfig eth1:1 192.168.4.2
5.2 ip address delete–删除一个协议地址.缩写:delete、del、d# ip addr del 192.168.4.1/24 brd+ dev eth0 label eth0:Alias1
5.3 ip address show–显示协议地址.缩写:show、list、lst、sh、ls、l# ip addr ls eth0
5.4.ip address flush–清除协议地址.缩写:flush、f示例1:删除属于私网10.0.0.0/8的所有地址:# ip-s-s a f to 10/8示例2:取消所有以太网卡的IP地址# ip-4 addr flush label“eth0″—————————6. ip neighbour–neighbour/arp表管理命令缩写 neighbour、neighbor、neigh、n命令 add、change、replace、delete、fulsh、show(或者list)
6.1 ip neighbour add—添加一个新的邻接条目ip neighbour change–修改一个现有的条目ip neighbour replace–替换一个已有的条目缩写:add、a;change、chg;replace、repl示例1:在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目:# ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm示例2:把状态改为reachable# ip neigh chg 10.0.0.3 dev eth0 nud reachable
6.2.ip neighbour delete–删除一个邻接条目示例1:删除设备eth0上的一个ARP条目10.0.0.3# ip neigh del 10.0.0.3 dev eth06.3.ip neighbour show–显示网络邻居的信息.缩写:show、list、sh、ls示例1:# ip-s n ls 193.233.7.254193.233.7.254. dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable6.4.ip neighbour flush–清除邻接条目.缩写:flush、f示例1:(-s可以显示详细信息)# ip-s-s n f 193.233.7.254—————————7.路由表管理7.1.缩写 route、ro、r7.5.路由表从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。
7.6.ip route add—添加新路由ip route change—修改路由ip route replace—替换已有的路由缩写:add、a;change、chg;replace、repl示例1:设置到网络10.0.0/24的路由经过网关193.233.7.65# ip route add 10.0.0/24 via 193.233.7.65
示例2:修改到网络10.0.0/24的直接路由,使其经过设备dummy# ip route chg 10.0.0/24 dev dummy
示例3:实现链路负载平衡.加入缺省多路径路由,让ppp0和ppp1分担负载(注意:scope值并非必需,它只不过是告诉内核,这个路由要经过网关而不是直连的。实际上,如果你知道远程端点的地址,使用via参数来设置就更好了)。# ip route add default scope global nexthop dev ppp0 nexthop dev ppp1# ip route replace default scope global nexthop dev ppp0 nexthop dev ppp1示例4:设置NAT路由。在转发来自192.203.80.144的数据包之前,先进行网络地址转换,把这个地址转换为193.233.7.83# ip route add nat 192.203.80.142 via 193.233.7.83
示例5:实现数据包级负载平衡,允许把数据包随机从多个路由发出。weight可以设置权重.# ip route replace default equalize nexthop via 211.139.218.145 dev eth0 weight 1 nexthop via 211.139.218.145 dev eth1 weight 1
7.7.ip route delete–删除路由缩写:delete、del、d示例1:删除上一节命令加入的多路径路由# ip route del default scope global nexthop dev ppp0 nexthop dev ppp1
7.8.ip route show—列出路由缩写:show、list、sh、ls、l
示例1:计算使用gated/bgp协议的路由个数# ip route ls proto gated/bgp|wc1413989179010
示例2:计算路由缓存里面的条数,由于被缓存路由的属性可能大于一行,以此需要使用-o选项# ip-o route ls cloned|wc159254318707示例3:列出路由表TABLEID里面的路由。缺省设置是table main。TABLEID或者是一个真正的路由表ID或者是/etc/iproute2/rt_tables文件定义的字符串,或者是以下的特殊值:all—列出所有表的路由;cache—列出路由缓存的内容。ip ro ls 193.233.7.82 tab cache示例4:列出某个路由表的内容# ip route ls table fddi153
示例5:列出默认路由表的内容# ip route ls这个命令等于传统的: route
7.9.ip route flush—擦除路由表示例1:删除路由表main中的所有网关路由(示例:在路由监控程序挂掉之后):# ip-4 ro flush scope global type unicast示例2:清除所有被克隆出来的IPv6路由:# ip-6-s-s ro flush cache示例3:在gated程序挂掉之后,清除所有的BGP路由:# ip-s ro f proto gated/bgp示例4:清除所有ipv4路由cache# ip route flush cache*** IPv4 routing cache is flushed.
7.10ip route get—获得单个路由.缩写:get、g使用这个命令可以获得到达目的地址的一个路由以及它的确切内容。ip route get命令和ip route show命令执行的操作是不同的。ip route show命令只是显示现有的路由,而ip route get命令在必要时会派生出新的路由。示例1:搜索到193.233.7.82的路由# ip route get 193.233.7.82193.233.7.82 dev eth0src 193.233.7.65 realms inr.ac cachemtu 1500 rtt 300示例2:搜索目的地址是193.233.7.82,来自193.233.7.82,从eth0设备到达的路由(这条命令会产生一条非常有意思的路由,这是一条到193.233.7.82的回环路由)# ip r g 193.233.7.82 from 193.233.7.82 iif eth0193.233.7.82 from 193.233.7.82 dev eth0src 193.233.7.65realms inr.ac/inr.accache;mtu 1500 rtt 300 iif eth0—————————8. ip route—路由策略数据库管理命令命令add、delete、show(或者list)注意:策略路由(policy routing)不等于路由策略(rouing policy)。在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。
8.5. ip rule add—插入新的规则ip rule delete—删除规则缩写:add、a;delete、del、d
示例1:通过路由表inr.ruhep路由来自源地址为192.203.80/24的数据包ip ru add from 192.203.80/24 table inr.ruhep prio 220
示例2:把源地址为193.233.7.83的数据报的源地址转换为192.203.80.144,并通过表1进行路由ip ru add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320
示例3:删除无用的缺省规则ip ru del prio 32767
8.7. ip rule show—列出路由规则缩写:show、list、sh、ls、l示例1:# ip ru ls0:from all lookup local32762:from 192.168.4.89 lookup fddi15332764:from 192.168.4.88 lookup fddi15332766:from all lookup main32767:from all lookup 253—————————9.ip maddress—多播地址管理缩写:show、list、sh、ls、l9.3.ip maddress show—列出多播地址示例1:# ip maddr ls dummy
9.4. ip maddress add—加入多播地址ip maddress delete—删除多播地址缩写:add、a;delete、del、d使用这两个命令,我们可以添加/删除在网络接口上监听的链路层多播地址。这个命令只能管理链路层地址。
示例1:增加# ip maddr add 33:33:00:00:00:01 dev dummy示例2:查看# ip-O maddr ls dummy2:dummylink33:33:00:00:00:01 users 2 staticlink01:00:5e:00:00:01示例3:删除# ip maddr del 33:33:00:00:00:01 dev dummy—————————10.ip mroute—多播路由缓存管理
10.4.ip mroute show—列出多播路由缓存条目缩写:show、list、sh、ls、l
示例1:查看# ip mroute ls(193.232.127.6, 224.0.1.39)Iif: unresolved(193.232.244.34, 224.0.1.40)Iif: unresolved(193.233.7.65, 224.66.66.66)Iif: eth0Oifs: pimreg示例2:查看# ip-s mr ls 224.66/16(193.233.7.65, 224.66.66.66)Iif: eth0Oifs: pimreg9383 packets, 300256 bytes—————————11. ip tunnel—通道配置缩写tunnel、tunl
11.4.ip tunnel add—添加新的通道ip tunnel change—修改现有的通道ip tunnel delete—删除一个通道缩写:add、a;change、chg;delete、del、d示例1:建立一个点对点通道,最大TTL是32# ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32
11.4.ip tunnel show—列出现有的通道缩写:show、list、sh、ls、l示例1:# ip-s tunl ls Cisco—————————12. ip monitor和rtmon—状态监视ip命令可以用于连续地监视设备、地址和路由的状态。这个命令选项的格式有点不同,命令选项的名字叫做monitor,接着是操作对象:ip monitor [ file FILE ] [ all| OBJECT-LIST ]示例1:# rtmon file/var/log/rtmon.log示例2:# ip monitor file/var/log/rtmon.log r
Linux用什么命令设置IP地址啊
Linux命令行下配置IP地址的几种配置方法:
即时生效(重启后失效):
ifconfig eth0 192.168.1.102 netmask 255.255.255.0//添加IP地址
route add default gw 192.168.1.1//添加网关
启动生效:
vim/etc/sysconfig/network-scripts/ifcfg-eth0//(某些版本中可能没有vim这个编辑器比如centos,大家可能用vi替换)
IPADDR=192.168.1.102//添加IP地址
NETMASK=255.255.255.0//掩码
GATEWAY=192.168.1.1//添加网关
最后结果如下:
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.102
NETMASK=255.255.255.0
GETEWAY=192.168.1.1
ONBOOT=yes
TYPE=Ethernet
注:BOOTPROTO只有在static(静态)模式下才可以使用设置的IP信息
修改dns
vim/etc/resolv.conf
修改后可即时生效,启动同样有效
形式
加入nameserver=***.***.***.***
最多可有三个,作为上一个失败后的候选
修改host name
即时生效:
hostname fc2
启动生效:
vim/etc/sysconfig/network
形式如下:
NETWORKING=yes
HOSTNAME=rh-linux.fc.org
##########################################################
首先,先了解传统的网络配置命令:
1.使用ifconfig命令配置并查看网络接口情况
示例1:配置eth0的IP,同时激活设备:
ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up
示例2:配置eth0别名设备 eth0:1的IP,并添加路由
ifconfig eth0:1 192.168.4.2
route add–host 192.168.4.2 dev eth0:1
示例3:激活(禁用)设备
ifconfig eth0:1 up(down)
示例4:查看所有(指定)网络接口配置
ifconfig(eth0)
—————————
2.使用route命令配置路由表
示例1:添加到主机路由
route add–host 192.168.4.2 dev eth0:1
route add–host 192.168.4.1 gw 192.168.4.250
示例2:添加到网络的路由
route add–net IP netmask MASK eth0
route add–net IP netmask MASK gw IP
route add–net IP/24 eth1
示例3:添加默认网关
route add default gw IP
示例4:删除路由
route del–host 192.168.4.1 dev eth0:1
示例5:查看路由信息
route或 route-n(-n表示不解析名字,列出速度会比route快)
—————————
3.ARP管理命令
示例1:查看ARP缓存
arp
示例2:添加
arp–s IP MAC
示例3:删除
arp–d IP
—————————
4.ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。
例如:ifconfig、route等,
上面的示例完全可以用下面的ip命令实现,而且ip命令可以实现更多的功能.下面介绍一些示例:
4.0 ip命令的语法
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
4.1 ip link set–改变设备的属性.缩写:set、s
示例1:up/down起动/关闭设备。
ip link set dev eth0 up
这个等于传统的
ifconfig eth0 up
ifconfig eth0 down
示例2:改变设备传输队列的长度。
参数:txqueuelen NUMBER或者txqlen NUMBER
ip link set dev eth0 txqueuelen 100
示例3:改变网络设备MTU(最大传输单元)的值。
ip link set dev eth0 mtu 1500
示例4:修改网络设备的MAC地址。
参数: address LLADDRESS
ip link set dev eth0 address 00:01:4f:00:15:f1
4.2 ip link show–显示设备属性.缩写:show、list、lst、sh、ls、l
-s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。
示例:
ip-s-s link ls eth0
这个命令等于传统的
ifconfig eth0
—————————
5.1 ip address add–添加一个新的协议地址.缩写:add、a
示例1:为每个地址设置一个字符串作为标签。为了和Linux-2.0的网络别名兼容,这个字符串必须以设备名开头,接着一个冒号,
ip addr add local 192.168.4.1/28 brd+ label eth0:1 dev eth0
等价于
ifconfig eth0:5 192.168.4.1/28
ip addr add local 192.168.4.1/28 dev eth0
示例2:在以太网接口eth0上增加一个地址192.168.20.0,掩码长度为24位(155.155.155.0),标准广播地址,标签为 eth0:Alias:
ip addr add 192.168.4.2/24 brd+ dev eth1 label eth1:1
这个命令等于传统的:
ifconfig eth1:1 192.168.4.2/24
5.2 ip address delete–删除一个协议地址.缩写:delete、del、d
ip addr del 192.168.4.1/24 brd+ dev eth0 label eth0:Alias1
5.3 ip address show–显示协议地址.缩写:show、list、lst、sh、ls、l
ip addr ls eth0
5.4.ip address flush–清除协议地址.缩写:flush、f
示例1:删除属于私网10.0.0.0/8的所有地址:
ip-s-s a f to 10/8
示例2:取消所有以太网卡的IP地址
ip-4 addr flush label“eth0″
—————————
6. ip neighbour–neighbour/arp表管理命令
缩写 neighbour、neighbor、neigh、n
命令 add、change、replace、delete、fulsh、show(或者list)
6.1 ip neighbour add—添加一个新的邻接条目
ip neighbour change–修改一个现有的条目
ip neighbour replace–替换一个已有的条目
缩写:add、a;change、chg;replace、repl
示例1:在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目:
ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm
示例2:把状态改为reachable
ip neigh chg 10.0.0.3 dev eth0 nud reachable
6.2.ip neighbour delete–删除一个邻接条目
示例1:删除设备eth0上的一个ARP条目10.0.0.3
ip neigh del 10.0.0.3 dev eth0
6.3.ip neighbour show–显示网络邻居的信息.缩写:show、list、sh、ls
示例1: ip-s n ls 193.233.7.254
193.233.7.254. dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable
6.4.ip neighbour flush–清除邻接条目.缩写:flush、f
示例1:(-s可以显示详细信息)
ip-s-s n f 193.233.7.254
—————————
7.路由表管理
7.1.缩写 route、ro、r
7.5.路由表
从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,
为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。
默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。
7.6ip route add—添加新路由
ip route change—修改路由
ip route replace—替换已有的路由
缩写:add、a;change、chg;replace、repl
示例1:设置到网络10.0.0/24的路由经过网关193.233.7.65
ip route add 10.0.0/24 via 193.233.7.65
示例2:修改到网络10.0.0/24的直接路由,使其经过设备dummy
ip route chg 10.0.0/24 dev dummy
示例3:实现链路负载平衡.加入缺省多路径路由,让ppp0和ppp1分担负载(注意:scope值并非必需,它只不过是告诉内核,这个路由要经过网关而不是直连的。实际上,如果你知道远程端点的地址,使用via参数来设置就更好了)。
ip route add default scope global nexthop dev ppp0 nexthop dev ppp1
ip route replace default scope global nexthop dev ppp0 nexthop dev ppp1
示例4:设置NAT路由。在转发来自192.203.80.144的数据包之前,先进行网络地址转换,把这个地址转换为193.233.7.83
ip route add nat 192.203.80.142 via 193.233.7.83
示例5:实现数据包级负载平衡,允许把数据包随机从多个路由发出。weight可以设置权重.
ip route replace default equalize nexthop via 211.139.218.145 dev eth0 weight 1 nexthop via 211.139.218.145 dev eth1 weight 1
7.7.ip route delete–删除路由
缩写:delete、del、d
示例1:删除上一节命令加入的多路径路由
ip route del default scope global nexthop dev ppp0 nexthop dev ppp1
7.8.ip route show—列出路由
缩写:show、list、sh、ls、l
示例1:计算使用gated/bgp协议的路由个数
ip route ls proto gated/bgp|wc
1413989179010
示例2:计算路由缓存里面的条数,由于被缓存路由的属性可能大于一行,以此需要使用-o选项
ip-o route ls cloned|wc
159254318707
示例3:列出路由表TABLEID里面的路由。缺省设置是table main。TABLEID或者是一个真正的路由表ID或者是/etc/iproute2/rt_tables文件定义的字符串,
或者是以下的特殊值:
all—列出所有表的路由;
cache—列出路由缓存的内容。
ip ro ls 193.233.7.82 tab cache
示例4:列出某个路由表的内容
ip route ls table fddi153
示例5:列出默认路由表的内容
ip route ls
这个命令等于传统的: route
7.9.ip route flush—擦除路由表
示例1:删除路由表main中的所有网关路由(示例:在路由监控程序挂掉之后):
ip-4 ro flush scope global type unicast
示例2:清除所有被克隆出来的IPv6路由:
ip-6-s-s ro flush cache
示例3:在gated程序挂掉之后,清除所有的BGP路由:
ip-s ro f proto gated/bgp
示例4:清除所有ipv4路由cache
ip route flush cache
*** IPv4 routing cache is flushed.
7.10ip route get—获得单个路由.缩写:get
如何理解ip路由和操作linux的路由表
路由其实就是选择一条数据包传输路径的过程,也就是说主机怎么向它的目的地顺利发送数据的过程。当TCP/IP主机发送IP数据包时,便出现了路由,且当到达IP路由器时还会再次出现。路由器是从一个物理网向另一个物理网发送数据包的装置,路由器通常被称为网关,它承但着分发数据包的任务。对于发送的主机和路由器而言,必须决定向哪里转发数据包。在决定路由时,IP层查询位于内存中的路由表,然后根据查询规则,进行ip路由。是不是很抽象?用我的话说吧,也就是下面要讨论的问题。
先说如何选路:
(1)当一个主机试图与另一个主机通信时,IP首先决定目的主机是一个内网还是外网,怎么确定?当然使用网络号。
(2)如果是是同一内网,那就就是直接发送了,这个最简答不过了。
(3)如果目的主机是和发送主机不在同一个内网,也就是在外网了,^_^很啰嗦,IP将查询路由表来为外网主机或外网选择一个路由,所以一般情况下有可能为某个外网指定特定的路由,具体问题稍后分析。
(4)若未找到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
(4)在该路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。
每发现一条路由,数据包被转送下一级路由器,称为一次“跳步”,按照同样的方式进行转发,并最终发送至目的主机。若未发现任何一个路由可以接受此次ip包的地址,发送主机将收到一个出错信息,也就是说其中任何一跳出现了不可到达,最后的结果也就是报错了。
上面只是个人的一些理解,事实上当时我们做的实验不少,但是看看tcp/ip详解后,就可以一目了然了,现在以linux下的路由表为例说明一下:
$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0* 255.255.255.0 U 0 0 0 eth1
192.168.10.0* 255.255.254.0 U 0 0 0 eth0
default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
--------------------------------------------------------------------------------------
IP路由选择是逐跳地(hop-by-hop)进行的。从这个路由表信息可以看出,IP并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的目的)。所有的IP路由选择只为数据报传输提供下一站路由器的IP地址。它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的。
IP路由选择主要完成以下这些功能:
1)搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
2)搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行讨论。
3)搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。默认路由,以及下一站路由器发送的ICMP间接报文(如果我们为数据报选择了错误的默认路由),是IP路由选择机制中功能强大的特性。
以上的解释都很清楚了,不用再详细解释怎么走了,如果你实在还不能理解的话,去看tcp/ip详解吧。顺便解释一下上面的output内容:
The output of the kernel routing table is organized in the following columns
Destination
The destination network or destination host.
Gateway
The gateway address or'*' if none set.
Genmask
The netmask for the destination net;'255.255.255.255' for a host destination and'0.0.0.0' for the default route.
Flags Possible flags include
U(route is up)
H(target is a host)
G(use gateway)
R(reinstate route for dynamic routing)
D(dynamically installed by daemon or redirect)
M(modified from routing daemon or redirect)
A(installed by addrconf)
C(cache entry)
!(reject route)
Metric The'distance' to the target(usually counted in hops). It is not used by recent kernels, but may be needed by
routing daemons.
Ref Number of references to this route.(Not used in the Linux kernel.)
Use Count of lookups for the route. Depending on the use of-F and-C this will be either route cache misses(-F) or
hits(-C).
Iface Interface to which packets for this route will be sent.
MSS Default maximum segment size for TCP connections over this route.
Window Default window size for TCP connections over this route.
irtt Initial RTT(Round Trip Time). The kernel uses this to guess about the best TCP protocol parameters without wait-
ing on(possibly slow) answers.
HH(cached only)
The number of ARP entries and cached routes that refer to the hardware header cache for the cached route. This
will be-1 if a hardware address is not needed for the interface of the cached route(e.g. lo).
Arp(cached only)
Whether or not the hardware address for the cached route is up to date
同时在freebsd上使用netstat-nr打印路由表,也顺便提示一下。
现在问题在如何操作路由表,因为ip的选路全靠它吃饭了,怎么为一个特定的网络或者主机选择一条特定的路由?如何删除路由?这些问题对于网络维护和系统管理也尤为重要:
还是以上面的路由表为例,建议使用前先man route查看方法,或许各个系统略有差异,下面是以debian为例,由于是测试,所以使用sudo,而不是root权限:
1、为某主机添加路由
$ sudo route add–host 192.168.10.58 dev eth1
//所有通向192.168.10.58的数据都是用eth1网卡
$ sudo route add–host 192.168.11.58 gw 192.168.10.1
//通向192.168.11.58的数据使用网关192.168.10.1
不经意间做了一个验证实验:由于eth1是没有启动的,所以添加这个路由后,192.168.10.58不可ping通
初始路由表
sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0* 255.255.255.0 U 0 0 0 eth1
192.168.10.0* 255.255.254.0 U 0 0 0 eth0
default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
----------------------------------------------------------------------------
可以ping通192.168.10.58
$ ping 192.168.10.58
PING 192.168.10.58(192.168.10.58) 56(84) bytes of data.
64 bytes from 192.168.10.58: icmp_seq=1 ttl=64 time=0.188 ms
-----------------------------------------------------------------------------
添加192.168.10.58的路由
$ sudo route add-host 192.168.10.58 dev eth1
$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.58* 255.255.255.255 UH 0 0 0 eth1
192.168.100.0* 255.255.255.0 U 0 0 0 eth1
192.168.10.0* 255.255.254.0 U 0 0 0 eth0
default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
----------------------------------------------------------------------------
由于eth0无法使用了,所以发给eth1,就等于丢入黑洞之中
$ ping 192.168.10.58
PING 192.168.10.58(192.168.10.58) 56(84) bytes of data.
--- 192.168.10.58 ping statistics---
2 packets transmitted, 0 received, 100% packet loss, time 1010ms
----------------------------------------------------------------------------
指定给网关处理
$ sudo route add-host 192.168.10.58 gw 192.168.10.1
$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.58 192.168.10.1 255.255.255.255 UGH 0 0 0 eth0
192.168.10.58* 255.255.255.255 UH 0 0 0 eth1
192.168.100.0* 255.255.255.0 U 0 0 0 eth1
192.168.10.0* 255.255.254.0 U 0 0 0 eth0
default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
----------------------------------------------------------------------------
要经过网关了,验证了路由表的作用
$ ping 192.168.10.58
PING 192.168.10.58(192.168.10.58) 56(84) bytes of data.
From 192.168.10.1: icmp_seq=1 Redirect Network(New nexthop: 192.168.10.58)
64 bytes from 192.168.10.58: icmp_seq=1 ttl=64 time=1.02 ms
----------------------------------------------------------------------------
废话少说了,同理为某网路添加路由和删除路由如下所示:经过测试有效:
2、为某网络的添加路由
$ sudo route add–net 220.181.8.0/24 dev eth0
$ sudo route add–net 220.181.8.0/24 gw 192.168.10.1
3、添加默认网关
$ sudo route add default gw 192.168.10.1
4、删除路由,
$ sudo route del–host 192.168.168.110 dev eth0
可能你会遇到删除时候语法错误,请参看路由表的Flags,路由上面的第一条,G表示设定了网关,H表示操作了主机,所以就用$ sudo route del-host 192.168.10.58 gw 192.168.10.1删除,更详细的请man。
使用route命令添加的路由,机器重启或者网卡重启后路由就失效了,和iptables一样,需要永久添加的话,也是使用开机执行,所以可以用以下方法添加永久路由:
1.在/etc/rc.local里添加执行命令,进行开机执行,因为是root权限,所以不用sudo了:
route add–net 220.181.8.0/24 dev eth0
route add–net 220.181.9.0/24 gw 192.168.10.1
2.在/etc/sysconfig/network里添加到末尾
方法:GATEWAY=gw-ip或者 GATEWAY=gw-dev
3./etc/sysconfig/static-router:
any net x.x.x.x/24 gw y.y.y.y