Administrator
Administrator
发布于 2024-11-03 / 45 阅读
0
0

Linux 中 ip 命令的详细使用方法

Linux 中 ip 命令的详细使用方法

ip 命令是 Linux 系统中用于网络配置和管理的强大工具,是传统 ifconfigroutenetstat 等命令的现代替代品。它属于 iproute2 套件,提供了更全面和灵活的网络管理功能。本文将深入探讨 ip 命令的安装、基本语法、各子命令及其选项、常见使用场景和实际应用示例,帮助您全面掌握这一工具的使用。

目录

  1. 前言
  2. 安装 ip 命令
  3. ip 命令的基本语法
  4. ip 命令的主要子命令详解
  5. 常见使用场景与示例
  6. 高级用法
  7. 错误排查与解决
  8. 最佳实践与注意事项
  9. 总结

前言

在现代 Linux 系统中,网络配置与管理是系统管理员和开发人员日常工作的重要组成部分。传统的网络管理工具如 ifconfigroutenetstat 等虽然仍可使用,但它们在功能和灵活性上已逐渐被 ip 命令取代。ip 命令不仅提供了更全面的网络配置选项,还能更有效地处理复杂的网络环境。

通过掌握 ip 命令,您可以更高效地管理网络接口、配置 IP 地址、设置路由、管理邻居缓存等,提升系统管理和故障排查的能力。


安装 ip 命令

ip 命令是 iproute2 套件的一部分。大多数现代 Linux 发行版默认已安装 iproute2。如果未安装,可以通过以下命令进行安装:

Debian/Ubuntu 系列

sudo apt update
sudo apt install iproute2

Red Hat/CentOS/Fedora 系列

sudo yum install iproute
# 或者在 Fedora 上使用 dnf
sudo dnf install iproute

Arch Linux

sudo pacman -S iproute2

检查安装

安装完成后,可以通过以下命令验证 ip 命令是否可用:

ip --version

示例输出:

ip utility, iproute2-5.10.0

ip 命令的基本语法

ip 命令的基本语法如下:

ip [ OPTIONS ] OBJECT { COMMAND | help }
  • OPTIONS:全局选项,如 -h 显示帮助,-V 显示版本信息。
  • OBJECT:操作对象,如 link(网络接口)、addr(IP 地址)、route(路由)、neigh(邻居缓存)等。
  • COMMAND:具体命令,如 adddelshowset 等。

示例:

ip addr show

ip 命令的主要子命令详解

ip link 用于管理和查看网络接口的状态和属性。

查看所有网络接口

ip link show

简写:

ip link

示例输出:

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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

关键字段解释:

  • 索引号:网络接口的索引号(如 1:, 2:)。
  • 接口名称:接口的名称(如 lo, eth0)。
  • 状态标志:接口的状态和属性(如 UP, DOWN, BROADCAST)。
  • MTU:最大传输单元。
  • qdisc:队列规则。
  • state:接口的状态(如 UP, DOWN)。
  • link/类型:链路层地址(如 loopback, ether)。
  • MAC 地址:以太网地址。
  • 广播地址:广播地址。

启用或禁用网络接口

启用接口:

sudo ip link set eth0 up

禁用接口:

sudo ip link set eth0 down

修改接口的 MTU

设置 MTU 为 1400:

sudo ip link set dev eth0 mtu 1400

重命名接口

eth0 重命名为 enp0s3

sudo ip link set eth0 name enp0s3

注意:某些系统使用 predictable network interface names,建议谨慎重命名接口。

管理 IP 地址 (ip addr)

ip addr 用于管理和查看网络接口的 IP 地址。

查看所有接口的 IP 地址

ip addr show

简写:

ip addr

示例输出:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe12:3456/64 scope link 
       valid_lft forever preferred_lft forever

关键字段解释:

  • inet:IPv4 地址及其子网掩码。
  • brd:广播地址。
  • scope:地址的作用域(如 global, link)。
  • inet6:IPv6 地址及其前缀长度。

添加 IP 地址

eth0 添加 IPv4 地址 192.168.1.20/24

sudo ip addr add 192.168.1.20/24 dev eth0

eth0 添加 IPv6 地址 2001:db8::1/64

sudo ip addr add 2001:db8::1/64 dev eth0

删除 IP 地址

删除 eth0 上的 IPv4 地址 192.168.1.20/24

sudo ip addr del 192.168.1.20/24 dev eth0

删除 eth0 上的 IPv6 地址 2001:db8::1/64

sudo ip addr del 2001:db8::1/64 dev eth0

配置别名 IP 地址

虽然 ip 命令不再使用传统的接口别名(如 eth0:1),可以通过添加多个 IP 地址实现类似功能。

eth0 添加第二个 IPv4 地址 192.168.1.21/24

sudo ip addr add 192.168.1.21/24 dev eth0

管理路由表 (ip route)

ip route 用于管理和查看路由表。

查看路由表

ip route show

简写:

ip route

示例输出:

default via 192.168.1.1 dev eth0 proto dhcp metric 100 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100 

关键字段解释:

  • default via 192.168.1.1 dev eth0:默认路由,通过网关 192.168.1.1 使用接口 eth0
  • 192.168.1.0/24 dev eth0:到达 192.168.1.0/24 子网的路由,使用接口 eth0
  • proto:路由协议(如 kernel, dhcp)。
  • scope:路由作用域(如 link, global)。
  • src:源地址。
  • metric:路由优先级,数值越低优先级越高。

添加路由

添加到 10.0.0.0/24 子网的路由,网关为 192.168.1.1,使用接口 eth0

sudo ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0

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

sudo ip route add default via 192.168.1.1 dev eth0

删除路由

删除到 10.0.0.0/24 子网的路由:

sudo ip route del 10.0.0.0/24 via 192.168.1.1 dev eth0

删除默认路由:

sudo ip route del default via 192.168.1.1 dev eth0

修改路由

ip route 不提供直接修改路由的命令,通常需要先删除旧路由再添加新路由。

示例:将默认路由从 192.168.1.1 改为 192.168.1.254

sudo ip route del default via 192.168.1.1 dev eth0
sudo ip route add default via 192.168.1.254 dev eth0

设置路由优先级

通过设置 metric 参数来调整路由优先级。

添加路由并设置较高的 metric(较低优先级):

sudo ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0 metric 200

管理网络规则 (ip rule)

ip rule 用于管理策略路由规则,基于多种条件(如源地址、目的地址、TOS 等)选择不同的路由表。

查看网络规则

ip rule show

示例输出:

0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

添加网络规则

基于源地址 192.168.1.10 使用自定义路由表 100

sudo ip rule add from 192.168.1.10/32 table 100

删除网络规则

删除基于源地址 192.168.1.10 的规则:

sudo ip rule del from 192.168.1.10/32 table 100

管理路由表

/etc/iproute2/rt_tables 文件中定义自定义路由表。

编辑路由表文件:

sudo nano /etc/iproute2/rt_tables

添加自定义路由表:

100    custom

配置自定义路由表中的路由:

sudo ip route add default via 10.0.0.1 dev eth0 table custom

管理邻居表 (ip neigh)

ip neigh 用于管理 ARP(地址解析协议)缓存。

查看邻居表

ip neigh show

简写:

ip n

示例输出:

192.168.1.1 dev eth0 lladdr 52:54:00:12:34:56 REACHABLE
192.168.1.20 dev eth0 lladdr 52:54:00:65:43:21 STALE

关键字段解释:

  • IP 地址:目标 IP 地址。
  • dev:关联的网络接口。
  • lladdr:链路层地址(MAC 地址)。
  • 状态:邻居状态(如 REACHABLE, STALE, FAILED)。

添加静态 ARP 条目

为 IP 地址 192.168.1.100 添加静态 MAC 地址 00:11:22:33:44:55

sudo ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud permanent

删除 ARP 条目

删除 IP 地址 192.168.1.100 的 ARP 条目:

sudo ip neigh del 192.168.1.100 dev eth0

修改 ARP 条目

将 IP 地址 192.168.1.100 的 MAC 地址修改为 66:77:88:99:AA:BB

sudo ip neigh replace 192.168.1.100 lladdr 66:77:88:99:AA:BB dev eth0 nud permanent

管理多播组 (ip maddr)

ip maddr 用于管理网络接口的多播地址。

查看多播地址

ip maddr show

示例输出:

1: lo
    inet 224.0.0.1 dev lo
    inet6 ff02::1 dev lo
2: eth0
    inet 224.0.0.1 dev eth0
    inet6 ff02::1 dev eth0

添加多播地址

eth0 添加多播地址 224.0.0.2

sudo ip maddr add 224.0.0.2 dev eth0

删除多播地址

删除 eth0 上的多播地址 224.0.0.2

sudo ip maddr del 224.0.0.2 dev eth0

管理隧道 (ip tunnel)

ip tunnel 用于创建和管理网络隧道,如 GRE、IPIP 等。

创建 GRE 隧道

创建名为 gre1 的 GRE 隧道,源 IP 为 192.168.1.1,目的 IP 为 192.168.2.1

sudo ip tunnel add gre1 mode gre remote 192.168.2.1 local 192.168.1.1 ttl 255

启动隧道

sudo ip link set gre1 up

配置隧道的 IP 地址

sudo ip addr add 10.0.0.1/30 dev gre1

删除隧道

sudo ip tunnel del gre1

常见使用场景与示例

查看所有网络接口和状态

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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

启用或禁用网络接口

启用接口 eth0

sudo ip link set eth0 up

禁用接口 eth0

sudo ip link set eth0 down

添加或删除 IP 地址

添加 IPv4 地址 192.168.1.20/24eth0

sudo ip addr add 192.168.1.20/24 dev eth0

删除 IPv4 地址 192.168.1.20/24eth0

sudo ip addr del 192.168.1.20/24 dev eth0

添加或删除路由

添加到 10.0.0.0/24 的路由,网关为 192.168.1.1,使用 eth0

sudo ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0

删除到 10.0.0.0/24 的路由:

sudo ip route del 10.0.0.0/24 via 192.168.1.1 dev eth0

配置默认网关

设置默认网关为 192.168.1.1

sudo ip route add default via 192.168.1.1 dev eth0

删除默认网关:

sudo ip route del default via 192.168.1.1 dev eth0

配置别名 IP 地址

eth0 添加第二个 IPv4 地址 192.168.1.21/24

sudo ip addr add 192.168.1.21/24 dev eth0

查看路由表和路由规则

查看路由表:

ip route show

查看网络规则:

ip rule show

管理邻居缓存

查看邻居表:

ip neigh show

添加静态 ARP 条目:

sudo ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud permanent

删除 ARP 条目:

sudo ip neigh del 192.168.1.100 dev eth0

创建和管理隧道

创建 GRE 隧道 gre1

sudo ip tunnel add gre1 mode gre remote 192.168.2.1 local 192.168.1.1 ttl 255
sudo ip link set gre1 up
sudo ip addr add 10.0.0.1/30 dev gre1

删除 GRE 隧道 gre1

sudo ip tunnel del gre1

高级用法

使用 ip 命令与 tc 进行流量控制

tc(Traffic Control)用于配置网络流量的管理策略,通常与 ip 命令结合使用。

示例:为 eth0 配置带宽限制

  1. 清除现有队列规则:

    sudo tc qdisc del dev eth0 root
    
  2. 添加根队列规则(HTB):

    sudo tc qdisc add dev eth0 root handle 1: htb default 12
    
  3. 创建主类:

    sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
    
  4. 创建子类并设置带宽限制:

    sudo tc class add dev eth0 parent 1:1 classid 1:12 htb rate 10mbit
    
  5. 添加过滤规则:

    sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100 flowid 1:12
    

说明:

  • HTB(Hierarchical Token Bucket):一种队列规则,用于管理带宽。
  • rate:带宽速率限制。
  • filter:匹配特定流量的规则。

配置网络命名空间

网络命名空间允许在同一主机上创建多个独立的网络环境。

创建网络命名空间 ns1

sudo ip netns add ns1

在命名空间中添加网络接口:

  1. 创建虚拟以太网对:

    sudo ip link add veth0 type veth peer name veth1
    
  2. veth1 移动到 ns1 命名空间:

    sudo ip link set veth1 netns ns1
    
  3. 配置主机端接口 veth0

    sudo ip addr add 10.200.1.1/24 dev veth0
    sudo ip link set veth0 up
    
  4. 配置命名空间内的接口 veth1

    sudo ip netns exec ns1 ip addr add 10.200.1.2/24 dev veth1
    sudo ip netns exec ns1 ip link set veth1 up
    sudo ip netns exec ns1 ip link set lo up
    
  5. 在命名空间中添加默认路由:

    sudo ip netns exec ns1 ip route add default via 10.200.1.1
    

验证命名空间内的网络配置:

sudo ip netns exec ns1 ip addr show

删除网络命名空间:

sudo ip netns del ns1

配置 VLAN 和桥接接口

创建 VLAN 接口

  1. eth0 创建 VLAN 100:

    sudo ip link add link eth0 name eth0.100 type vlan id 100
    sudo ip addr add 192.168.100.1/24 dev eth0.100
    sudo ip link set eth0.100 up
    

创建桥接接口

  1. 安装桥接工具(如果未安装):

    sudo apt install bridge-utils   # Debian/Ubuntu
    sudo yum install bridge-utils   # Red Hat/CentOS
    sudo dnf install bridge-utils   # Fedora
    
  2. 创建桥接接口 br0 并添加 eth0 到桥接中:

    sudo ip link add name br0 type bridge
    sudo ip link set dev eth0 master br0
    sudo ip addr add 192.168.1.10/24 dev br0
    sudo ip link set dev br0 up
    sudo ip link set dev eth0 up
    

删除桥接接口:

sudo ip link set dev eth0 nomaster
sudo ip link delete br0 type bridge

错误排查与解决

接口未显示或不可用

症状:执行 ip link show 未显示预期的网络接口,或接口状态为 DOWN

解决方法:

  1. 检查驱动程序:确保网络接口的驱动已正确加载。

    lspci -k | grep -A 3 -i network
    
  2. 启用接口

    sudo ip link set eth0 up
    
  3. 检查硬件连接:确保物理连接正确,网线插紧,网络设备正常工作。

  4. 查看系统日志

    dmesg | grep eth0
    

无法添加 IP 地址

症状:执行 ip addr add 命令时报错,如 RTNETLINK answers: File exists

解决方法:

  1. 检查是否已存在相同的 IP 地址

    ip addr show dev eth0
    
  2. 删除冲突的 IP 地址

    sudo ip addr del 192.168.1.20/24 dev eth0
    
  3. 使用正确的子网掩码:确保 IP 地址和子网掩码匹配。

  4. 接口状态:确保接口已启用。

    sudo ip link set eth0 up
    

路由添加失败

症状:执行 ip route add 命令时报错,如 RTNETLINK answers: Network is unreachable

解决方法:

  1. 检查网关是否可达

    ping -c 3 192.168.1.1
    
  2. 确保接口已配置 IP 地址

    ip addr show dev eth0
    
  3. 检查接口状态

    ip link show dev eth0
    
  4. 确保目标网络和网关在同一子网

权限不足问题

症状:执行 ip 命令时提示 Operation not permitted 或类似错误。

解决方法:

  1. 使用 sudo:许多 ip 命令需要超级用户权限。

    sudo ip link set eth0 up
    
  2. 以 root 用户身份执行命令

    su -
    ip link set eth0 up
    
  3. 检查用户权限:确保当前用户具有执行网络管理操作的权限。

命令不兼容或缺失

症状:执行 ip 命令时提示 command not found

解决方法:

  1. 安装 iproute2 套件

    sudo apt install iproute2   # Debian/Ubuntu
    sudo yum install iproute     # Red Hat/CentOS
    sudo dnf install iproute     # Fedora
    
  2. 检查 PATH 环境变量

    echo $PATH
    which ip
    
  3. 重新安装 iproute2 套件

    sudo apt reinstall iproute2   # Debian/Ubuntu
    sudo yum reinstall iproute     # Red Hat/CentOS
    sudo dnf reinstall iproute     # Fedora
    

最佳实践与注意事项

  1. 使用 sudo 或 root 权限:多数 ip 命令需要超级用户权限,确保在安全的前提下使用。

  2. 理解网络基础:熟悉 IP 地址、子网掩码、路由表等网络基础知识,有助于更有效地使用 ip 命令。

  3. 备份配置文件:在修改网络配置前,备份相关配置文件,如 /etc/network/interfaces/etc/netplan/*.yaml

  4. 避免误操作:错误的网络配置可能导致远程连接中断,尤其是在管理远程服务器时,建议在本地终端执行关键操作。

  5. 使用脚本自动化配置:通过 Shell 脚本自动化常见的网络配置任务,提高效率并减少人为错误。

  6. 监控网络状态:定期检查网络接口状态和路由表,确保网络连接正常。

  7. 文档化配置变更:记录所有网络配置的更改,便于日后维护和故障排查。

  8. 结合其他工具使用:与 pingtraceroutenetstatss 等工具结合使用,全面分析和诊断网络问题。


总结

ip 命令是 Linux 系统中网络配置和管理的核心工具,提供了比传统工具更强大和灵活的功能。通过本文的详细介绍,您应能够熟练地使用 ip 命令执行各种网络管理任务,包括查看和配置网络接口、管理 IP 地址和路由、配置网络规则、管理邻居缓存等。

关键要点:

  • 全面的子命令ip 命令涵盖了网络接口、地址、路由、规则、邻居等多个方面。
  • 灵活的选项和参数:通过组合不同的选项和参数,可以实现复杂的网络配置。
  • 现代化的网络管理:相比传统工具,ip 命令提供了更高效和可靠的网络管理方式。
  • 结合其他工具:与其他网络工具结合使用,能更有效地进行网络诊断和故障排查。

通过不断实践和应用,您将能够充分发挥 ip 命令的潜力,提升 Linux 系统的网络管理能力。


评论