IP、Route相关命令基础知识
1.基础知识
1.1 路由(Routing)
1.1.1 路由策略(使⽤ ip rule 命令操作路由策略数据库)
基于策略的路由⽐传统路由在功能上更强⼤,使⽤更灵活,它使⽹络管理员不仅能够根据⽬的地址⽽且能够根据报⽂⼤⼩、应⽤或IP源地址等属性来选择转发路径。
ip rule 命令:
Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表)
SELECTOR := [ from PREFIX 数据包源地址] [ to PREFIX 数据包⽬的地址] [ tos TOS 服务类型][ dev STRING 物理接⼝] [ pref
NUMBER ] [fwmark MARK iptables 标签]
ACTION := [ table TABLE_ID 指定所使⽤的路由表] [ nat ADDRESS ⽹络地址转换][ prohibit 丢弃该表| r
eject 拒绝该包|
unreachable 丢弃该包]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]
例⼦:
ip rule add from 192.203.80/24 table inr.ruhep prio 220 通过路由表 inr.ruhep 路由来⾃源地址为192.203.80/24的数据包
ip rule add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320 把源地址为193.233.7.83的数据报的源地址转换为
192.203.80.144,并通过表1进⾏路由
在 Linux 系统启动时,内核会为路由策略数据库配置三条缺省的规则:
0 匹配任何条件查询路由表local(ID 255) 路由表local是⼀个特殊的路由表,包含对于本地和⼴播地址
的⾼优先级控制路由。rule 0
⾮常特殊,不能被删除或者覆盖。
32766 匹配任何条件查询路由表main(ID 254) 路由表main(ID 254)是⼀个通常的表,包含所有的⽆策略路由。系统管理员可以删除或者使⽤另外的规则覆盖这条规则。
32767 匹配任何条件查询路由表default(ID 253) 路由表default(ID 253)是⼀个空表,它是为⼀些后续处理保留的。对于前⾯的缺省策略没有匹配到的数据包,系统使⽤这个策略进⾏处理。这个规则也可以删除。
不要混淆路由表和策略:规则指向路由表,多个规则可以引⽤⼀个路由表,⽽且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有⽤了,但是仍然存在,直到⾥⾯的所有路由都被删除,它才会消失。
()
1.1.2 路由表(使⽤ ip route 命令操作静态路由表)
所谓路由表,指的是路由器或者其他互联⽹⽹络设备上存储的表,该表中存有到达特定⽹络终端的路
径,在某些情况下,还有⼀些与这些路径相关的度量。路由器的主要⼯作就是为经过路由器的每个数据包寻⼀条最佳的传输路径,并将该数据有效地传送到⽬的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项⼯作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使⽤,表中包含的信息决定了数据转发的策略。打个⽐⽅,路由表就像我们平时使⽤的地图⼀样,标识着各种路线,路由表中保存着⼦⽹的标志信息、⽹上路由器的个数和下⼀个路由器的名字等内容。路由表根据其建⽴的⽅法,可以分为动态路由表和静态路由表。
linux 系统中,可以⾃定义从 1-252个路由表,其中,linux系统维护了4个路由表:
0#表:系统保留表
253#表: defulte table 没特别指定的默认路由都放在改表
254#表: main table 没指明路由表的所有路由放在该表
255#表: locale table 保存本地接⼝地址,⼴播地址、NAT地址由系统维护,⽤户不得更改
路由表的查看可有以下⼆种⽅法:
ip route list table table_number
ip route list table table_name
路由表序号和表名的对应关系在 /etc/iproute2/rt_tables ⽂件中,可⼿动编辑。路由表添加完毕即时⽣效,下⾯为实例:ip route add default via 192.168.1.1 table 1 在⼀号表中添加默认路由为192.168.1.1
ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在⼀号表中添加⼀条到192.168.0.0⽹段的路由为192.168.1.2
以下⾯的路由表为例:
Destination    Netmask    Gateway          Interface    Metric
0.0.0.0    0.0.0.0    192.168.123.254    192.168.123.88    1 #缺省路由,⽬的地址不在本路由表中的数据包,经过本机的 192.168.123.88 接⼝发到下⼀个
route add命令实例路由器 192.168.123.254
127.0.0.0    255.0.0.0    127.0.0.1    127.0.0.1    1        #发给本机的⽹络包
192.168.123.0    255.255.255.0    192.168.123.68    192.168.123.68    1 #直连路由。⽬的地址为 192.
168.123.0/24 的包发到本机 192.168.123.88 接⼝192.168.123.88    255.255.255.255    127.0.0.1    127.0.0.1    1        #⽬的地址为 192.168.123.88的包是发给本机的包
192.168.123.255    255.255.255.255    192.168.123.88    192.168.123.88    1 #⼴播包的⽹段是 192.168.123.0/24,经过 192.168.123.88 接⼝发出去224.0.0.0    224.0.0.0    192.168.123.88    192.168.123.88    1            #多播包,经过 192.168.123.88 接⼝发出去
255.255.255.255    255.255.255.255    192.168.123.68    192.168.123.68    1 #全⽹⼴播包
Default Gateway: 192.168.123.254
各字段说明:
destination:⽬的⽹段
mask:与⽹络⽬标地址相关联的⽹掩码(⼜称之为⼦⽹掩码)。⼦⽹掩码对于 IP ⽹络地址可以是⼀适当的⼦⽹掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使⽤⼦⽹掩码 255.255.255.255。定义路由时由于⽬标地址和⼦⽹掩码之间的关系,⽬标地址不能⽐它对应的⼦⽹掩码更为详细。换句话说,如果⼦⽹掩码的⼀位是 0,则⽬标地址中的对应位就不能设置为 1。
interface:到达该⽬的地的本路由器的出⼝ip
gateway:下⼀跳路由器⼊⼝的 ip,路由器通过 interface 和 gateway 定义⼀调到下⼀个路由器的链路。通常情况下,interface 和gateway 是同⼀⽹段的metric 跳数,该条路由记录的质量,⼀般情况下,如果有多条到达相同⽬的地的路由记录,路由器会采⽤metric值⼩的那条路由
根据⼦⽹掩码,可以将路由分为三种类型:
主机路由:机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。
Destination    Gateway      Genmask        Flags    Metric    Ref    Use    Iface
-----------    -------    -------            -----    ------    ---    ---    -----
10.0.0.10192.168.1.1255.255.255.255  UH000    eth0
⽹络路由:⽹络路由是代表主机可以到达的⽹络。⽹络路由的Flags字段为N。例如,在下⾯的⽰例中,本地主机将发送到⽹络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。
Destination    Gateway      Genmask      Flags    Metric    Ref    Use    Iface
-----------    -------    -------        -----    -----  ---    ---    -----
192.19.12192.168.1.1255.255.255.0      UN000    eth0
默认路由:当主机不能在路由表中查到⽬标主机的IP地址或⽹络路由时,数据包就被发送到默认路由(默认⽹关)上。默认路由的Flags字段为G。
Destination    Gateway      Genmask    Flags    Metric    Ref    Use    Iface
-----------    -------    ------- -----      ------    ---    ---    -----
default192.168.1.10.0.0.0    UG      000    eth0
设置和查看路由表都可以⽤ route 命令,设置内核路由表的命令格式是:route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
add : 添加⼀条路由规则,del : 删除⼀条路由规则,-net : ⽬的地址是⼀个⽹络,-host : ⽬的地址是⼀个主机,target : ⽬的⽹络或主机
netmask : ⽬的地址的⽹络掩码,gw : 路由数据包通过的⽹关,dev : 为路由指定的⽹络接⼝
⽐如:
route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
(数据来源:,,)
关于 src 属性:
当⼀个主机有多个⽹卡配置了多个 IP 的时候,对于它产⽣的⽹络包,可以在路由选择时设置源 IP 地址。⽐如:
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12 (发到 78.22.45.0/24 ⽹段的⽹络包,下⼀跳的路由器 IP 是 10.45.22.1,包的源IP地址设为10.45.22.12)。
要注意的是,src 选项只会影响该 host 上产⽣的⽹络包。如果是⼀个被路由的外来包,明显地它已经带有了⼀个源 IP 地址,这时候,src 参数的配置对它没有任何影响,除⾮你使⽤ NAT 来改变它。对 Neutron 来说,qrouter 和 qif namespace 中的路由表中的 src 都没有实际意义,因为它们只会处理外来的⽹络包。
1.1.3 路由分类之静态路由
静态路由是指由⽤户或⽹络管理员⼿⼯配置的路由信息。当⽹络的拓扑结构或链路的状态发⽣变化时,⽹络管理员需要⼿⼯去修改路由表中相关的静态路由信息。静态路由信息在缺省情况下是私有的,不会传递给其他的路由器。当然,⽹管员也可以通过对路由器进⾏设置使之成为共享的。静态路由⼀般适⽤于⽐较简单的⽹络环境,在这样的环境中,⽹络管理员易于清楚地了解⽹络的拓扑结构,便于设置正确的路由信息。
以上⾯的拓扑结构为例,在没有配置路由的情况下,计算机1 和 2 ⽆法互相通信,因为 1 发给 2 的包在到达路由器 A 后,它不知道怎么转发它。B 也同样。管理员可以配置如下的静态路由来实现 1 和 2 之间的通信:
计算机配置默认⽹关:
计算机1 上:route add default gw 192.168.1.1
计算机2 上:route add default gw 192.168.3.1
路由器配置:
R1 上:ip route 192.168.3.0 255.255.255.0 f0/1 (意思为:⽬标⽹络地址为 192.168.3.0/24 的数据包,经过 f0/1 端⼝发出)
R2 上:ip route 192.168.1.0 255.255.255.0 f0/1 (意思为:⽬标⽹络地址为 192.168.1.0/24 的数据包,经过 f0/1 端⼝发出)
或者
R1 上:ip route 192.168.3.0 255.255.255.0 192.168.2.2 (意思为:要去 192.168.3.0/24 的数据包,下⼀路由器 IP 地址为
192.168.2.2)
R2 上:ip route 192.168.1.0 255.255.255.0 192.168.2.1
1.1.4 路由分类之动态路由
动态路由是指路由器能够⾃动地建⽴⾃⼰的路由表,并且能够根据实际情况的变化适时地进⾏调整。它是与静态路由相对的⼀个概念,指路由器能够根据路由器之间的交换的特定路由信息⾃动地建⽴⾃⼰的路由表,并且能够根据链路和节点的变化适时地进⾏⾃动调整。当⽹络中节点或节点间的链路发⽣故障,或存在其它可⽤路由时,动态路由可以⾃⾏选择最佳的可⽤路由并继续转发报⽂。
常见的动态路由协议有以下⼏个:路由信息协议(RIP)、OSPF(Open Shortest Path First开放式最短路径优先)、IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)、边界⽹关协议(BGP)是运⾏于 TCP 上的⼀种⾃治系统的路由协议。
1.1.5 ip rule,ip route,iptables 三者之间的关系
以⼀例⼦来说明:公司内⽹要求192.168.0.100 以内的使⽤ 10.0.0.1 ⽹关上⽹(电信),其他IP使⽤ 20.0.0.1 (⽹通)上⽹。
1. ⾸先要在⽹关服务器上添加⼀个默认路由,当然这个指向是绝⼤多数的IP的出⼝⽹关:ip route add default gw 20.0.0.1
2. 之后通过 ip route 添加⼀个路由表:ip route add table 3 via 10.0.0.1 dev ethX (ethx 是 10.0.0.1 所在的⽹卡, 3 是路由表的编号)
3. 之后添加 ip rule 规则:ip rule add fwmark 3 table 3 (fwmark 3 是标记,table 3 是路由表3 上边。意思就是凡事标记了 3 的数据使⽤ table3 路由表)
4. 之后使⽤ iptables 给相应的数据打上标记:iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 - 192.168.0.100 -j MARK --set-mark 3
因为 mangle 的处理是优先于 nat 和 fiter 表的,所以在数据包到达之后先打上标记,之后再通过 ip rule 规则,对应的数据包使⽤相应的路由表进⾏路由,最后读取路由表信息,将数据包送出⽹关。
(来源:。有⼀个更详细的例⼦)
这⾥可以看出 Netfilter 处理⽹络包的先后顺序:接收⽹络包,先 DNAT,然后查路由策略,查路由策略指定的路由表做路由,然后 SNAT,再发出⽹络包。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。