为什么你需要放弃 ifconfig 而改用 ip

开始使用现代方法配置 Linux 网络接口。
73 位读者喜欢这篇文章。
Tips and gears turning

opensource.com

长期以来,ifconfig 命令一直是配置网络接口的默认方法。它为 Linux 用户提供了很好的服务,但网络很复杂,配置网络的命令必须是健壮的。ip 命令是现代系统新的默认网络命令,在本文中,我将向您展示如何使用它。

ip 命令在 OSI 网络堆栈 的两层上进行功能组织:第 2 层(数据链路层)和第 3 层(网络或 IP 层)。它完成了旧 net-tools 软件包中的所有工作。

安装 ip

ip 命令包含在 iproute2util 软件包中。它可能已经包含在您的 Linux 发行版中。如果不是,您可以从您的发行版的软件仓库中安装它。

比较 ipconfig 和 ip 的用法

ipipconfic 命令都可以用于配置网络接口,但它们做事的方式不同。我将比较如何使用旧 (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 地址的相反操作是删除一个。

使用 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 命令使用 updown 关键字来执行此操作

# ifconfig eth0 up

或者您可以使用专用命令

# ifup eth0

ip 命令使用 set 子命令将接口设置为 updown 状态

# ip link set eth0 up

启用或禁用地址解析协议 (ARP)

使用 ifconfig,您可以通过声明来启用 ARP

# ifconfig eth0 arp

使用 ip,您将 arp 属性设置为 onoff

# ip link set dev eth0 arp on

ip 和 ipconfig 的优点和缺点

ip 命令比 ifconfig 更通用,技术效率更高,因为它使用 Netlink 套接字而不是 ioctl 系统调用。

ip 命令可能看起来比 ifconfig 更冗长和更复杂,但这也是它更通用的原因之一。一旦您开始使用它,您将体会到它的内部逻辑(例如,使用 set 而不是看似任意的声明或设置组合)。

最终,ifconfig 已经过时(例如,它缺乏对网络命名空间的完全支持),而 ip 是为现代网络设计的。尝试一下,学习它,使用它。您会很高兴您这样做了!

接下来阅读什么
标签
User profile image.
我是 Amar Ujala Ltd. 的系统管理员。在混合 Windows 和开源环境中工作。我们使用许多开源工具。

3 条评论

ip 是一个很棒的工具,但 ip a 的输出与 ifconfig 的输出相比仍然很糟糕。

附言:在标题比较 ip 和 ifconfig 之后有一个错别字,你写的是 ipconfic

哎。又一个“精彩的”(带有贬义)“新”工具——就像 systemd 一样,又创造了一个需要记住的东西。Systemd 是我几乎停止在我的家庭中增加 Linux 使用的原因。一个更好的方法是修改 ifconfig 以使用更新的 API(如果可用),并可能扩展它以处理名称空间,而无需创建另一个 <插入您选择的咒骂> 新命令或工具。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.