长期以来,ifconfig
命令一直是配置网络接口的默认方法。它很好地为 Linux 用户服务,但网络是复杂的,配置网络的命令必须是健壮的。ip
命令是现代系统新的默认网络命令,在本文中,我将向您展示如何使用它。
ip
命令在 OSI 网络堆栈的两层功能性地组织:第 2 层(数据链路层)和第 3 层(网络层或 IP 层)。它完成了旧的 net-tools
软件包中的所有工作。
安装 ip
ip
命令包含在 iproute2util
软件包中。它可能已经包含在您的 Linux 发行版中。如果未包含,您可以从您的发行版的软件仓库中安装它。
比较 ipconfig 和 ip 的用法
ip
和 ipconfic
命令都可以用于配置网络接口,但它们的工作方式不同。我将比较使用旧的 (ipconfig
) 和新的 (ip
) 命令执行常见任务的方法。
查看网络接口和 IP 地址
如果您想查看主机的 IP 地址或查看网络接口信息,旧的 ifconfig
命令在不带参数的情况下,可以提供一个很好的摘要
$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether bc:ee:7b:5e:7d:d8 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
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 41 bytes 5551 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41 bytes 5551 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.1.6 netmask 255.255.255.224 broadcast 10.1.1.31
inet6 fdb4:f58e:49f:4900:d46d:146b:b16:7212 prefixlen 64 scopeid 0x0<global>
inet6 fe80::8eb3:4bc0:7cbb:59e8 prefixlen 64 scopeid 0x20<link>
ether 08:71:90:81:1e:b5 txqueuelen 1000 (Ethernet)
RX packets 569459 bytes 779147444 (743.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 302882 bytes 38131213 (36.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
新的 ip
命令提供类似的结果,但命令是 ip address show
,或者简写为 ip a
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether bc:ee:7b:5e:7d:d8 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:71:90:81:1e:b5 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.6/27 brd 10.1.1.31 scope global dynamic wlan0
valid_lft 83490sec preferred_lft 83490sec
inet6 fdb4:f58e:49f:4900:d46d:146b:b16:7212/64 scope global noprefixroute dynamic
valid_lft 6909sec preferred_lft 3309sec
inet6 fe80::8eb3:4bc0:7cbb:59e8/64 scope link
valid_lft forever preferred_lft forever
添加 IP 地址
要使用 ifconfig
向接口添加 IP 地址,命令是
$ ifconfig eth0 add 192.9.203.21
对于 ip
,命令是类似的
$ ip address add 192.9.203.21 dev eth0
ip
中的子命令可以缩短,因此此命令同样有效
$ ip addr add 192.9.203.21 dev eth0
您可以使其更短
$ ip a add 192.9.203.21 dev eth0
移除 IP 地址
添加 IP 地址的反向操作是移除一个 IP 地址。
使用 ifconfig
,语法是
$ ifconfig eth0 del 192.9.203.21
ip
命令的语法是
$ ip a del 192.9.203.21 dev eth0
启用或禁用多播
使用 ifconfig
在接口上启用(或禁用)多播 是通过 multicast
参数实现的
# ifconfig eth0 multicast
使用 ip
,使用 set
子命令,并带有设备 (dev
) 和布尔值或切换 multicast
选项
# ip link set dev eth0 multicast on
启用或禁用网络
每个系统管理员都熟悉旧的“先关掉再打开”的技巧来修复问题。在网络接口方面,这转化为启动或关闭网络。
ifconfig
命令使用 up
或 down
关键字来执行此操作
# ifconfig eth0 up
或者您可以使用专用命令
# ifup eth0
ip
命令使用 set
子命令将接口设置为 up
或 down
状态
# ip link set eth0 up
启用或禁用地址解析协议 (ARP)
使用 ifconfig
,您可以通过声明来启用 ARP
# ifconfig eth0 arp
使用 ip
,您设置 arp
属性为 on
或 off
# ip link set dev eth0 arp on
ip 和 ipconfig 的优点和缺点
ip
命令比 ifconfig
更通用,技术上也更高效,因为它使用 Netlink
套接字而不是 ioctl
系统调用。
ip
命令可能看起来比 ifconfig
更冗长和更复杂,但这正是它更通用的原因之一。一旦您开始使用它,您将感受到它的内部逻辑(例如,使用 set
而不是看似任意的声明或设置组合)。
最终,ifconfig
已经过时(例如,它缺乏对网络命名空间的完整支持),而 ip
是为现代网络设计的。尝试一下,学习它,使用它。您会很高兴您这样做了!
3 条评论