01 IP 命令用法归纳
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.0.24/24 brd 192.168.0.255 scope global dynamic enp0s25
valid_lft 57295sec preferred_lft 57295sec
inet6 fe80::2c8e:1de0:a862:14fd/64 scope link
valid_lft forever preferred_lft forever
如果你想知道为什么它在这个系统上被称为 enp0s25,而不是可能更熟悉的 eth0,那我们可以稍微解释一下。
新的命名方案被称为“ 可预测的网络接口(Predictable Network Interface)”。 它已经在基于systemd 的 Linux 系统上使用了一段时间了。 接口名称取决于硬件的物理位置。 en 仅仅就是 “ethernet” 的意思,就像 “eth” 用于对应 eth0,一样。 p 是以太网卡的总线编号,s 是插槽编号。 所以 enp0s25 告诉我们很多我们正在使用的硬件的信息。
<BROADCAST,MULTICAST,UP,LOWER_UP> 这个配置串告诉我们:
BROADCAST 该接口支持广播
MULTICAST 该接口支持多播
UP 网络接口已启用
LOWER_UP 网络电缆已插入,设备已连接至网络
列出的其他值也告诉了我们很多关于接口的知识,但我们需要知道 brd 和 qlen 这些词代表什么意思。 所以,这里显示的是上面展示的 ip 信息的其余部分的翻译。
mtu 1500 最大传输单位(数据包大小)为1,500字节
qdisc pfifo_fast 用于数据包排队
state UP 网络接口已启用
group default 接口组
qlen 1000 传输队列长度
link/ether 00:1e:4f:c8:43:fc 接口的 MAC(硬件)地址
brd ff:ff:ff:ff:ff:ff 广播地址
inet 192.168.0.24/24 IPv4 地址
brd 192.168.0.255 广播地址
scope global 全局有效
dynamic enp0s25 地址是动态分配的
valid_lft 80866sec IPv4 地址的有效使用期限
preferred_lft 80866sec IPv4 地址的首选生存期
inet6 fe80::2c8e:1de0:a862:14fd/64 IPv6 地址
scope link 仅在此设备上有效
valid_lft forever IPv6 地址的有效使用期限
preferred_lft forever IPv6 地址的首选生存期
您可能已经注意到,ifconfig 命令提供的一些信息未包含在 ip a 命令的输出中 —— 例如传输数据包的统计信息。 如果您想查看发送和接收的数据包数量以及冲突数量的列表,可以使用以下 ip 命令:
$ ip -s link show enp0s25
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
224258568 418718 0 0 0 84376
TX: bytes packets errors dropped carrier collsns
6131373 78152 0 0 0 0
另一个 ip 命令提供有关系统路由表的信息。
$ ip route show
default via 192.168.0.1 dev enp0s25 proto static metric 100
169.254.0.0/16 dev enp0s25 scope link metric 1000
192.168.0.0/24 dev enp0s25 proto kernel scope link src 192.168.0.24 metric 100
ip 命令是非常通用的。 您可以从 ip 命令及其来自Red Hat的选项获得有用的备忘单。
比如所有网卡上传输的字节数和报文数,错误或丢弃的报文数等
#ip -s link show [dev <接口名>] #不指定接口则显示所有接口的详细统计。
#ip -d -s -s link show [dev <接口名>]
$ ip -s link show enp0s25
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
224258568 418718 0 0 0 84376
TX: bytes packets errors dropped carrier collsns
6131373 78152 0 0 0 0
[root: ~]# ip -d -s -s link show ens34
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 88:32:9b:ca:3f:4a brd ff:ff:ff:ff:ff:ff promiscuity 0 addrgenmode eui64
RX: bytes packets errors dropped overrun mcast
581645 6100 0 0 0 0
RX errors: length crc frame fifo missed
0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3743584 3939 0 0 0 0
TX errors: aborted fifo window heartbeat transns
0 0 0 0 2
ip [-6] addr show [dev <接口名>] #不指定接口则显示所有接口的 IPV4/IPV6 地址。简写:ip a
[root: ~]# ip addr add 192.168.1.111/24 dev ens34
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 88:32:9b:ca:3f:4a brd ff:ff:ff:ff:ff:ff
inet 10.16.1.2/24 brd 10.16.1.255 scope global ens34
valid_lft forever preferred_lft forever
inet 192.168.1.111/24 scope global ens34
valid_lft forever preferred_lft forever
inet6 fe80::f65c:89ff:fecd:3ab5/64 scope link
valid_lft forever preferred_lft forever
为网卡分配 IP 地址以及其他网络信息
ip [-6] addr add <IP 地址/前缀长度> [broadcast <广播地址>] dev <接口名>
[linuxtechi@localhost]$ sudo ip addr add 192.168.0.50/255.255.255.0 dev enp0s3 #设置ip地址
[linuxtechi@localhost]$ sudo ip addr add broadcast 192.168.0.255 dev enp0s3 # 设置广播地址
[linuxtechi@localhost]$ sudo ip addr add 192.168.0.10/24 brd + dev enp0s3 #根据 IP 地址设置标准的广播地址
对应的ifconfig命令:
ifconfig eth0 add 192.168.0.50
ip [-6] addr del <IP 地址/前缀长度> dev <接口名>
[linuxtechi@localhost]$ sudo ip addr del 192.168.0.10/24 dev enp0s3
对应的ifconfig命令:
$ ifconfig eth0 del 192.9.203.21
假设网卡名为 enp0s3
[linuxtechi@localhost]$ sudo ip addr add 192.168.0.20/24 dev enp0s3 label enp0s3:1
ip link set <接口名> up
[linuxtechi@localhost]$ sudo ip link set enp0s3 up
ip link set <接口名> down
[linuxtechi@localhost]$ sudo ip link set enp0s3 down
设置前请先禁用接口。
ip link set <接口名> address <值>
设置前请先禁用接口。
ip link set <接口名> mtu <值>
#把 ens33 的 MTU 改成 9000 并检查。
[root: ~]# ip link show dev ens33 #修改前
2: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
link/ether 88:32:9b:ca:3f:49 brd ff:ff:ff:ff:ff:ff
[root: ~]# ip link set ens33 mtu 9000
[root: ~]# ip link show dev ens33 #修改后
2: ens33: <BROADCAST,MULTICAST> mtu 9000 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
link/ether 88:32:9b:ca:3f:49 brd ff:ff:ff:ff:ff:ff
对于 ip,使用 set 子命令与设备(dev)以及一个布尔值和 multicast 选项:
# ip link set dev eth0 multicast on
对应的ifconfig命令:
# ifconfig eth0 multicast
使用 ip,你可以将 arp 属性设置为 on 或 off:
# ip link set dev eth0 arp on
对应的ifconfig命令:
# ifconfig eth0 arp
ip link add link <接口名> name <子接口名> type vlan id <VLAN ID>
# 为 ens33 添加 VLAN100 子接口并检查。
[root: ~]# ip link add link ens33 name ens33.100 type vlan id 100
[root: ~]# ip -d -s -s link show ens33.100
7: ens33.100@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT qlen 1000
link/ether 88:32:9b:ca:3f:aa brd ff:ff:ff:ff:ff:ff promiscuity 0
vlan protocol 802.1Q id 100 <REORDER_HDR> addrgenmode eui64
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
RX errors: length crc frame fifo missed
0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
738 9 0 0 0 0
TX errors: aborted fifo window heartbeat transns
0 0 0 0 3
ip link del <接口名>
不指定接口则显示所有接口的路由表。
ip route show [dev <接口名>]
ip route get <目标 IP>
#查看目标地址为 8.8.8.8 用的是哪条路由表。
[root: ~]# ip route get 8.8.8.8
8.8.8.8 via 192.168.1.1 dev ens33 src 192.168.1.143
cache
#下一跳是 192.168.1.1,出接口是 ens33,接口的 IP 是 192.168.1.143。
ip route add <目标 IP 地址/前缀长度> via <下一跳> [dev <出接口>]
ip route add default via <默认网关> [dev <出接口>]
[linuxtechi@localhost]$ sudo ip route add default via 192.168.0.150/24
#若要修改某个网卡的默认路由,通过via 192.168.0.150/24定位路由条目
[linuxtechi@localhost]$ sudo ip route add 172.16.32.32 via 192.168.0.150/24 dev enp0s3
ip route del <目标 IP 地址/前缀长度> via <下一跳> [dev <出接口>]
[linuxtechi@localhost]$ sudo ip route del 192.168.0.150/24
注意: 用上面方法修改的默认路由只是临时有效的,在系统重启后所有的改动都会丢失。要永久修改路由,需要修改或创建 route-enp0s3 文件。将下面这行加入其中:
[linuxtechi@localhost]$ sudo vi /etc/sysconfig/network-scripts/route-enp0s3
172.16.32.32 via 192.168.0.150/24 dev enp0s3
保存并退出该文件。
若你使用的是基于 Ubuntu 或 debian 的操作系统,则该要修改的文件为 /etc/network/interfaces,然后添加 ip route add 172.16.32.32 via 192.168.0.150/24 dev enp0s3 这行到文件末尾。
不指定接口则显示所有接口的 ARP 表。
ip neigh show [dev <接口名>]
ip neigh add <IP 地址> lladdr <以冒号分割的 MAC 地址> dev <接口名> nud permanent
[linuxtechi@localhost]$ sudo ip neigh add 192.168.0.106 lladdr 33:1g:75:37:r3:84 dev enp0s3
ip neigh change <IP 地址> dev <接口名> nud permanent
[linuxtechi@localhost]$ sudo ip neigh add 192.168.0.150 lladdr 33:1g:75:37:r3:84 dev enp0s3 nud perm
这里 nud 的意思是 “neghbour state”(网络邻居状态),它的值可以是:
perm- 永久有效并且只能被管理员删除noarp- 记录有效,但在生命周期过期后就允许被删除了stale- 记录有效,但可能已经过期reachable- 记录有效,但超时后就失效了
ip neigh del <IP 地址> dev <接口名>
[linuxtechi@localhost]$ sudo ip neigh del 192.168.0.106 dev enp0s3
ip neigh flush all
ip link show master docker0