1、ipoute2简介
iproute2
是Linux
下新一代的网络配置工具,旨在替代传统的net-tools
工具集。它提供了一套强大的命令和功能,用于配置和监控Linux
系统的网络环境。
iproute2
的核心命令是ip
,该命令功能齐全,可以配置和查看网络接口(link
)、网络接口的地址(address
)、ARP(neighbour)
、路由(route
)、路由策略数据库(rule
)以及隧道(tunnel
)等。iproute2
通过netlink
套接字接口与内核进行通讯,使得网络配置更加高效和灵活。
此外,iproute2
还支持复杂的路由配置,如策略路由和多表路由等。这使得用户能够更灵活地控制网络流量,满足不同的网络需求。
最重要的是,iproute2
仍在持续开发中,不断引入新的功能和优化。这意味着它可以根据新的网络技术和需求进行更新和改进,保持与时俱进。
2、iproute2与net-tools对比
net-tools
是Linux
系统中一套传统的网络管理工具集,起源于BSD
的TCP/IP
工具箱,后来成为老版本Linux
内核中配置网络功能的工具。它包含了一系列命令行工具,如ifconfig
、route
、arp
和netstat
等,用于配置网络接口、设置IP地址、管理路由表以及查看网络连接状态等。
这些工具通过访问和改变内核网络配置来实现其功能,通常是通过procfs(/proc)
和ioctl
系统调用来实现的。然而,自2001
年起,Linux
社区已经对net-tools
停止维护,并且一些现代的Linux
发行版,如Ubuntu 18
、Arch Linux
和CentOS/RHEL 7
等,已经完全抛弃了net-tools
,转而支持新一代的网络配置工具iproute2
。
与net-tools
相比,iproute2
的用户接口更加直观和易用。
它使用合适的对象抽象来定义各种网络资源,如链接、IP
地址、路由和隧道等,使得用户可以使用一致的语法来管理不同的对象。
这种设计使得网络配置变得更加简单和一致。
二者常用命令如下图:
3、iproute2的安装和版本查看
在大多数Linux
发行版中,iproute2
是默认安装的一部分。
但如果你需要手动安装或更新,可以使用发行版对应的包管理器。
例如,在基于Debian
的系统(如Ubuntu
)上,可以使用apt-get
进行安装:
- 打开终端。
- 输入
sudo apt-get update
来更新软件包列表。- 输入
sudo apt-get install iproute
来安装iproute2
。
当前演示系统是Rocky Linux
,具体信息如下:
[root@localhost ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"
[root@localhost ~]#
它默认已安装了iproute2
且保留了net-tools
工具集,版本查看如下:
[root@localhost ~]# ip -V
ip utility, iproute2-6.2.0, libbpf 1.2.0
[root@localhost ~]#
4、iproute2与net-tools工具命令显示比较
4.1、显示所有连接的网络接口
使用iproute2:
[root@RockyLinux ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:4e:62:95 brd ff:ff:ff:ff:ff:ff
altname enp3s0
[root@RockyLinux ~]#
使用net-tools:
[root@RockyLinux ~]# ifconfig -a
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.17.148 netmask 255.255.255.0 broadcast 192.168.17.255
inet6 fe80::20c:29ff:fe4e:6295 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4e:62:95 txqueuelen 1000 (Ethernet)
RX packets 849489 bytes 1265181152 (1.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 107393 bytes 9667547 (9.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 37 bytes 4412 (4.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 37 bytes 4412 (4.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.2、激活或禁止网络接口
使用iproute2:
[root@RockyLinux ~]# ip link set down ens160
[root@RockyLinux ~]# ip link set up ens160
使用net-tools:
[root@RockyLinux ~]# ifconfig ens160 up
[root@RockyLinux ~]# ifconfig ens160 down
4.3、给接口分配IP地址
使用iproute2:
iproute2
可以给同一个接口分配多个IP
地址,如下:
[root@RockyLinux ~]# ip addr add 192.168.17.100/24 dev ens160
[root@RockyLinux ~]# ip addr add 10.128.10.100/24 dev ens160
[root@RockyLinux ~]# ip add show ens160 # 查看ENS160接口IP地址
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:4e:62:95 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.17.148/24 brd 192.168.17.255 scope global dynamic noprefixroute ens160
valid_lft 1407sec preferred_lft 1407sec
inet 10.128.10.100/24 scope global ens160
valid_lft forever preferred_lft forever
inet 192.168.17.100/24 scope global secondary ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe4e:6295/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用net-tools:
[root@RockyLinux ~]# ifconfig ens160 10.128.10.200/24
4.4、从网络接口删除IPv4地址
# 使用iproute2:
[root@RockyLinux ~]# ip ad ip addr del 192.168.17.100/24 dev ens160
使用net-tools:
[root@RockyLinux ~]# ifconfig ens160 0
4.5、显示网络接口的一个或多个IPv4地址
使用iproute2:
[root@RockyLinux ~]# ip addr show dev ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:4e:62:95 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.17.148/24 brd 192.168.17.255 scope global dynamic noprefixroute ens160
valid_lft 1592sec preferred_lft 1592sec
inet6 fe80::c6fb:4bbd:60dd:fa31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用net-tools:
[root@RockyLinux ~]# ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.17.148 netmask 255.255.255.0 broadcast 192.168.17.255
inet6 fe80::c6fb:4bbd:60dd:fa31 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4e:62:95 txqueuelen 1000 (Ethernet)
RX packets 850427 bytes 1265254443 (1.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 107847 bytes 9714747 (9.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.6、更改网络接口的MAC地址
使用iproute2:
[root@RockyLinux ~]# ip link set dev ens160 address 07:00:21:75:2B:2C
[root@RockyLinux ~]# ip add show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 07:00:21:75:2b:2c brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:4e:62:95
altname enp3s0
inet 192.168.17.148/24 brd 192.168.17.255 scope global dynamic noprefixroute ens160
valid_lft 1146sec preferred_lft 1146sec
inet6 fe80::c6fb:4bbd:60dd:fa31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用net-tools:
修改后查看由原来的00:0c:29:4e:62:95
变为07:00:21:75:2b:2b
:
[root@RockyLinux ~]# ifconfig ens160 hw ether 07:00:21:75:2B:2B
[root@RockyLinux ~]#
[root@RockyLinux ~]# ip add show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 07:00:21:75:2b:2b brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:4e:62:95
altname enp3s0
inet 192.168.17.148/24 brd 192.168.17.255 scope global dynamic noprefixroute ens160
valid_lft 1347sec preferred_lft 1347sec
inet6 fe80::c6fb:4bbd:60dd:fa31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4.7、查看IP路由表
使用iproute2:
[root@RockyLinux ~]# ip route show
default via 192.168.17.2 dev ens160 proto dhcp src 192.168.17.148 metric 100
192.168.17.0/24 dev ens160 proto kernel scope link src 192.168.17.148 metric 100
使用net-tools:
对于net-tools
工具集来说,route -n
和netstat -rn
都可以查路由表:
[root@RockyLinux ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.17.2 0.0.0.0 UG 100 0 0 ens160
192.168.17.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
[root@RockyLinux ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.17.2 0.0.0.0 UG 0 0 0 ens160
192.168.17.0 0.0.0.0 255.255.255.0 U 0 0 0 ens160
4.8、添加或改动默认路由
使用iproute2:
[root@RockyLinux ~]# ip route add default via 192.168.17.2 dev eth0
[root@RockyLinux ~]# ip route replace default via 192.168.17.3 dev eth0
使用net-tools:
[root@RockyLinux ~]# route add default gw 192.168.17.3 ens160
[root@RockyLinux ~]# route del default gw 192.168.17.2 ens160
4.9、添加或删除静态路由
使用iproute2:
[root@RockyLinux ~]# ip route add 172.16.32.0/24 via 192.168.2.1 dev ens160
[root@RockyLinux ~]# ip route del 172.16.32.0/24
使用net-tools:
[root@RockyLinux ~]# route add -net 172.16.32.0/24 gw 192.168.2.1 dev ens160
[root@RockyLinux ~]# route del -net 172.16.32.0/24
4.10、查看套接字统计数据
使用iproute2:
[root@RockyLinux ~]# ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_dgr ESTAB 0 0 /run/systemd/notify 15630 * 0
u_dgr ESTAB 0 0 /run/systemd/journal/dev-log 15643 * 0
u_dgr ESTAB 0 0 /run/systemd/journal/socket 15645 * 0
u_dgr ESTAB 0 0 /run/chrony/chronyd.sock 23018 * 0
u_str ESTAB 0 0 /run/user/0/bus 28483 * 30948
u_str ESTAB 0 0 * 28361 * 29367
u_str ESTAB 0 0 * 30728 * 30304
u_dgr ESTAB 0 0 * 135824 * 15643
u_str ESTAB 0 0 * 30916 * 30917
u_str ESTAB 0 0 /run/systemd/journal/stdout 32865 * 33816
u_str ESTAB 0 0 /run/dbus/system_bus_socket 97994 * 99551
u_str ESTAB 0 0 * 32790 * 32791
u_str ESTAB 0 0 * 29695 * 31072
u_str ESTAB 0 0 * 16157 * 17183
u_str ESTAB 0 0 * 31732 * 32969
u_str ESTAB 0 0 * 28025 * 28994
u_str ESTAB 0 0 /run/systemd/journal/stdout 23736 * 24656
u_str ESTAB 0 0 * 30853 * 28413
u_str ESTAB 0 0 * 30449 * 29470
u_str ESTAB 0 0 * 27551 * 29177
u_str ESTAB 0 0 * 23811 * 23028
u_str ESTAB 0 0 /run/user/0/bus 30926 * 29578
u_str ESTAB 0 0 /run/dbus/system_bus_socket 28425 * 29544
u_str ESTAB 0 0 /run/user/0/bus 28397 * 30427
……
使用net-tools:
[root@RockyLinux ~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:6013 0.0.0.0:* LISTEN
tcp 0 0 localhost:6011 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp6 0 0 localhost:6013 [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
tcp6 0 0 localhost:6011 [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:50156 0.0.0.0:*
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:mdns [::]:*
udp6 0 0 [::]:40584 [::]:*
raw6 0 0 [::]:ipv6-icmp [::]:* 7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 29179 @/tmp/.ICE-unix/1648
unix 2 [ ACC ] STREAM LISTENING 99256 /run/.heim_org.h5l.kcm-socket
unix 2 [ ACC ] STREAM LISTENING 29301 @2dfa4
unix 2 [ ACC ] STREAM LISTENING 99301 /run/systemd/journal/io.systemd.journal
……
4.11、查看ARP表
使用iproute2:
[root@localhost ~]# ip neigh
192.168.17.1 dev ens160 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.17.2 dev ens160 lladdr 00:50:56:f1:32:61 REACHABLE
192.168.17.254 dev ens160 lladdr 00:50:56:e9:38:ec STALE
使用net-tools:
[root@localhost ~]# arp -an
? (192.168.17.1) at 00:50:56:c0:00:08 [ether] on ens160
? (192.168.17.2) at 00:50:56:f1:32:61 [ether] on ens160
? (192.168.17.254) at 00:50:56:e9:38:ec [ether] on ens160
4.12、添加或删除静态ARP项
使用iproute2:
[root@RockyLinux ~]# ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:2B:2C dev ens160
[root@RockyLinux ~]# ip neigh del 192.168.1.100 dev ens160
使用net-tools:
[root@RockyLinux ~]# arp -s 192.168.1.100 00:0c:29:c0:2B:2C
[root@RockyLinux ~]# arp -d 192.168.1.100
暂无评论内容