2.3 | kubernetes: Linux 常用网络命令的使用

ifconfig

ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是重启后会失效。

命令概览

  • -a:显示所有网络设备
  • -s:显示简要信息
  • <interface> <operation> <parameters>:操作对应网卡
    • up:启用网卡
    • down:关闭网卡
    • txqueuelen <NN>:设置网卡传输队列长度
    • mtu <NN>:设置网卡最大传输单元
    • add <address>[/<prefixlen>]:设置网卡地址
      • del <address>[/<prefixlen>]:删除网卡地址
      • netmask <address>:设置子网掩码
      • tunnel <address>:网卡建立到 address 的隧道
      • hw <HW> <address>:设置网卡 MAC 地址

输出信息示例

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.214.5 netmask 255.255.255.0 broadcast 172.16.214.255
inet6 fe80::fd8f:e0f5:1f03:57ac prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ee:fe:e0 txqueuelen 1000 (Ethernet)
RX packets 76848 bytes 54358432 (54.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 72546 bytes 52701758 (52.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

$ ifconfig -s ens33
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33 1500 76956 0 0 0 72673 0 0 0 BMRU

字段解析

  • ens33:网卡名称,例 lo 为 loopback 的名称
  • flags:
    • 4163 = 0x1043 = 0x1000 + 0x40 + 0x2 + 0x1
    • UP 0x1
    • RUNNING 0x40
    • BROADCAST 0x2
    • MULTICAST 0x1000
  • IPv4
    • inet IPv4 地址
    • netmask 子网掩码
    • broadcast 广播地址
  • IPv6
    • inet6 IPv6 地址
    • prefixlen
    • scopeid
  • ether:网卡硬件地址,即 MAC 地址
  • txqueuelen:传输数据的缓冲区的储存长度
  • RX & TX 共有字段
    • packets 数据包数
    • bytes 总数据量
    • errors 数据包发生错误的数量
    • dropped 数据包由于有问题而遭丢弃的数量
    • overruns
  • RX:数据包接收情况(由启动到目前为止)
    • frame
  • TX:数据包传送情况(由启动到目前为止)
    • collisions 数据包碰撞的情况。太多次,表示网络状况不好
    • carrier

示例

route

route 命令可以显示或设置 Linux 内核中的路由表,主要是静态路由。

对于局域网中的 Linux 主机,要想访问 Internet,需要将局域网的网关 IP 地址设置为这个主机的默认路由。

在命令行中通过 route 命令添加的路由在网卡重启或机器重启后失效。可以在 /etc/rc.local 中添加 route 命令来保证路由设置永久有效。

通过 route 命令查看 Linux 内核的路由表(等同于 netstat -r):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# feivxs @ k8s-node-3 in ~ [18:00:22]
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 ens33
172.16.214.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 172.16.214.2 255.255.255.255 UGH 0 0 0 tunl0
192.168.0.0 172.16.214.2 255.255.255.0 UG 0 0 0 tunl0
192.168.1.0 - 255.255.255.0 ! 0 - 0 -
192.168.2.0 - 255.255.255.0 ! 0 - 0 -
192.168.3.0 - 255.255.255.0 ! 0 - 0 -
192.168.76.128 0.0.0.0 255.255.255.192 U 0 0 0 *
192.168.76.137 0.0.0.0 255.255.255.255 UH 0 0 0 calie2066d21eda
192.168.76.138 0.0.0.0 255.255.255.255 UH 0 0 0 cali3ef2c7cdd89
192.168.76.139 0.0.0.0 255.255.255.255 UH 0 0 0 calic440f455693
192.168.109.64 172.16.214.3 255.255.255.192 UG 0 0 0 tunl0
192.168.140.64 172.16.214.4 255.255.255.192 UG 0 0 0 tunl0
192.168.235.192 172.16.214.2 255.255.255.192 UG 0 0 0 tunl0

字段含义

含义
Destination 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1)
Gateway 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关
Genmask Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0
Flags 标记,含义参考表格后面的解释
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。)
Ref 路由项引用次数 (不在Linux内核中使用。)
Use 此路由项被路由软件查找的次数
Iface 网卡名字,例如 eth0

Flags 含义:

  • U 路由是活动的
  • H 目标是个主机
  • G 需要经过网关
  • R 恢复动态路由产生的表项
  • D 由路由的后台程序动态地安装
  • M 由路由的后台程序修改
  • ! 拒绝路由

Linux 内核的路由种类

  1. 主机路由

路由表中指向单个 IP 地址或主机名的路由记录,其 Flags 字段为 H。下面示例中,对于 10.0.0.10 这个主机,通过网关 10.139.128.1 网关路由:

1
2
3
4
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth0
  1. 网络路由

主机可以到达的网络。下面示例中,对于 10.0.0.0/24 这个网络,通过网关 10.139.128.1 网关路由:

1
2
3
4
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 10.139.128.1 255.255.255.0 UG 0 0 0 eth0
  1. 默认路由

当目标主机的 IP 地址或网络不在路由表中时,数据包就被发送到默认路由(默认网关)上。默认路由的 Destination 是 default 或 0.0.0.0。

1
2
3
4
[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth0

命令选项

  • -A:设置地址类型
  • -C:打印 Linux 内核的路由缓存
  • -v:显示详细信息
  • -n:不执行 DNS 反向查找,直接显示数字形式的 IP 地址
  • -e:netstat 格式显示路由表
  • -net:到一个网络的路由表
  • -host:到一个主机的路由表

命令参数

  • add:增加路由记录
  • del:删除路由记录
  • target:目的网络或目的主机
  • gw:设置默认网关
  • mss:设置TCP的最大区块长度(MSS),单位MB
  • window:指定通过路由表的TCP连接的TCP窗口大小
  • dev:路由记录所表示的网络接口

ip

ip 几乎可以替代 routeifconfig 命令,输出内容也比较类似。

  • ip address/ip a
1
2
3
4
5
6
7
8
9
10
11
12
13
# feivxs @ k8s-node-3 in ~ [21:21:23] C:255
$ ip -s -h address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ee:fe:e0 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 172.16.214.5/24 brd 172.16.214.255 scope global dynamic noprefixroute ens33
valid_lft 53810sec preferred_lft 53810sec
inet6 fe80::fd8f:e0f5:1f03:57ac/64 scope link noprefixroute
valid_lft forever preferred_lft forever
RX: bytes packets errors dropped overrun mcast
80.0M 138k 0 0 0 0
TX: bytes packets errors dropped carrier collsns
113M 149k 0 0 0 0

字段与 ifconfig 基本类似。

  • ip route/ip r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ip route
default via 172.16.214.1 dev ens33 proto dhcp metric 100
169.254.0.0/16 dev ens33 scope link metric 1000
172.16.214.0/24 dev ens33 proto kernel scope link src 172.16.214.5 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.0.0 via 172.16.214.2 dev tunl0 proto bird onlink
192.168.0.0/24 via 172.16.214.2 dev tunl0 proto bird onlink
unreachable 192.168.1.0/24 proto bird
unreachable 192.168.2.0/24 proto bird
unreachable 192.168.3.0/24 proto bird
blackhole 192.168.76.128/26 proto bird
192.168.76.137 dev calie2066d21eda scope link
192.168.76.138 dev cali3ef2c7cdd89 scope link
192.168.76.139 dev calic440f455693 scope link
192.168.109.64/26 via 172.16.214.3 dev tunl0 proto bird onlink
192.168.140.64/26 via 172.16.214.4 dev tunl0 proto bird onlink
192.168.235.192/26 via 172.16.214.2 dev tunl0 proto bird onlink
  • proto:路由协定
    • redirect 路由是由ICMP重定向加入的
    • kernel 路由是由内核在自动配置期间加入的
    • boot 路由是启动过程中加入的,如果一个路由监控程序将要启动,这些路由都会被清除;
    • static 为了覆盖动态路由,由系统管理员手工添加的路由。路由监控程序也会优先考虑这类路由,甚至可能通告给其对端;
    • ra 路由是通过路由发现协议加入的 (Router Discovery Protocol)
  • scope:路由的范围
    • link 与本设备有关的直接连接

brctl

Reference

2.3 | kubernetes: Linux 常用网络命令的使用

https://eucham.me/2021/10/16/983672269a29.html

作者

遇寻

发布于

2021-10-16

更新于

2022-04-21

许可协议

评论