ip
命令是 Linux 系统中用于网络配置的强大工具,它取代了旧的 ifconfig
、route
和 arp
等命令。ip
命令提供了对网络接口、路由表、邻居对象(ARP 缓存)、隧道等的管理功能。以下是关于 ip
命令的详细解析。
基本语法
ip [ OPTIONS ] OBJECT { COMMAND | help }
- OPTIONS:包括
-s
(显示统计信息)、-f
(强制使用特定协议族如 inet、inet6)等。 - OBJECT:指要操作的对象类型,例如
address
、link
、route
、neigh
、tunnel
等。 - COMMAND:对指定对象执行的操作,如
add
、del
、show
等。
地址管理
地址管理概述
地址管理涉及为网络接口分配 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:对链路执行的操作命令,如
show
、set
等。
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) 流量控制 (qdisc
和 tc
)
虽然严格来说不属于 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 change
和 ip 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
)
可以定义路由的作用范围,如 global
、link
、host
等。
- 设置作用域:
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 封装,开销小 |
SIT | IPv6 过渡 | 支持 IPv6 在 IPv4 网络上传输 |
VTI | 站点到站点的 VPN | 提供加密和认证功能,安全性高 |
VXLAN | 数据中心网络 | 支持大规模的二层网络覆盖 |