Linux ip 命令示例
我是一个新的 Linux 系统管理员用户。如何使用 ip 命令行实用程序在 Linux 操作系统上显示或配置网络、路由和隧道?如何在 Linux 操作系统上使用 TCP/IP 配置或显示网络接口参数?
ip命令用于在 Linux 操作系统上为网络接口分配地址和/或配置网络接口参数。此命令取代了现代 Linux 发行版中旧的、现已弃用的 ifconfig 命令。
ip 命令详细信息 | |
---|---|
描述 | 网络配置 |
类别 | 网络实用程序 |
难度等级 | 简单的 |
Root 权限 | 是的 |
操作系统兼容性 | Alma • Alpine • Arch • CentOS • Debian • Fedora • Linux • Mint • RHEL • Rocky • Stream • Ubuntu |
预计阅读时间 | 8 分钟 |
目的
使用 ip 命令显示和配置主机接口的网络参数:
1.找出系统上配置了哪些接口。2
.查询 IP 接口的状态。3
.配置本地环回、以太网和其他 IP 接口。4
.将接口标记为启动或关闭。5
.配置和修改默认和静态路由。6
.设置 IP 隧道。7
.显示 ARP 或 NDISC 缓存条目。8
.为 IP 接口分配、删除、设置 IP 地址、路由、子网和其他 IP 信息。9
.列出 IP 地址和属性信息。10
.管理和显示所有网络的状态。11
.收集多播 IP 地址信息。12
.显示邻居对象(即 ARP 缓存)、使 ARP 缓存无效、向 ARP 缓存添加条目等。13
.设置或删除路由条目。14
.查找地址(例如 8.8.8.8 或 192.168.2.24)将采用的路由。
15.修改接口状态。
句法
$ ip OBJECT COMMAND
$ ip [options] OBJECT COMMAND
$ ip OBJECT help
了解 ip 命令对象语法
OBJECTS 可以是下列任一种,并且可以以完整形式或缩写形式书写:
目的 | 缩写形式 | 目的 |
link | l | 网络设备。 |
address | a addr |
设备上的协议(IP 或 IPv6)地址。 |
addrlabel | addrl | 协议地址选择的标签配置。 |
neighbour | n neigh |
ARP 或 NDISC 缓存条目。 |
route | r | 路由表条目。 |
rule | ru | 路由策略数据库中的规则。 |
maddress | m maddr |
多播地址。 |
mroute | mr | 多播路由缓存条目。 |
tunnel | t | 通过 IP 建立隧道。 |
xfrm | x | IPsec 协议框架。 |
要获取有关每个对象的信息,请使用如下帮助命令:
$ ip OBJECT help
$ ip OBJECT h
$ ip a help
$ ip r help
警告:下面描述的命令必须小心执行。如果你犯了一个错误,你将失去与服务器的连接。在基于 ssh 的远程会话上工作时必须特别小心。
ip 命令示例
不要被 ip 命令语法吓到。让我们通过示例快速入门。
显示有关所有网络接口的信息
键入以下命令列出并显示所有网络接口上关联的所有 IP 地址:
$ ip a
或
$ ip addr
图 01 使用 ip 命令显示分配给 eth0、eth1、lo 的 IP 地址
### Only show TCP/IP IPv4 ## ip -4 a ### Only show TCP/IP IPv6 ### ip -6 a
还可以指定并列出特定接口的 TCP/IP 详细信息:
### Only show eth0 interface ### ip a show eth0 ip a list eth0 ip a show dev eth0 ### Only show running interfaces ### ip link show up
为接口分配 IP 地址
添加 IPv4/IPv6 地址的语法如下:
# ip a add {ip_addr/mask} dev {interface}
要将 192.168.1.200/255.255.255.0 分配给 eth0,请输入:
# ip a add 192.168.1.200/255.255.255.0 dev eth0
或
# ip a add 192.168.1.200/24 dev eth0
在接口上添加广播地址
默认情况下,除非明确请求,否则 ip 命令不会设置任何广播地址。因此,设置广播地址的语法如下:
可以通过设置/重置接口前缀的主机位来使用特殊符号(例如和 )代替广播地址。在此示例中,将地址 192.168.1.50 与网络掩码 255.255.255.0 (/24) 以及标准广播和标签“eth0Home”添加到接口 eth0:
您可以按如下方式将环回地址设置为环回设备 lo:
# ip addr add brd {ADDDRESS-HERE} dev {interface}
# ip addr add broadcast {ADDDRESS-HERE} dev {interface}
# ip addr add broadcast 172.20.10.255 dev dummy0
+-
# ip addr add 192.168.1.50/24 brd + dev eth0 label eth0Home
# ip addr add 127.0.0.1/8 dev lo brd + scope host
从接口移除/删除 IP 地址
删除 IPv4/IPv6 地址的语法如下:
# ip a del {ipv6_addr_OR_ipv4_addr} dev {interface}
要从 eth0 中删除 192.168.1.200/24,请输入:
# ip a del 192.168.1.200/24 dev eth0
从接口中清除 IP 地址
您可以按上述方法逐个删除或远程 IPv4/IPv6 地址。但是,flush 命令可以根据给定条件删除或刷新 IP 地址。例如,您可以使用以下命令从私有网络 192.168.2.0/24 中删除所有 IP 地址:
# ip -s -s a f to 192.168.2.0/24
示例输出:
2: eth0 inet 192.168.2.201/24 scope global secondary eth0 2: eth0 inet 192.168.2.200/24 scope global eth0 *** Round 1, deleting 2 addresses *** *** Flush is complete after 1 round ***
您可以禁用所有 ppp(点对点)接口上的 IP 地址:
# ip -4 addr flush label "ppp*"
以下是所有以太网接口的另一个示例:
# ip -4 addr flush label "eth*"
如何将设备状态更改为 UP 或 DOWN?
语法如下:
# ip link set dev {DEVICE} {up|down}
要使设备 eth1 的状态为 down,请输入:
# ip link set dev eth1 down
要使设备 eth1 的状态为 up,请输入:
# ip link set dev eth1 up
如何更改设备的 txqueuelen?
您可以使用 ifconfig 命令或 ip 命令设置设备的传输队列的长度,
# ip link set txqueuelen {NUMBER} dev {DEVICE}
如下所示:
在此示例中,将 eth0 的默认 txqueuelen 从 1000 更改为 10000:
# ip link set txqueuelen 10000 dev eth0
$ ip a list eth0
如何更改设备的 MTU?
对于千兆网络,您可以设置最大传输单元 (MTU)大小 (JumboFrames) 以获得更好的网络性能。语法是:
# ip link set mtu {NUMBER} dev {DEVICE}
要将设备 eth0 的 MTU 更改为 9000,请输入:
示例输出:
# ip link set mtu 9000 dev eth0
$ ip a list eth0
2: eth0:mtu 9000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:08:9b:c4:30:30 brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1 inet6 fe80::208:9bff:fec4:3030/64 scope link valid_lft forever preferred_lft forever
显示邻居/arp 缓存
语法是:
示例输出(注意:我用字母掩盖了一些数据):
$ ip n show
$ ip neigh show
74.xx.yy.zz dev eth1 lladdr 00:30:48:yy:zz:ww REACHABLE 10.10.29.66 dev eth0 lladdr 00:30:48:c6:0a:d8 REACHABLE 74.ww.yyy.xxx dev eth1 lladdr 00:1a:30:yy:zz:ww REACHABLE 10.10.29.68 dev eth0 lladdr 00:30:48:33:bc:32 REACHABLE 74.fff.uu.cc dev eth1 lladdr 00:30:48:yy:zz:ww STALE 74.rr.ww.fff dev eth1 lladdr 00:30:48:yy:zz:ww DELAY 10.10.29.65 dev eth0 lladdr 00:1a:30:38:a8:00 REACHABLE 10.10.29.74 dev eth0 lladdr 00:30:48:8e:31:ac REACHABLE
最后一个字段显示此条目的“邻居不可达检测”机器的状态:
- STALE—邻居有效,但可能已经无法访问,因此内核将在第一次传输时尝试检查它。
- 延迟——数据包已发送给陈旧的邻居,内核正在等待确认。
- 可到达— 邻居有效并且可以到达。
添加新的 ARP 条目
语法是:
# ip neigh add {IP-HERE} lladdr {MAC/LLADDRESS} dev {DEVICE} nud {STATE}
在此示例中,在设备 eth0 上为邻居 192.168.1.5 添加永久 ARP 条目:
# ip neigh add 192.168.1.5 lladdr 00:1a:30:38:a8:00 dev eth0 nud perm
其中,
邻国 (nud) | 意义 |
permanent | 邻居条目永远有效,只能通过管理方式删除 |
noarp | 邻居条目有效。不会尝试验证此条目,但在其生命周期到期后可以将其删除。 |
stale | 邻居条目有效但可疑。如果邻居条目有效且地址未被此命令更改,则 ip neigh 的此选项不会更改邻居状态。 |
reachable | 邻居条目在可达性超时到期之前一直有效。 |
删除 ARP 条目
使设备 eth1 上邻居 192.168.1.5 的 ARP 条目无效或删除的语法如下。
# ip neigh del {IPAddress} dev {DEVICE}
# ip neigh del 192.168.1.5 dev eth1
将设备 eth1 上的邻居 192.168.1.100 的状态更改为可访问
# ip neigh chg 192.168.1.100 dev eth1 nud reachable
刷新 ARP 表项
此 flush 或 f 命令通过指定某些条件来刷新邻居/arp 表。语法为:
# ip -s -s n f {IPAddress}
在此示例中,flush neighbour/arp table
# ip -s -s n f 192.168.1.5
或
# ip -s -s n flush 192.168.1.5
ip route:路由表管理命令
使用以下命令来管理或操作内核路由表。
显示路由表
显示路由表的内容:
示例输出:
$ ip r
$ ip r list
$ ip route list
$ ip r list [options]
$ ip route
default via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
显示 192.168.1.0/24 的路由:
$ ip r list 192.168.1.0/24
示例输出:
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
添加新路线
语法是:通过网关 192.168.1.254
添加到网络 192.168.1.0/24 的普通路由:
要通过 eth0 网络接口连接的 192.168.1.254 网关路由所有流量:
# ip route add {NETWORK/MASK} via {GATEWAYIP}
# ip route add {NETWORK/MASK} dev {DEVICE}
## Add default route using ip ##
# ip route add default {NETWORK/MASK} dev {DEVICE}
# ip route add default {NETWORK/MASK} via {GATEWAYIP}
# ip route add 192.168.1.0/24 via 192.168.1.254
# ip route add 192.168.1.0/24 dev eth0
删除路线
删除默认网关的语法如下:在此示例中,删除上一小节
# ip route del default
中创建的路由:
# ip route del 192.168.1.0/24 dev eth0
如何在 Linux 上更改 MAC 地址
Linux 网卡 MAC 地址的修改方法如下:
NIC="eno1" ## <-- My NIC name ##
$ ip link show $NIC
# ip link set dev $NIC down
## set new MAC address ##
# ip link set dev $NIC address XX:YY:ZZ:AA:BB:CC
# ip link set dev $NIC up
配置颜色输出
我们可以通过传递以下选项使 ip 命令输出更美观-c:
ip -c route ip -c link # The 'always' is default and color output is enabled regardless of stdout state ip -c=always command1 # If parameter is 'auto', stdout is checked to be a terminal before enabling color output ip -c=auto command2 # If parameter is 'never', color output is disabled ip -c=never command3
请注意,如果-json选项传递给 ip 命令,则此标志将被忽略。我们可以使用alias 命令在 Linux 上创建永久的 Bash 别名:
alias ip='ip -c' alias ipc='ip -c' # run it # ipc route ip link
我们可以在运行 ip 时忽略 bash 别名和函数,如下所示:
\ip route command ip link
显示所有 Linux IP 地址
想要找出分配给所有接口的 IP 地址并仅显示 IP?尝试:
$ sudo ip -br -c addr show
$ sudo ip -br -c link show
新旧工具对比
已弃用的 Linux 命令及其替代备忘单:
旧命令(已弃用) | 新命令 |
---|---|
ifconfig enp6s0 down | ip link set enp6s0 down |
ifconfig enp6s0 up | ip link set enp6s0 up |
ifconfig enp6s0 192.168.2.24 | ip addr add 192.168.2.24/24 dev enp6s0 |
ifconfig enp6s0 netmask 255.255.255.0 | ip addr add 192.168.1.1/24 dev enp6s0 |
ifconfig enp6s0 mtu 9000 | ip link set enp6s0 mtu 9000 |
ifconfig enp6s0:0 192.168.2.25 | ip addr add 192.168.2.25/24 dev enp6s0 |
netstat | ss |
netstat -tulpn | ss -tulpn |
netstat -neopa | ss -neopa |
netstat -g | ip maddr |
route | ip r |
route add -net 192.168.2.0 netmask 255.255.255.0 dev enp6s0 | ip route add 192.168.2.0/24 dev enp6s0 |
route add default gw 192.168.2.254 | ip route add default via 192.168.2.254 |
arp -a | ip neigh |
arp -v | ip -s neigh |
arp -s 192.168.2.33 1:2:3:4:5:6 | ip neigh add 192.168.3.33 lladdr 1:2:3:4:5:6 dev enp6s0 |
arp -i enp6s0 -d 192.168.2.254 | ip neigh del 192.168.2.254 dev wlp7s0 |
总结
您了解了 SUSE、OpenSUSE、RHEL(CentOS Stream、RockyLinux、AlmaLinux、Springdale)、Debian、Ubuntu、Linux Mint、Arch、Gentoo 和其他 Linux 发行版上的 ip 命令。使用 man 命令或 help 命令查看以下手册页:
$ man ip
$ ip --help
# sub command help syntax #
$ ip link help
$ ip link help
$ ip address help