Linux TCP/IP 网络:net-tools 与 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
套接字接口与内核通信。众所周知,/proc
接口比 netlink
接口更重量级。撇开性能不谈,iproute2
的用户界面比 net-tools
更直观。例如,网络资源(例如链路、IP地址、路由、隧道等)可以用对象
抽象适当地定义,并且您可以使用一致的语法来管理不同的对象。最重要的是,iproute2
迄今为止一直在积极开发中。
如果您仍在使用 net-tools
,那么是时候切换到 iproute2
了,特别是如果您想赶上 Linux 内核最新、最强大的网络功能。很可能有很多事情可以使用 iproute2 完成,但不能使用 net-tools 完成,例如基于源的路由、QoS、VLAN、绑定、网桥等。还值得注意的是,网络管理器等更高级别的网络配置工具依赖于 iproute2。
对于那些想要进行切换的人,这里是 net-tools
与 iproute2
比较的总结。
显示所有连接的网络接口
以下命令显示所有可用网络接口的列表(无论它们是否处于活动状态)。
使用net-tools
:
$ ifconfig -a
使用iproute2
:
$ ip link show

激活或停用网络接口
要激活/停用特定网络接口,请使用这些命令。
使用net-tools
:
$ sudo ifconfig eth1 up
$ sudo ifconfig eth1 down
使用iproute2
:
$ sudo ip link set down eth1
$ sudo ip link set up eth1
将 IPv4 地址分配给网络接口
使用这些命令配置网络接口的 IPv4 地址。
使用net-tools
:
$ sudo ifconfig eth1 10.0.0.1/24
使用iproute2
:
$ sudo ip addr add 10.0.0.1/24 dev eth1
请注意,使用iproute2
,您可以为一个接口分配多个 IP 地址,而使用ifconfig
则无法做到这一点。使用 ifconfig
解决此缺陷的方法是使用 IP 别名。
$ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1
从网络接口中删除 IPv4 地址
就 IP 地址删除而言,除了将 0
分配给接口之外,没有其他方法可以使用 net-tools
从网络接口删除 IPv4 地址。 iproute2
可以正确处理这个问题。
使用net-tools
:
$ sudo ifconfig eth1 0
使用iproute2
:
$ sudo ip addr del 10.0.0.1/24 dev eth1
显示网络接口的 IPv4 地址
检查特定网络接口的 IPv4 地址可以按如下方式完成。
使用net-tools
:
$ ifconfig eth1
使用iproute2
:
$ ip addr show dev eth1
同样,如果为一个接口分配了多个 IP 地址,iproute2
将显示所有这些地址,而 net-tools
仅显示一个 IP 地址。

为网络接口分配 IPv6 地址
使用这些命令将 IPv6 地址添加到网络接口。与 IPv4 不同,net-tools
和 iproute2
都允许您向接口添加多个 IPv6 地址。
使用net-tools
:
$ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
$ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64
使用iproute2
:
$ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
$ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1
显示网络接口的 IPv6 地址
显示特定网络接口的 IPv6 地址可以按如下方式完成。 net-tools
和 iproute2
都可以显示所有分配的 IPv6 地址。
使用net-tools
:
$ ifconfig eth1
使用iproute2
:
$ ip -6 addr show dev eth1

从网络接口中删除 IPv6 地址
使用这些命令从接口中删除任何不必要的 IPv6 地址。
使用net-tools
:
$ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64
使用iproute2
:
$ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1
更改网络接口的 MAC 地址
要欺骗网络接口的 MAC 地址,请使用以下命令。请注意,在更改 MAC 地址之前,您需要先停用该接口。
使用net-tools
:
$ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66
使用iproute2
:
$ sudo ip link set dev eth1 address 08:00:27:75:2a:67
查看IP路由表
net-tools
有两个选项用于显示内核的 IP 路由表:route
或 netstat
。对于iproute2
,使用ip route
命令。
使用net-tools
:
$ route -n
$ netstat -rn
使用iproute2
:
$ ip route show

添加或修改默认路由
以下是在内核 IP 路由表中添加或修改默认路由的命令。请注意,使用net-tools
,可以通过添加新的默认路由,然后删除旧的默认路由来修改默认路由。对于iproute2
,请使用ip route replacement
命令。
使用net-tools
:
$ sudo route add default gw 192.168.1.2 eth0
$ sudo route del default gw 192.168.1.1 eth0
使用iproute2
:
$ sudo ip route add default via 192.168.1.2 dev eth0
$ sudo ip route replace default via 192.168.1.2 dev eth0
添加或删除静态路由
可以使用以下命令添加或删除静态路由。
使用net-tools
:
$ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
$ sudo route del -net 172.16.32.0/24
使用iproute2
:
$ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
$ sudo ip route del 172.16.32.0/24
查看套接字统计信息
以下是检查套接字统计信息的命令(例如,活动/侦听 TCP/UDP 套接字)。
使用net-tools
:
$ netstat
$ netstat -l
使用iproute2
:
$ ss
$ ss -l

查看ARP表
您可以使用这些命令显示内核的 ARP 表。
使用net-tools
:
$ arp -an
使用iproute2
:
$ ip neigh

添加或删除静态 ARP 条目
在本地 ARP 表中添加或删除静态 ARP 条目的操作如下。
使用net-tools
:
$ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
$ sudo arp -d 192.168.1.100
使用iproute2
:
$ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
$ sudo ip neigh del 192.168.1.100 dev eth0
添加、删除或查看多播地址
要配置或查看网络接口上的多播地址,请使用以下命令。
使用net-tools
:
$ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
$ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
$ ipmaddr show dev eth0
$ netstat -g
使用iproute2
:
$ sudo ip maddr add 33:44:00:00:00:01 dev eth0
$ sudo ip maddr del 33:44:00:00:00:01 dev eth0
$ ip maddr list dev eth0