iproute2
如今很多系统管理员依然通过组合使用诸如 ifconfig、route、arp 和 netstat 等命令行工具(统称为 net-tools)来配置网络功能,解决网络故障。net-tools 起源于 BSD 的 TCP/IP 工具箱,后来成为老版本 Linux 内核中配置网络功能的工具。**但自 2001 年起,Linux 社区已经对其停止维护。**同时,一些 Linux 发行版比如 Arch Linux 和 CentOS/RHEL 7 则已经完全抛弃了 net-tools,只支持 iproute2。
作为网络配置工具的一份子,iproute2 的出现旨在从功能上取代 net-tools。net-tools 通过 procfs(/proc)和 ioctl 系统调用去访问和改变内核网络配置,而 iproute2 则通过 netlink 套接字接口与内核通讯。抛开性能而言,iproute2 的用户接口比 net-tools 显得更加直观。比如,各种网络资源(如 link、IP 地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。更重要的是,到目前为止,iproute2 仍处在持续开发中。
如果你仍在使用 net-tools,而且尤其需要跟上新版 Linux 内核中的最新最重要的网络特性的话,那么是时候转到 iproute2 的阵营了。原因就在于使用 iproute2 可以做很多 net-tools 无法做到的事情。
对于那些想要转到使用 iproute2 的用户,有必要了解下面有关 net-tools 和 iproute2 的众多对比。
ip link
显示所有已连接的网络接口
下面的命令显示出所有可用网络接口的列表(无论接口是否激活)
使用net-tools:
|
|
使用 iproute2:
|
|
激活或停用网络接口
使用这些命令来激活或停用某个指定的网络接口。
使用 net-tools:
|
|
使用 iproute2:
|
|
创建与删除网络接口
|
|
示例如下:
|
|
改变网络接口的 MAC 地址
使用下面的命令可篡改网络接口的 MAC 地址,请注意在更改 MAC 地址前,需要停用接口。
使用net-tools:
|
|
使用iproute2:
|
|
改变网络接口参数
| 命令 | 解释 |
|---|---|
| ip link set eth0 up | 开启 eth0 网卡 |
| ip link set eth0 down | 关闭 eth0 网卡 |
| ip link set eth0 promisc on | 开启网卡的混合模式 |
| ip link set eth0 promisc off | 关闭网卡的混合模式 |
| ip link set eth0 txqueuelen 1200 | 设置网卡队列长度 |
| ip link set eth0 mtu 1400 | 设置网卡最大传输单元 |
| ip link set eth0 netns net1 | 设置网卡网络命名空间 |
| … |
ip addr
为网络接口分配 IPv4 地址
使用这些命令配置网络接口的 IPv4 地址。
使用net-tools:
|
|
使用iproute2:
$ sudo ip addr add 10.0.0.1/24 dev eth1
值得注意的是,可以使用 iproute2 给同一个接口分配多个 IP 地址,ifconfig 则无法这么做。使用 ifconfig 的变通方案是使用IP 别名。
|
|
移除网络接口的 IPv4 地址
就 IP 地址的移除而言,除了给接口分配全 0 地址外,net-tools 没有提供任何合适的方法来移除网络接口的 IPv4 地址。相反,iproute2 则能很好地完全。
使用net-tools:
|
|
使用iproute2:
|
|
显示网络接口的 IPv4 地址
按照如下操作可查看某个指定网络接口的 IPv4 地址。
使用net-tools:
|
|
使用iproute2:
|
|
同样,如果接口分配了多个 IP 地址,iproute2 会显示出所有地址,而 net-tools 只能显示一个 IP 地址。
为网络接口分配 IPv6 地址
使用这些命令为网络接口添加 IPv6 地址。net-tools 和 iproute2 都允许用户为一个接口添加多个 IPv6 地址。
使用net-tools:
|
|
使用iproute2:
|
|
显示网络接口的 IPv6 地址
按照如下操作可显示某个指定网络接口的 IPv6 地址。net-tools 和 iproute2 都可以显示出所有已分配的 IPv6 地址。
使用net-tools:
|
|
使用iproute2:
|
|
移除网络设备的 IPv6 地址
使用这些命令可移除接口中不必要的 IPv6 地址。
使用net-tools:
|
|
使用iproute2:
|
|
ip route
linux 系统中,可以自定义从 1 - 252 个路由表。其中,linux 系统维护了 4 个路由表:
- 0#表:系统保留表
- 253#表:defulte table 没特别指定的默认路由都放在改表
- 254#表:main table 没指明路由表的所有路由放在该表
- 255#表:local table 保存本地接口地址,广播地址、NAT 地址 由系统维护,用户不得更改
路由表序号和表名的对应关系在 /etc/iproute2/rt_tables 文件中,可手动编辑,路由表添加完毕即时生效。
|
|
可以分别查看各个表的路由情况:
|
|
查看 IP 路由表
net-tools 中有两个选择来显示内核的 IP 路由表:route 和 netstat。在 iproute2 中,使用命令 ip route。
使用net-tools:
|
|
使用iproute2:
|
|
添加和修改默认路由
这里的命令用来添加或修改内核 IP 路由表中的默认路由规则。请注意在 net-tools 中可通过添加新的默认路由、删除旧的默认路由来实现修改默认路由。在 iproute2 使用 ip route 命令来代替。
使用net-tools:
|
|
使用iproute2:
|
|
添加和移除静态路由
使用下面命令添加或移除一个静态路由。
使用net-tools:
|
|
使用iproute2:
|
|
ip rule
基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或 IP 源地址等属性来选择转发路径。
ip rule 命令:
|
|
例子:
|
|
在 Linux 系统启动时,内核会为路由策略数据库配置三条缺省的规则:
- 0 匹配任何条件 查询路由表 local(ID 255) 路由表 local 是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 0 非常特殊,不能被删除或者覆盖。
- 32766 匹配任何条件 查询路由表 main(ID 254) 路由表 main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规则。
- 32767 匹配任何条件 查询路由表 default(ID 253) 路由表 default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。
不要混淆路由表和策略:
- 规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。
- 如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。
ip neigh
查看 ARP 表
使用这些命令显示内核的 ARP 表。
使用net-tools:
|
|
使用iproute2:
|
|
添加或删除静态 ARP 项
按照如下操作在本地 ARP 表中添加或删除一个静态 ARP 项。
使用net-tools:
|
|
使用iproute2:
|
|
添加、删除或查看多播地址
使用下面的命令配置或查看网络接口上的多播地址。
使用net-tools:
|
|
使用iproute2:
|
|
ip netns
|
|
ss
查看套接字统计信息
这里的命令用来查看套接字统计信息(比如活跃或监听状态的 TCP/UDP 套接字)。
使用net-tools:
|
|
使用iproute2:
|
|
参考资料
-
No backlinks found.