iproute是Linux下一个网络管理工具包合集,用于取代先前的如ifconfig,route,ifup,ifdown,netstat等历史网络管理工具。该工具包功能强大,它通过网络链路套接字接口与内核进行联系。
在 neutron、docker容器、DPDK、VPP中都在使用,使用iproute可以一致的语法来管理不同的应用,本文重点介绍 iproute的应用,OpenWRT的uci 命令配置路由请参考笔者openWRT系列的其他文章。阅读本篇文章的读者需要具有一定的路由方面的知识,先回顾一下 linux 路由相关规则和路由基本概念。
0 匹配任何条件 查询路由表local(ID 255) 路由表local是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 0非常特殊,不能被删除或者覆盖。
32766 匹配任何条件 查询路由表main(ID 254) 路由表main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规则。
32767 匹配任何条件 查询路由表default(ID 253) 路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。
不要混淆路由表和策略:规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。
root@OpenWrt:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
各字段说明:
主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ----- --- --- -----
192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
静态路由:管理员手工配置路由,OpenWRT通过 uci set route 或 web 方式配置的路由表,属于静态路由。
动态路由:不需要手工配置路由,路由器之间能够自己互相学习(基于某种路由协议实现),OpenWRT 中的动态路由集有 Qugga、或 FRR,动态路由知识点太丰富,此处只做概念性描述。
距离矢量路由协议——RIPV1、RIPV2、EIGRP(思科)
链路状态路由协议——OSPF、ISIS(LS)
BGPV3(版本3) BGPV4(版本4)
ip addr
用于管理某个网络设备与协议(ip或ipv6)有关的地址。
与ip link类似,不过增加了协议有关的管理(ip地址管理)
ip route
管理路由,如添加,删除
ip rule
管理路由策略数据库。这里边有一个算法,用来控制路由的选择策略
ip neigh
用于neighbor/ARP表的管理,如显示,插入,删除等
ip link
网络设备配置命令,如可以启用/禁用某个网络设备,改变mtu及mac地址等
ip tunel
隧道配置
隧道的作用是将数据(可以是不同协议)封装成ip包然后再互联网传输
ip maddr
多播地址管理
ip mroute
多播路由管理
ip monitor
状态监控。如可以持续监控ip地址和路由的状态
ip xfrm
设置xfrm,xfrm是一个ip框架,可以转换数据包的格式,如用某个算法对数据包加密 ,常用于IPSec 配置
ip addrlabel
ipv6的地址标签,主要用于RFC3484中描述的ipv6地址的选择。
RFC3484主要介绍了2个算法,用于ipv6地址(源地址和目标地址)的选择策略
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
ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias1
ip addr ls eth0
ip -s -s a f to 10/8
示例2 : 取消所有以太网卡的IP地址
ip -4 addr flush label “eth0”
示例一:显示指定路由表的路由
ip route show table 10
示例二:显示指定网段的路由
ip route list 192.168.7.0/24
示例三:显示所有路由表的路由
ip route show table all
示例一:通过添加路由方式添加路由表
ip route add 192.168.11.0/24 dev ens33 table 100
注:table 100为不存在的路由表ID
示例二:通过配置文件方式添加路由表
echo “252 TEST” >> /etc/iproute2/rt_tables
注:252 为路由表ID,TEST为路由表名
命令格式:ip route add TARGET [via GW] [dev IFACE] [src SOURCE_IP] [table TABLEID]
【注】TARGET可以是:
主机路由:具体IP地址
网络路由:NETWORK/MASK
示例一:添加默认路由
ip route add default via 192.168.7.1 table 10
示例二:添加到指定网络的路由
ip route add 192.168.11.0/24 via 192.168.7.1 metric 10 table 10
示例三:添加到指定主机的路由
ip route add 192.168.11.1 dev ens33
ip route append 192.168.5.0/24 via 192.168.7.1
5)修改路由
方法一:
ip route change 192.168.2.0/24 via 192.168.7.2
方法二:
ip route replace 192.168.3.0/24 via 192.168.7.2
命令格式:ip route del TARGET [via GW] [dev IFACE] [src SOURCE_IP] [table TABLEID]
示例一:删除指定表中默认路由
ip route del default table 100
示例二:删除特定网络路由
ip route del 192.168.5.0/24 via 192.168.7.1
示例三:删除指定表中特定网络路由
ip route del 192.168.1.0/24 table 100
示例一:清空所有路由表
ip route flush
示例二:清空指定网络的路由
ip route flush 192.168.2.0/24
策略路由规则管理工具。Linux系统在启动时,内核会为路由策略数据库配置三条缺省的规则:
1)优先级:0,匹配任何数据包,查询路由表local(ID 255)。local表是一个特殊的路由表,包含本地和广播地址的高优先级控制路由,使用者不应删除或重写它
2)优先级:32766,匹配任何数据包,查询路由表main(ID 254)。main表是包含所有非策略路由的常规路由表。管理员可以删除或用其他规则重写此规则
3)优先级:32767,匹配任何数据包,查询路由表default(ID 253)。default表是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理,可以删除此规则
# 优先级 匹配条件 表名、表ID
0: from all lookup local
1001: from all iif eth1 lookup 1
2001: from all fwmark 0x100/0x3f00 lookup 1
2061: from all fwmark 0x3d00/0x3f00 blackhole
2062: from all fwmark 0x3e00/0x3f00 unreachable
32766: from all lookup main
32767: from all lookup default
ip rule [ add | del | flush] SELECTOR ACTION
命令格式:ip rule add 匹配条件 [优先级] [表id]
【注】表缺省为main;优先级缺省从main或自定义最低优先级序号开始,然后依次递减,即优先级越来越高
示例一:添加源IP段和目的IP策略路由
ip rule add from 192.168.7.0/24 to 8.8.8.8 prio 10 table 200
示例二:添加接收设备策略路由
ip rule add dev ens33 table 1
示例三:添加fwmark值策略路由
ip rule add fwmark 1
命令格式:ip rule del [匹配条件] [优先级] [表id]
【注】匹配条件、表id、优先级可以同时指定其中一个或多个,如果缺省会按照优先级顺序,从最高优先级依次删除
示例一:根据优先级删除
ip rule del prio 10
示例二:根据匹配条件删除
ip rule del from 192.168.7.0/24 to 8.8.8.8
示例三:根据路由表id删除
ip rule del table 200
示例四:根据匹配条件、表id和优先级删除
ip rule del from 192.168.7.0/24 to 8.8.8.8 prio 10 table 200
用于neighbor/ARP表的管理,如显示,插入,删除等; 缩写 neighbour、neighbor、neigh、n
命令 add、change、replace、delete、fulsh、show (或者list);
ip neighbour add – 添加一个新的邻接条目
ip neighbour change–修改一个现有的条目
ip neighbour replace–替换一个已有的条目
缩写:add、a;change、chg;replace、repl
ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm
ip neigh chg 10.0.0.3 dev eth0 nud reachable
ip neighbour delete–删除一个邻接条目
ip neigh del 10.0.0.3 dev eth0
ip -s n ls 192.168.0.103
ip -s -s n f 193.233.7.254
网络设备配置命令,如可以启用/禁用某个网络设备,改变mtu及mac地址等;
ip link set–改变设备的属性. 缩写:set、s
ip link set dev eth0 up
这个等于传统的 # ifconfig eth0 up(down)
# ip link set dev eth0 txqueuelen 100
ip link set dev eth0 mtu 1500
ip link set dev eth0 address 00:01:4f:00:15:f1
ip -s -s link ls eth0
eth0: mtu 1500 qdisc cbq qlen 100
link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
2449949362 2786187 0 0 0 0
RX errors: length crc fifo missed
0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
178558497 1783946 332 0 332 35172
TX errors: aborted fifo window heartbeat
0 0 0 332
这个命令等于传统的 ifconfig eth0
ip tunnel add – 添加新的通道
ip tunnel change – 修改现有的通道
ip tunnel delete – 删除一个通道
缩写:add、a;change、chg;delete、del、d
ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32
ip -s tunl ls Cisco
Step 1. 建立ip隧道
ServerA配置iptunnel,并给tunnel接口配置上ip
ip tunnel add a2b mode ipip remote 2.2.2.2 local 1.1.1.1
ifconfig a2b 192.168.2.1 netmask 255.255.255.0
ServerB配置iptunnel,并给tunnel接口配置上ip
ip tunnel add a2b mode ipip remote 1.1.1.1 local 2.2.2.2
ifconfig a2b 192.168.2.2 netmask 255.255.255.0
隧道配置完成后,请在ServerA上192.168.2.2,看是否可以ping通,ping通则继续,ping不通需要再看一下上面的命令执行是否有报错
Step 2. 添加路由和nat
ServerA上,添加到192.168.1.0/24的路由
/sbin/route add -net 192.168.1.0/24 gw 192.168.2.2
ServerB上,添加iptables nat,将ServerA过了访问192.168.1.0/24段的包进行NAT,并开启ip foward功能
iptables -t nat -A POSTROUTING -s 192.168.2.1 -d 192.168.1.0/24 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
sed -i ‘/net.ipv4.ip_forward/ s/0/1/’ /etc/sysctl.conf
ip maddress – 多播地址管理 , 缩写:show、list、sh、ls、l; 这个命令只能管理链路层地址。
ip maddr ls dummy
ip maddress add – 加入多播地址
ip maddress delete – 删除多播地址
缩写:add、a;delete、del、d ; 使用这两个命令,我们可以添加/删除在网络接口上监听的链路层多播地址。
ip maddr add 33:33:00:00:00:01 dev dummy
ip -O maddr ls dummy
ip maddr del 33:33:00:00:00:01 dev dummy
多播的启用与关闭
ip link set eno16777728 multicast off
ip link show eno16777728 //如下,没有出项MULTICAST
2: eno16777728:mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:57:26:9d brd ff:ff:ff:ff:ff:ff
ip link set eno16777728 multicast on
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
设置xfrm,xfrm是一个ip框架,可以转换数据包的格式,如用某个算法对数据包加密 ,常用于IPSec 配置 .
ip xfrm state flush - 刷新状态
ip xfrm state add - 将新状态添加到xfrm中
ip xfrm policy add - 将新策略添加到xfrm中
ip xfrm policy flush - 刷新策略
ip xfrm monitor - 监控状态
#配置 SA
ip xfrm state add src 194.168.10.4 dst 194.168.10.5 proto esp spi 0x00004005 mode tunnel auth md5 0xa87ff679a2f3e71d9181a67b7542122c enc des 0xa2f3e71d9181a67b
ip xfrm state add src 194.168.10.5 dst 194.168.10.4 proto esp spi 0x00005004 mode tunnel auth md5 0xa87ff679a2f3e71d9181a67b7542122c enc des 0xa2f3e71d9181a67b
#配置 SP
ip xfrm policy add src 194.168.10.4 dst 194.168.10.5 dir out tmpl src 194.168.10.4 dst 194.168.10.5 proto esp mode tunnel
ip xfrm policy add src 194.168.10.5 dst 194.168.10.4 dir in tmpl src 194.168.10.5 dst 194.168.10.4 proto esp mode tunnel
配置 RS 主机
#配置SA
ip xfrm state add src 194.168.10.4 dst 194.168.10.5 proto esp spi 0x00004005 mode tunnel auth md5 0xa87ff679a2f3e71d9181a67b7542122c enc des 0xa2f3e71 d9181a67b
ip xfrm state add src 194.168.10.5 dst 194.168.10.4 proto esp spi 0x00005004 mode tunnel auth md5 0xa87ff679a2f3e71d9181a67b7542122c enc des 0xa2f3e71 d9181a67b
#配置SP
ip xfrm policy add src 194.168.10.4 dst 194.168.10.5 dir in tmpl src 194.168.10.4 dst 194.168.10.5 proto esp mode tunnel
ip xfrm policy add src 194.168.10.5 dst 194.168.10.4 dir out tmpl src 194.168.10.5 dst 194.168.10.4 proto esp mode tunnel
ipv6的地址标签,主要用于RFC3484中描述的ipv6地址的选择。应用方法举例省略。。