21. uci 配置路由与 iproute 配置区别

OpenWRT中配置路由表有三种方法:

  • 第一种 uci set 方式配置路由表,配置内容写入到 /etc/config/network 文件中;
  • 第二种 web页面方式配置路由,配置内容同样写入到 network 文件中;
  • 第三种 方式采用 route 、 ip route命令行方式配置;route 配置内容开机重启后即丢失,IProute 配置内容保存方式文章中有描述。

iproute是Linux下一个网络管理工具包合集,用于取代先前的如ifconfig,route,ifup,ifdown,netstat等历史网络管理工具。该工具包功能强大,它通过网络链路套接字接口与内核进行联系。

在 neutron、docker容器、DPDK、VPP中都在使用,使用iproute可以一致的语法来管理不同的应用,本文重点介绍 iproute的应用,OpenWRT的uci 命令配置路由请参考笔者openWRT系列的其他文章。阅读本篇文章的读者需要具有一定的路由方面的知识,先回顾一下 linux 路由相关规则和路由基本概念。

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

各字段说明:

  • destination:目的网段,0.0.0.0 表示缺省路由表,优先级最高;
  • mask:与网络目标地址相关联的网掩码(又称之为子网掩码)。主机路由 255.255.255.255 ,默认路由是 0.0.0.0。
  • Iface:到达该目的地的本机 interface
  • gateway:网关,下一跳路由器入口的 ip,路由器通过 interface 和 gateway 定义到下一个路由器的链路。
  • metric 跳数(路由质量):一般情况下,如果有多条到达相同目的地的路由记录,优先采用metric值小的那条路由。

根据子网掩码,路由分为三种类型:

1. 主机路由:

主机路由是路由选择表中指向单个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

2. 网络路由:

网络路由是代表主机可以到达的网络。网络路由的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

3. 默认路由:

当主机不能在路由表中查找到目标主机的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,动态路由知识点太丰富,此处只做概念性描述。

动态路由

  • 1.局域网内——IGP(内部网关路由协议)

距离矢量路由协议——RIPV1、RIPV2、EIGRP(思科)
链路状态路由协议——OSPF、ISIS(LS)

  • 2.互联网 ——EGP(外部网关路由协议)

BGPV3(版本3) BGPV4(版本4)

iproute 各子模块功能简介

  • 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 的应用

  • 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

  • ip address delete–删除一个协议地址. 缩写:delete、del、d

ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias1

  • ip address show–显示协议地址. 缩写:show、list、lst、sh、ls、l

ip addr ls eth0

  • 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”

ip route的应用

  • 1)显示路由

示例一:显示指定路由表的路由

ip route show table 10

示例二:显示指定网段的路由

ip route list 192.168.7.0/24

示例三:显示所有路由表的路由

ip route show table all

  • 2)添加路由表

示例一:通过添加路由方式添加路由表

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为路由表名

  • 3)添加路由

命令格式: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

  • 4)追加路由

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

  • 6)删除路由

命令格式: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

  • 7)清空路由表

示例一:清空所有路由表

ip route flush

示例二:清空指定网络的路由

ip route flush 192.168.2.0/24

ip rule 的应用

策略路由规则管理工具。Linux系统在启动时,内核会为路由策略数据库配置三条缺省的规则:

1)优先级:0,匹配任何数据包,查询路由表local(ID 255)。local表是一个特殊的路由表,包含本地和广播地址的高优先级控制路由,使用者不应删除或重写它

2)优先级:32766,匹配任何数据包,查询路由表main(ID 254)。main表是包含所有非策略路由的常规路由表。管理员可以删除或用其他规则重写此规则

3)优先级:32767,匹配任何数据包,查询路由表default(ID 253)。default表是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理,可以删除此规则

  • 命令格式:ip rule {show|list|lst}
    root@OpenWrt:~# ip rule show
# 优先级 匹配条件         表名、表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

  • 1)添加规则

命令格式: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

  • 2)删除规则

命令格式: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

ip neigh 的应用

用于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

  • 示例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

ip neighbour delete–删除一个邻接条目

  • 示例1:删除设备eth0上的一个ARP条目10.0.0.3

ip neigh del 10.0.0.3 dev eth0

  • 示例1:ip neighbour show–显示网络邻居的信息. 缩写:show、list、sh、ls

ip -s n ls 192.168.0.103

  • 示例1:ip neighbour flush–清除邻接条目. 缩写:flush、f (-s 可以显示详细信息)

ip -s -s n f 193.233.7.254

ip link 的应用

网络设备配置命令,如可以启用/禁用某个网络设备,改变mtu及mac地址等;
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

  • 示例5: ip link show–显示设备属性. 缩写:show、list、lst、sh、ls、l
      -s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。

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 tunel

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

  • 示例1: ip tunnel show – 列出现有的通道,缩写:show、list、sh、ls、l

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 maddr 的应用

ip maddress – 多播地址管理 , 缩写:show、list、sh、ls、l; 这个命令只能管理链路层地址。

  • 示例1: ip maddress show – 列出多播地址

ip maddr ls dummy

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 dummy

  • 示例3: 删除

ip maddr del 33:33:00:00:00:01 dev dummy

ip mroute 的应用

多播的启用与关闭

  • 命令格式: ip link set dev multicast on|off

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 的应用

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

ip xfrm 的应用

设置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 - 监控状态

  • 应用实例
    21. uci 配置路由与 iproute 配置区别_第1张图片配置 LS 主机
#配置 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

ip addrlabel 的应用

    ipv6的地址标签,主要用于RFC3484中描述的ipv6地址的选择。应用方法举例省略。。

你可能感兴趣的:(OpenWrt,routing,开发)