Linux 系统中强大的 ip 命令已经彻底取代了传统的 ifconfig,成为管理网络接口、IP 地址、路由表和邻居表的核心工具。本文将从基础用法到高级技巧,全面带你掌握 ip 命令的精髓,助你轻松驾驭 Linux 网络配置。

引言:告别 ifconfig,拥抱 ip

在 Linux 系统管理中,网络配置是核心任务之一。过去,我们习惯使用 ifconfig 来查看和配置网络接口。然而,随着 Linux 内核和网络工具的发展,功能更强大、设计更现代的 ip 命令已经完全取代了 ifconfig。它不仅提供了更细致的网络控制,还在命令语法和信息呈现上做了优化。如果你还在使用 ifconfig,那么是时候升级你的技能树了!

ip 命令基础:结构与对象

ip 命令的结构非常清晰:ip [ OPTIONS ] OBJECT { COMMAND | help }

  • OPTIONS: 全局选项,例如 -s (显示更多统计信息), -d (显示详情), -json (JSON 输出)。
  • OBJECT: 要操作的网络对象,这是 ip 命令的核心。常见的对象包括:
    • link:网络设备(如网卡)属性。
    • addr:IP 地址。
    • route:路由表。
    • neigh:邻居表(ARP/NDP 缓存)。
  • COMMAND: 对特定对象执行的操作,如 show (显示), add (添加), del (删除), set (设置)。

管理网络接口:ip link

ip link 对象用于管理和显示网络设备的属性,它提供了比 ifconfig 更详细的信息。

查看网络接口状态

显示所有网络接口及其状态:

ip link show

只显示特定接口(例如 eth0enp0s3):

ip link show dev eth0

显示详细统计信息:

ip -s link show

启用/禁用网络接口

启用接口:

ip link set dev eth0 up

禁用接口:

ip link set dev eth0 down

修改接口属性

修改 MTU (最大传输单元):

ip link set dev eth0 mtu 9000

更改 MAC 地址:

ip link set dev eth0 address 00:11:22:33:44:55

重命名接口(注意:需要先禁用接口):

ip link set dev eth0 down
ip link set dev eth0 name eth1
ip link set dev eth1 up

管理 IP 地址:ip addr

ip addr 对象用于管理网络接口上的 IP 地址配置。

查看 IP 地址

显示所有接口的 IP 地址:

ip addr show

只显示特定接口的 IP 地址:

ip addr show dev eth0

只显示 IPv4 地址:

ip -4 addr show

只显示 IPv6 地址:

ip -6 addr show

添加 IP 地址

为接口添加一个 IP 地址(带子网掩码):

ip addr add 192.168.1.100/24 dev eth0

添加一个带有广播地址的 IP 地址:

ip addr add 192.168.1.101/24 broadcast 192.168.1.255 dev eth0

删除 IP 地址

从接口删除一个 IP 地址:

ip addr del 192.168.1.100/24 dev eth0

删除所有属于某个接口的 IP 地址是不推荐的,一般都是删除特定的地址。

管理路由表:ip route

ip route 对象用于管理系统的路由表,决定数据包如何被转发。

查看路由表

显示当前系统的所有路由:

ip route show

显示默认路由:

ip route show default

通过源地址过滤路由:

ip route show src 192.168.1.100

添加路由

添加一个默认路由(网关):

ip route add default via 192.168.1.1 dev eth0

添加一个到特定网络的路由:

ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0

添加一个到特定主机的路由:

ip route add 172.16.1.100 via 192.168.1.254 dev eth0

删除路由

删除一个默认路由:

ip route del default via 192.168.1.1 dev eth0

删除一个到特定网络的路由:

ip route del 10.0.0.0/8 via 192.168.1.254 dev eth0

管理邻居表:ip neigh

ip neigh 对象用于管理 ARP 缓存 (IPv4) 和 NDP 缓存 (IPv6),它们将 IP 地址映射到 MAC 地址。

查看邻居表

显示所有邻居条目:

ip neigh show

只显示特定接口的邻居:

ip neigh show dev eth0

添加静态邻居

添加一个静态 ARP 条目:

ip neigh add 192.168.1.200 lladdr 00:aa:bb:cc:dd:ee dev eth0 nud permanent

删除邻居

删除一个邻居条目:

ip neigh del 192.168.1.200 dev eth0

高级技巧与注意事项

  • 持久化配置: ip 命令的所有配置在系统重启后都会丢失。为了实现持久化,你需要使用操作系统提供的网络配置工具,例如:
    • 基于 RedHat/CentOS 的系统:/etc/sysconfig/network-scripts/ 目录下的配置文件。
    • 基于 Debian/Ubuntu 的系统:/etc/network/interfacesnetplan
    • 其他现代系统:NetworkManagersystemd-networkd
    了解你的 Linux 发行版如何管理网络配置至关重要。
  • JSON 输出: 使用 -json 选项可以获取机器可读的 JSON 格式输出,这对于脚本自动化非常有用。
    ip -json addr show
  • 颜色输出: 某些版本的 ip 命令支持彩色输出,可以通过配置别名或环境变量来启用。

总结

ip 命令是现代 Linux 网络管理不可或缺的利器。它以其强大的功能、清晰的对象模型和丰富的信息输出,彻底取代了老旧的 ifconfig。从查看网络接口状态、配置 IP 地址,到管理路由和邻居表,ip 命令提供了全面的控制。掌握它,你将能够更高效、更专业地处理 Linux 网络配置任务。

希望这篇深度解析能帮助你全面理解和运用 ip 命令,成为一名更优秀的网络管理员或开发者!