Linux系统之ip命令详解

ip 命令是 Linux 系统中用于网络配置的强大工具,它取代了旧的 ifconfigroutearp 等命令。ip 命令提供了对网络接口、路由表、邻居对象(ARP 缓存)、隧道等的管理功能。以下是关于 ip 命令的详细解析。

基本语法

ip [ OPTIONS ] OBJECT { COMMAND | help }
  • OPTIONS:包括 -s(显示统计信息)、-f(强制使用特定协议族如 inet、inet6)等。
  • OBJECT:指要操作的对象类型,例如 addresslinkrouteneightunnel 等。
  • COMMAND:对指定对象执行的操作,如 adddelshow 等。

地址管理

地址管理概述

地址管理涉及为网络接口分配 IP 地址、子网掩码和其他相关参数(如广播地址、作用域等)。通过 ip address 子命令可以完成这些任务。以下是关于如何使用 ip 命令进行地址管理的详细说明。

1. 查看地址信息

(1) 查看所有接口的 IP 地址
ip address show

或简写为:

ip a s

这将显示系统中所有网络接口的 IP 地址及其相关信息,包括子网掩码、广播地址、作用域等。

(2) 查看特定接口的 IP 地址

如果只想查看某个特定接口的信息,可以在命令后指定接口名称:

ip address show dev eth0

或简写为:

ip a s dev eth0

2. 添加 IP 地址

(1) 基本用法

要为一个网络接口添加一个 IP 地址,可以使用 add 子命令。以下是一个示例:

ip address add 192.168.1.100/24 dev eth0

这里:

  • 192.168.1.100 是要分配的 IP 地址。
  • /24 表示子网掩码(即 255.255.255.0)。
  • dev eth0 指定目标网络接口。
(2) 添加带有其他选项的 IP 地址

可以添加更多的选项来进一步定义 IP 地址的行为。例如:

ip address add 192.168.1.100/24 broadcast 192.168.1.255 dev eth0

此命令还指定了广播地址。

也可以指定作用域(scope),比如全局(global)、链路本地(linklocal)等:

ip address add 192.168.1.100/24 scope global dev eth0

3. 删除 IP 地址

要删除一个已经分配给网络接口的 IP 地址,可以使用 del 子命令。例如:

ip address del 192.168.1.100/24 dev eth0

4. 替换 IP 地址

如果想要修改一个已有的 IP 地址,可以直接使用 replace 子命令。这实际上是先删除旧的 IP 地址再添加新的 IP 地址的过程,但只需一条命令即可完成:

ip address replace 192.168.1.200/24 dev eth0

5. 显示统计信息

如果想查看与地址相关的统计信息(如发送和接收的数据包数量),可以加上 -s 参数:

ip -s address show dev eth0

链路管理 (ip link)

1. 基本语法

ip link [ OPTIONS ] { COMMAND | help }
  • OPTIONS:可选参数,如 -s(显示统计信息)。
  • COMMAND:对链路执行的操作命令,如 showset 等。

2. 常用命令

(1) 查看网络接口状态 (ip link show)

这是最常用的命令之一,用于查看所有网络接口的状态或特定接口的详细信息。

  • 查看所有接口

    ip link show
    
  • 查看特定接口(例如 eth0):

    ip link show dev eth0
    

输出示例:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff

解释:

  • <BROADCAST,MULTICAST,UP,LOWER_UP>:表示接口支持广播、多播,并且处于启用状态。
  • mtu 1500:最大传输单元(MTU)为 1500 字节。
  • state UP:接口处于活动状态。
  • link/ether:MAC 地址。
(2) 启用或禁用接口 (ip link set dev ... up/down)

可以通过 ip link set 命令来启用或禁用一个网络接口。

  • 启用接口

    ip link set dev eth0 up
    
  • 禁用接口

    ip link set dev eth0 down
    
(3) 设置接口 MTU (ip link set dev ... mtu ...)

可以更改接口的最大传输单元(MTU),这对于优化网络性能或适应某些网络环境非常有用。

  • 设置 MTU
    ip link set dev eth0 mtu 1400
    
(4) 更改接口 MAC 地址 (ip link set dev ... address ...)

可以为网络接口设置一个新的 MAC 地址,注意有些网络接口可能不支持此操作。

  • 更改 MAC 地址
    ip link set dev eth0 address 00:1A:2B:3C:4D:5E
    
(5) 添加虚拟接口 (ip link add ... type ...)

可以创建不同类型的虚拟网络接口,如 VETH 对、TAP/TUN 设备等。

  • 创建 VETH 对(虚拟以太网设备对):

    ip link add veth0 type veth peer name veth1
    
  • 创建 TUN 设备

    ip link add tun0 type tun
    
(6) 删除接口 (ip link delete ...)

可以删除之前创建的虚拟接口。

  • 删除接口
    ip link delete veth0
    
(7) 设置接口名称 (ip link set dev ... name ...)

可以重命名网络接口。

  • 重命名接口
    ip link set dev eth0 name wan0
    

注意:在某些系统上,可能需要先禁用接口才能重命名。

(8) 设置接口组 (ip link set dev ... group ...)

可以将接口分配到不同的组,便于批量管理。

  • 设置接口组
    ip link set dev eth0 group 10
    
(9) 设置接口别名 (ip link set dev ... alias ...)

可以为接口设置一个描述性的别名,方便识别。

  • 设置别名
    ip link set dev eth0 alias "My Primary Network Interface"
    

3. 高级功能

(1) 流量控制 (qdisctc)

虽然严格来说不属于 ip link 的直接功能,但 ip link 可以与 tc(traffic control)命令结合使用来配置接口的流量控制策略。

  • 查看当前队列规则
    tc qdisc show dev eth0
    
(2) 网络命名空间 (ip link set netns ...)

可以将网络接口移动到另一个网络命名空间,这对于隔离网络环境非常有用。

  • 将接口移动到命名空间
    ip link set dev eth0 netns mynamespace
    

路由管理 (ip route)

1. 基本语法

ip route [ add | change | replace | delete ] ROUTE
ip route show [ SELECTOR ]
ip route flush [ SELECTOR ]
  • ROUTE:指定要操作的路由信息。
  • SELECTOR:用于过滤显示或清除特定路由条目。

2. 查看路由表 (ip route show)

这是最常用的命令之一,用于查看系统的路由表。

  • 查看所有路由条目
    ip route show
    
    或简写为:
    ip r
    

输出示例:

default via 192.168.1.1 dev eth0 proto static metric 100 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.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 接口发送,源 IP 地址为 192.168.1.100

3. 添加静态路由 (ip route add)

可以通过 ip route add 命令添加静态路由。

  • 添加到特定网络的路由

    ip route add 10.0.0.0/24 via 192.168.1.254 dev eth0
    

    这表示对于目标地址在 10.0.0.0/24 子网内的数据包,通过 192.168.1.254 路由器进行转发,数据包将通过接口 eth0 发送。

  • 添加默认网关

    ip route add default via 192.168.1.1 dev eth0
    

    设置默认网关为 192.168.1.1,通过接口 eth0 发送数据包。

4. 删除路由 (ip route del)

可以通过 ip route del 命令删除静态路由。

  • 删除特定路由

    ip route del 10.0.0.0/24 via 192.168.1.254 dev eth0
    
  • 删除默认网关

    ip route del default via 192.168.1.1 dev eth0
    

5. 更改或替换路由 (ip route changeip route replace)

  • 更改现有路由

    ip route change 10.0.0.0/24 via 192.168.1.253 dev eth0
    

    更改已有路由的目标网关。

  • 替换路由(如果不存在则添加):

    ip route replace 10.0.0.0/24 via 192.168.1.253 dev eth0
    

6. 高级路由选项

(1) 优先级 (metric)

可以为路由设置优先级,数值越小优先级越高。

  • 设置优先级
    ip route add 10.0.0.0/24 via 192.168.1.254 dev eth0 metric 100
    
(2) 作用域 (scope)

可以定义路由的作用范围,如 globallinkhost 等。

  • 设置作用域
    ip route add 192.168.1.0/24 dev eth0 scope link
    
(3) 多路径路由 (multipath)

支持多路径路由,即配置多个下一跳,以实现负载均衡或冗余。

  • 配置多路径路由
    ip route add default scope global nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 192.168.1.2 dev eth0 weight 1
    

7. 清空路由表 (ip route flush)

可以使用 ip route flush 清空路由表中的某些条目或整个路由表。

  • 清空所有路由

    ip route flush table main
    
  • 清空特定子网的路由

    ip route flush 10.0.0.0/24
    

邻居管理 (ip neigh)

1. 基本语法

ip neigh [show | add | change | replace | delete] [OPTIONS]

2. 常用命令

(1) 查看 ARP 缓存 (ip neigh show)

这是最常用的命令之一,用于查看当前系统中的 ARP 缓存表。

  • 查看所有 ARP 条目
    ip neigh show
    

输出示例:

192.168.1.1 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
192.168.1.2 dev eth0 FAILED

解释:

  • 192.168.1.1 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE:表示 IP 地址 192.168.1.1 对应的 MAC 地址是 00:1a:2b:3c:4d:5e,并且该地址是可达的。
  • 192.168.1.2 dev eth0 FAILED:表示尝试解析 192.168.1.2 的 MAC 地址失败。
(2) 添加静态 ARP 条目 (ip neigh add)

可以通过 ip neigh add 命令手动添加一个静态 ARP 条目。

  • 添加静态 ARP 条目
    ip neigh add 192.168.1.100 lladdr 00:1a:2b:3c:4d:5f dev eth0 nud permanent
    
    • 192.168.1.100:目标 IP 地址。
    • lladdr 00:1a:2b:3c:4d:5f:对应的 MAC 地址。
    • dev eth0:指定网络接口。
    • nud permanent:设置状态为永久(不会老化或被删除)。
(3) 修改现有 ARP 条目 (ip neigh change)

可以通过 ip neigh change 修改现有的 ARP 条目。

  • 修改现有 ARP 条目
    ip neigh change 192.168.1.100 lladdr 00:1a:2b:3c:4d:60 dev eth0 nud reachable
    
(4) 替换现有 ARP 条目 (ip neigh replace)

如果条目存在则修改,不存在则添加。

  • 替换现有 ARP 条目
    ip neigh replace 192.168.1.100 lladdr 00:1a:2b:3c:4d:61 dev eth0 nud stale
    
(5) 删除 ARP 条目 (ip neigh delete)

可以通过 ip neigh delete 删除一个 ARP 条目。

  • 删除 ARP 条目
    ip neigh delete 192.168.1.100 dev eth0
    

3. 高级选项

(1) 状态标志 (nud)

nud(Neighbor Unreachability Detection)标志用于指示邻居的状态:

  • PERMANENT:条目是永久的,不会老化或被删除。
  • REACHABLE:邻居可达。
  • STALE:邻居可能不可达,但尚未确认。
  • DELAY:正在探测邻居的可达性。
  • PROBE:正在进行主动探测以确认邻居的可达性。
  • FAILED:邻居无法到达。
(2) 过滤显示 (ip neigh show ...)

可以使用不同的选项来过滤显示的 ARP 条目:

  • 按设备过滤

    ip neigh show dev eth0
    
  • 按状态过滤

    ip neigh show nud reachable
    

隧道管理

隧道概述

隧道(Tunnel)是一种在网络层上封装数据包的技术,允许数据包在不同的网络之间传输,就好像它们直接连接一样。常见的应用场景包括:

  • 跨过不支持特定协议的网络:例如,在 IPv4 网络中传输 IPv6 数据包。
  • 增强安全性:通过加密隧道(如 IPsec)保护数据传输。
  • 连接地理上分散的网络:如企业之间的连接或远程访问。

1. 创建隧道

(1) GRE 隧道

GRE(Generic Routing Encapsulation)是一种通用的隧道协议,可以封装各种协议的数据包。

  • 创建 GRE 隧道

    ip tunnel add mytun mode gre remote <远程IP> local <本地IP> ttl 255
    

    其中:

    • mytun 是隧道接口的名称。
    • remote 指定远端隧道端点的 IP 地址。
    • local 指定本地隧道端点的 IP 地址。
    • ttl 设置隧道数据包的 TTL 值,默认为 255。

    示例:

    ip tunnel add mytun mode gre remote 192.168.1.2 local 192.168.1.1 ttl 255
    
  • 启用隧道接口
    创建隧道后,还需要启用该接口:

    ip link set mytun up
    
  • 为隧道接口分配 IP 地址
    可以为隧道接口分配 IP 地址,以便通过隧道通信:

    ip address add 10.0.0.1/30 dev mytun
    
(2) IPIP 隧道

IPIP(IP in IP)是一种简单的隧道技术,仅封装 IP 数据包。

  • 创建 IPIP 隧道

    ip tunnel add mytun mode ipip remote <远程IP> local <本地IP>
    

    示例:

    ip tunnel add mytun mode ipip remote 192.168.1.2 local 192.168.1.1
    
  • 启用并配置隧道接口
    同样需要启用接口,并为其分配 IP 地址:

    ip link set mytun up
    ip address add 10.0.0.1/30 dev mytun
    
(3) 其他隧道类型

除了 GRE 和 IPIP,还有其他类型的隧道:

  • SIT(Simple Internet Transition):用于 IPv6-in-IPv4 隧道。

    ip tunnel add sit1 mode sit remote 192.168.1.2 local 192.168.1.1
    
  • VXLAN:虚拟扩展局域网,常用于数据中心网络。

    ip link add vxlan1 type vxlan id 42 group 239.1.1.1 dev eth0
    

2. 查看和管理隧道

(1) 查看所有隧道

使用以下命令列出所有已创建的隧道:

ip tunnel show
(2) 删除隧道

要删除一个隧道,可以使用 del 命令:

ip tunnel del mytun
(3) 修改隧道属性

在某些情况下,可能需要修改现有隧道的属性。例如,更改远程端点 IP 地址:

ip tunnel change mytun remote 192.168.1.3

3. 路由与隧道

为了让流量通过隧道传输,通常需要配置相应的路由规则。例如,如果希望通过 GRE 隧道传输到某个子网的流量,可以添加如下路由规则:

ip route add 172.16.1.0/24 dev mytun

这将确保目标地址为 172.16.1.0/24 的流量会通过 mytun 隧道接口发送。

4. 持久化隧道配置

默认情况下,使用 ip tunnel 创建的隧道配置在系统重启后会丢失。为了使隧道配置持久化,可以通过以下方式之一实现:

(1) 手动编辑网络配置文件

对于基于 /etc/network/interfaces 的系统(如 Debian/Ubuntu),可以在配置文件中添加隧道定义:

auto mytun
iface mytun inet static
    pre-up ip tunnel add mytun mode gre remote 192.168.1.2 local 192.168.1.1 ttl 255
    address 10.0.0.1
    netmask 255.255.255.252
    post-down ip tunnel del mytun
(2) 使用 NetworkManager

对于使用 NetworkManager 的系统,可以通过 nmcli 或图形界面工具配置隧道。

示例:

nmcli connection add type ip-tunnel con-name mytun ifname mytun mode gre remote 192.168.1.2 local 192.168.1.1 ipv4.addresses 10.0.0.1/30
(3) 使用 systemd-networkd

对于使用 systemd-networkd 的系统,可以在 .netdev 文件中定义隧道。

创建 /etc/systemd/network/mytun.netdev 文件:

[NetDev]
Name=mytun
Kind=gre

[Tunnel]
Local=192.168.1.1
Remote=192.168.1.2

创建 /etc/systemd/network/mytun.network 文件:

[Match]
Name=mytun

[Network]
Address=10.0.0.1/30

然后重启 systemd-networkd 服务:

sudo systemctl restart systemd-networkd

5. 应用场景

不同的隧道模式适用于不同的应用场景:

隧道模式适用场景特点
GRE跨域传输、增强安全性多协议支持,不提供加密,可与 IPSec 结合使用
IPIP简单的点对点连接仅支持 IPv4 封装,开销小
SITIPv6 过渡支持 IPv6 在 IPv4 网络上传输
VTI站点到站点的 VPN提供加密和认证功能,安全性高
VXLAN数据中心网络支持大规模的二层网络覆盖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值