[TOC]

0x00 快速入门

前言:主要针对于Linux中网络/路由/通信通道类命令进行学习,加深对Linux的使用;

0X01 网络配置

nmcli 命令

描述:NetworkManager是2004年Red Hat启动的项目,旨在能够让Linux用户更轻松地处理现代网络需求,尤其是无线网络,能自动发现网卡并配置ip地址。类似在手机上同时开启wifi和蜂窝网络,自动探测可用网络并连接,无需手动切换。

补充说明:

  • RHEL7 / CentOS 中默认使用 NetworkManager 守护进程来监控和管理网络设置,并且在rhel7中是基于会话(connection)的,一个网卡可以有多个会话,但是同时只允许一个会话处于激活(active)状态。
  • RHEL8 / CentOS8中采用nmcli是命令行的管理NetworkManager的工具,会自动把配置写到/etc/sysconfig/network-scripts/目录下面,注意在redhat8版本中network.services 已被取消。


Q:为什么要用NM?

  • ▷ 工具齐全:命令行、文本界面、图形界面、web
  • ▷ 广纳天地:纳管各种网络,有线、无线、物理、虚拟
  • ▷ 参数丰富:多达200多项配置参数(包括ethtool参数)
  • ▷ 一统江湖:RedHat系、Suse系、Debian/Ubuntu系,均支持
  • ▷ 大势所趋:rhel8只能通过NM管理网络

NM能管理各种网络:

  • ▷ 有线网卡、无线网卡
  • ▷ 动态ip、静态ip
  • ▷ 以太网、非以太网
  • ▷ 物理网卡、虚拟网卡

其它配置使用方法
▷ nmtui:在shell终端开启文本图形界面(值得使用方便简洁)。

WeiyiGeek.nmtui

WeiyiGeek.nmtui


▷ Freedesktop applet:如GNOME上自带的网络管理工具
▷ cockpit:redhat自带的基于web图形界面的”驾驶舱”工具,具有dashborad和基础管理功能。
WeiyiGeek. cockpit

WeiyiGeek. cockpit


网卡配置文件示例:/etc/sysconfig/network-scripts/ifcfg-eth0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
#常修改点如下
NAME=ens192
UUID=7afc67d5-b767-4d89-97b4-2558f8dc33c3
DEVICE=ens492
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.10.12
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS=114.114.114.114
DNS1=223.6.6.6


基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#nmcli使用方法非常类似linux ip命令、cisco交换机命令,并且支持tab补全
用法:nmcli [选项] OBJECT
选项:
-o[verview] # 概览模式(隐藏默认值)
-t[erse] # 简洁输出
-p[retty] # 整齐输出
-m[ode] tabular|multiline # 输出模式
-c[olors] auto|yes|no # 是否在输出中使用颜色
-e[scape] yes|no # 在值中转义列分隔符
-a[sk] # 询问缺少的参数
-s[how-secrets] # 允许显示密码
-w[ait] # 为完成的操作设置超时等待时间
-v[ersion] # 显示程序版本
-h[elp] # 输出此帮助

对象:
g[eneral] # 网络管理器(NetworkManager)的常规状态和操作
n[etworking] # 整体联网控制
r[adio] # 网络管理器无线电开关
c[onnection] # 网络管理器的连接 (关键点)
COMMAND := { show | up | down | add | modify | clone | edit | delete | monitor | reload | load | import | export }
d[evice] # 由网络管理器管理的设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)
a[gent] # 网络管理器的密钥(secret)代理或 polkit 代理
m[onitor] # 监视网络管理器更改

常用对象:

1
2
3
4
5
6
7
8
9
#connection有2种状态:
活跃(带颜色字体):表示当前该connection生效
非活跃(正常字体):表示当前该connection不生效

#device有4种常见状态:
connected:已被NM纳管,并且当前有活跃的connection
disconnected:已被NM纳管,但是当前没有活跃的connection
unmanaged:未被NM纳管
unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ens32 down)

Tips:

  • nmcli d(device):在nm中有两个维度即连接(connection)和设备(device),当网卡纳入NM管理后,多对一的关系可以为一个设备配置多个连接(查看:nmcli c),每个连接可以理解为一个ifcfg配置文件,但是同一时间只能有一个连接活跃(通过 nmcli c up切换连接)


基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#示例0. nmcli显示网卡配置设置情况
$nmcli
# eth0: connected to System eth0
# "Red Hat Virtio"
# ethernet (virtio_net), 00:16:3E:04:C7:0B, hw, mtu 1500
# ip4 default
# inet4 172.17.24.236/18
# route4 0.0.0.0/0
# route4 0.0.0.0/0
# route4 169.254.0.0/16
# route4 172.17.0.0/18
# route4 172.17.0.0/18


#示例1.查看被纳管的设备
$nmcli device || nmcli dev status
# DEVICE TYPE STATE CONNECTION(可以有多个连接对应一个设备)
# ens192 ethernet 已连接 ens192
# br-802abd4e0fb9 bridge 已连接 br-802abd4e0fb9
# docker0 bridge 已连接 docker0
# virbr0 bridge 已连接 virbr0
$nmcli d show #查看所有device详细信息
$nmcli d show ens192 #查看指定device的详细信息
$nmcli d reapply ens32 #专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错(立即生效)。
$nmcli d set ens32 autoconnect yes|no #设置是否自动连接
$nmcli d set ens32 managed yes|no #设置是否自动管理
#纳入与取消纳入管理
$nmcli d monitor ens192
$nmcli d delete ens192 #删除网卡
$nmcli d connect ens192 #激活网卡:由NM对指定网卡进行管理(类似于接上网卡网线),同时刷新该网卡对应的活跃connection
$nmcli d disconnect ens32 #N不管理指定网卡:(类似于拔掉网线),此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃。若重启系统则又会自动connect。


#示例2.网卡管理(CentOS8)connection可以简写
$nmcli connection show --active #查看当前活动的会话
# NAME(con-name) UUID TYPE DEVICE(iframe)
# ens192 c810ecfb-02b2-384a-afee-fe6765d7ee34 ethernet ens192
#查看网卡的UUID与网卡名称对应的设备名称:标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径
$nmcli c show ifcfg-ens192 # 查看connection详细信息
$nmcli c show ad608f46-911d-4b94-bfc6-2d2b6423b3ff
$nmcli c show /etc/sysconfig/network-scripts/ifcfg-ens192
# NAME UUID TYPE DEVICE
# ifcfg-ens192 ad608f46-911d-4b94-bfc6-2d2b6423b3ff ethernet ifcfg-ens192
# 有线连接 1 0fc240a9-0d6a-3322-b26d-f92e13afca1f ethernet enp0s8
# 有线连接 2 133c6109-52e2-3b45-a883-674652d15fdd ethernet enp0s9


#示例3.网络配置管理启动和关闭以及删除链接信息
$nmcli c reload #重启网卡(配置不会立即生效)
# 重载指定ifcfg或route到connection(立即生效)
$nmcli c load /etc/sysconfig/network-scripts/ifcfg-ens192
$nmcli c load /etc/sysconfig/network-scripts/route-ens32
$nmcli c down ens192 #关闭指定网卡链接 相当于ifdown
$nmcli c up ens192 #启动指定网卡链接 相当于ifup (同一时间被激活的链接只有一个单网卡设备的情况下)
$nmcli c delete ens192[uuid] #删除connect链接(类似于ifdown并删除ifcfg)
# 配置文件修改后立即生效
$nmcli d reapply ens192
$nmcli d connect ens192


#示例4.采用nmcli编辑网卡文件进行配置IP(十分方便-交互式)
$nmcli con edit eth0
nmcli> set ipv4.addresses 192.168.0.100/24 192.168.0.254
nmcli> goto ipv4.addresses
nmcli ipv4.addresses> change
# Edit 'addresses' value: 192.168.1.200/24
# Do you also want to set 'ipv4.method' to 'manual'? [yes]: yes
nmcli> save #并且是自动写到配置文件里面,重启也生效的
# Connection 'eth0' (5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03) successfully updated.
nmcli> activate eth0
nmcli> quit


#示例5.非交互式配置修改网络
$nmcli conn add type ethernet con-name thh0 ifname ens192 #ens192网卡设备
$nmcli con modify eth0 ipv4.addresses 192.168.0.200/24
#1.关闭会话的自动连接(autoconnect)。
$nmcli con mod eth0 connection.autoconnect no
#2.指定一个DNS服务器地址
$nmcli con mod eth0 ipv4.dns 8.8.8.8 #配置参数,是可以添加和删除的,比如使用+ 或 - 号在参数前面。
$nmcli con mod eth0 +ipv4.dns 8.8.4.4 #比如添加第二个DNS服务器地址
#3.更换静态IP地址和默认网关。
$nmcli con mod eth0 ipv4.addresses "192.168.0.120/24 192.168.0.1"
$nmcli con mod eth0 +ipv4.addresses 192.168.0.130/24 #添加第二个ip
#注:nmcli con mod修改的配置会自动保存成配置文件,并且重启后依然有效,但是如果配置更改了你需要从新激活一下,使新配置生效。
$nmcli conn mod eth0 connection.autoconnect yes #配置开机自动启动
$nmcli con up eth0


#示例6.DHCP与Static配置
#1.创建connection配置静态手动获取ip(等同于配置ifcfg,其中BOOTPROTO=none,并ifup启动)
nmcli c add type ethernet con-name eth0 ifname ens192 ipv4.addr 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual

#2.创建connection,配置动态ip(等同于配置ifcfg,其中BOOTPROTO=dhcp,并ifup启动)
nmcli c add type ethernet con-name eth0 ifname ens192 ipv4.method auto

#3.例子建一个连接(connection)多IP地址与指定路由同时会在/etc/sysconfig/network-scripts/目录中建立配置文件
nmcli c add type ethernet con-name ens192-test ifname ens192 ipv4.addresses '192.168.1.100/24,192.168.1.101/32' ipv4.routes '10.0.0.0/8 192.168.1.10,192.168.0.0/16 192.168.1.11' ipv4.gateway 192.168.1.254 ipv4.dns '8.8.8.8,4.4.4.4' ipv4.method manual
# ▪ type ethernet:创建连接时候必须指定类型,类型有很多,可以通过nmcli c add type -h看到,这里指定为ethernet。
# ▪ con-name ethX ifname ethX:第一个ethX表示连接(connection)的名字,这个名字可以任意定义,无需和网卡名相同;第二个ethX表示网卡名,这个ethX必须是在nmcli d里能看到的。
# ▪ ipv4.addresses ‘192.168.1.100/24,192.168.1.101/32’:配置2个ip地址,分别为192.168.1.100/24和192.168.1.101/32
# ▪ ipv4.gateway 192.168.1.254:网关为192.168.1.254
# ▪ ipv4.dns ‘8.8.8.8,4.4.4.4’:dns为8.8.8.8和4.4.4.4
# ▪ ipv4.method manual:配置静态IP

#4.例子建一个连接(connection)单IP设置
nmcli c add type ethernet con-name eth0 ifname ens192 ipv4.addr 10.20.172.242/24 ipv4.gateway 10.20.172.1 ipv4.dns '223.6.6.6,223.5.5.5' ipv4.method manual
# Connection 'eth0' (f36758b7-0972-422e-8291-faaa4e3e2396) successfully added.
cat /etc/sysconfig/network-scripts/ifcfg-eth0
# TYPE=Ethernet
# PROXY_METHOD=none
# BROWSER_ONLY=no
# BOOTPROTO=none
# IPADDR=10.2.172.242
# PREFIX=24
# GATEWAY=10.20.172.1
# DNS1=223.6.6.6
# DNS2=223.5.5.5
# DEFROUTE=yes
# IPV4_FAILURE_FATAL=no
# IPV6INIT=yes
# IPV6_AUTOCONF=yes
# IPV6_DEFROUTE=yes
# IPV6_FAILURE_FATAL=no
# IPV6_ADDR_GEN_MODE=stable-privacy
# NAME=eth0
# UUID=f36758b7-0972-422e-8291-faaa4e3e2396
# DEVICE=ens192
# ONBOOT=yes


#示例7.创建多个会话
nmcli connection add con-name default type ethernet ifname eno16777736 #默认为DHCP
# connection 会话,可以简写为con
# add 添加
# con-name 会话名自己随便定义
# type ethernet 类型以太网卡
# ifname 接口名,也就是网卡名
# 创建另一个会话叫做“static”并且指定它的ip和网关。但是不能自动连接网络。
nmcli connection add con-name static ifname eno16777736 autoconnect no type ethernet ip4 192.168.0.111/24 gw4 192.168.0.254
nmcli connection up static #手动改为静态ip的会话
nmcli connection up default #重新改为DHCP获取IP


#示例8.配置虚拟主从网卡bond是创建一个虚拟链接做为主,若干个连接做为从。
#从连接关联各自的物理网卡,避免物理网卡的单点故障,提高可用性。
#两个网卡enp9s0f1和enp9s0f1
#1.添加一个连接类型为bond,连接名bond0,设置连接自动启动.设备指向bond0,将创建出一个虚拟设备bond0
nmcli conn add type bond con-name bond0 ifname bond0 mode active-backup autoconnect yes

#2.为bond0添加两个从连接eth0和eth1,分别关联物理网卡enp9s0f1和enp9s0f1,设置连接自动启动.也可以不指定从连接名,会自动命名bond-slave-enp9s0f0和bond-slave-enp9s0f1
nmcli conn add type bond-slave con-name eth0 ifname enp9s0f0 master bond0 autoconnect yes
nmcli conn add type bond-slave con-name eth1 ifname enp9s0f1 master bond0 autoconnect yes

#3.为连接bond0配置IP、网关、dns、启动方式
nmcli conn modify bond0 ipv4.addresses "10.x.x.x/24"
nmcli conn modify bond0 ipv4.gateway "10.x.x.254"
nmcli conn modify bond0 ipv4.dns "x.x.x.x"
nmcli conn modify bond0 ipv4.method manual

#4.启动两个从连接,然后启动主连接;启动eth0和eth1时会自动disconnect网卡上原有的连接。
nmcli connection up eth0
nmcli connection up eth1
nmcli connection up bond0


#实例9.WIFI搜寻和链接
#设置NetworkManager自动启动并且安装NetworkManager-wifi
$chkconfig NetworkManager on && yum -y install NetworkManager-wifi
$nmcli r wifi on # 开启无线网络
$nmcli r all off # 关闭无线网络(NM默认启用无线网络)
$nmcli dev wifi
$nmcli dev wifi connect password


#示例10.整体联网控制操作
nmcli networking #查看NM纳管状态 enabled
nmcli n on #开启NM纳管
nmcli n off #关闭NM纳管(谨慎执行)
nmcli m # 监听事件
nm-online # 检测NM是否在线可用
Connecting............... 30s [online]


netplan 命令

描述:在最新的 Ubuntu 20.04 系统版本中我们可以使用netplan命令来指定网卡地址的配置。

网卡缺省配置文件路径: /etc/netplan/00-installer-config.yaml

配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
version: 2
ethernets:
ens33:
addresses: [] # 自动获取IP设置
dhcp4: true
ens160:
dhcp: false # 静态IP设置
addresses: [10.20.176.101/24] # IP设置
gateway4: 10.20.176.1 # 网关设置
routes: # 路由设置
- to: 10.0.0.0/8 # 目标地址段
via: 10.20.176.1 # 路由网关
metric: 100 # 指标
nameservers: # DNS 域名服务器
addresses: [223.6.6.6]
ens192:
addresses:
- 192.168.12.30/24
gateway4: 192.168.12.1
nameservers:
addresses:
- 192.168.12.254
bridges: # 网络桥接
br0: # 桥接名称
interfaces: [ens33] # 网卡接口
dhcp4: no # 自动获取
addresses: [192.168.1.110/24]
gateway4: 192.168.1.1 # 网关地址

命令实践:

1
2
# 1.更新网卡配置文件更新, 输入密码即可设置完成。
sudo netplan apply


0x02 网络查看

hostname 命令

dnsdomainname命令用于定义DNS系统中FQDN名称中的域名(已被Hostname替代)用于显示和设置系统的主机名称,环境变量HOSTNAME也保存了当前的主机名,在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名

如果需要永久修改主机名,需要同时修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/etc/hosts     #修改域名绑定得机器/或者IP  
/etc/hostname #修改计算机名
/etc/sysconfig/network

#语法
hostname [选项] [参数]

#参数
-a :显示主机别名
-d : 显示DNS域名
-f : 显示FQDN名称
-i :显示主机IP地址(ipv4/ipv6/网卡名称)
-I : 显示所有的IP
-s :显示短主机名称,在第一个点处截断;
-y : 显示NIS域名

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#示例1.常用获取和设置机器名
hostname #获取机器名
hostname weiyigeek #设置机器名
hostname -d #显示DNS域名 #localdomain

blog> hostname -s
WeiyiGeek
blog> hostname -y
localdomain

hostname -f #显示FQDN名称,一步获取
WeiyiGeek.localdomain

#补充:说明linux 修改 hostname 立即生效的四种方法 (立即生效就退出终端后再连接)
方法一:hostname oratest #这一步应该只能在重启前立即生效 并非长久之计
方法二:修改/etc/sysconfig/network中的hostname
方法三:修改/etc/hosts文件
方法四:用sysctl 修改kernel.hostname
查看:sysctl kernel.hostname
修改:sudo sysctl kernel.hostname=WeiyiGeek


#示例2.获取主机的IPV4信息
$hostname -I
10.10.17.109 192.168.64.1 192.168.1.1


#示例3.获取主机的IPv4/ipv6/以及网卡信息
hostname -i
fe80::9738:2d26:820f:2d50 ens192
fe80::dfc:592e:b4a4:9877 ens34
10.10.107.222 192.168.1.99


hostnamectl 命令

描述:进行设置主机名称并且立即生效;

1
2
#示例1
hostnamectl set-hostname XXXX


ifconfig 命令

描述:主要用于查看网络状态以及查询IP地址与配置网卡等操作
lo接口 : Local Loopback 本地回环网卡一般用于做实验和测试.

配置网卡的配置文件路径:

1
2
3
4
5
6
7
8
9
10
11
CentOS7: 
/etc/sysconfig/network-scripts/
/etc/sysconfig/network-scripts/ifcfg-ens33 #配置网卡
/etc/sysconfig/network-scripts/ifcfg-网卡名

Drbian/Kail: /etc/network/interfaces

# centOS 需要手工改NM_ONBOOT=yes, 否则eh0不显示
#通过配置该配置文件,可以自动进行一个网络的设置,包括IPADDR,gateway,netmask,DNS1和DNS2等等;

/etc/resolv.conf #设置DNS

WeiyiGeek.centos配置文件参数

WeiyiGeek.centos配置文件参数

操作实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#实例1.
ifconfig #本地网络ip地址配置情况
ifconfig -a #查看所有网卡(包括未启用得)
ifconfig eth0 #显示自定网卡配置
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.24.236 netmask 255.255.192.0 broadcast 172.17.63.255
ether 00:16:3e:04:c7:0b txqueuelen 1000 (Ethernet)
RX packets 1655351 bytes 946714757 (902.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1451014 bytes 194835318 (185.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#注:不同发行版可能有所不同
# Iface/eth : 实际网卡名称
# UP BROADCAST : 网卡参数
# encap : 网卡类型
# HWaddr/ether : MAC地址
# Bcast/broadcast : 广播地址
# Base address : 网卡在内存中实际地址
# RX packets : 当前接收数据包数量
# TX packets : 当前发送数据包数量
# #补充: RX errors 0 dropped 0 overruns 0 frame 0
# RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误、流失、碰撞的总数
# TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误、流失、碰撞的总数


# 示例2. 更改IP地址及子网掩码(临时生效)
#有时, 通过配置修改后未必生效, 会有IP冲突, 网卡损坏等原因造成, 必须是在命令中可查看到的, 视为生效.
ifconfig lo 192.168.1.101 netmask 255.255.255.0
ifconfig lo 192.168.1.10/24 #采用/24配置ip地址
ifconfig lo
# lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
# inet 192.168.1.101 netmask 255.255.255.0
# loop txqueuelen 1000 (Local Loopback)

ifconfig br-523a7e9f1e05 192.168.1.10/24 broadcast 192.168.1.255 #添加一个广播地址
ifconfig br-523a7e9f1e05
# br-523a7e9f1e05: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
# inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255


#示例3.启用和停用网卡 debian
ifconfig lo down # down掉后上面临时配置的IP地址失效
ifconfig enp2s0 up
ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up # 配置eth0的IP,同时激活设备


#示例4.配置eth0别名设备 eth0:1 的IP与建立一个临时VIP
ifconfig eth0:1 192.168.4.2
ifconfig lo:0 192.168.2.100 netmask 255.255.255.0 up #lo:0 表示 建议一个 lo 网卡接口的 lo:0 别名
# 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
# inet 192.168.2.100/24 scope global lo:0
# valid_lft forever preferred_lft forever

补充:知识点

1
2
3
4
5
6
7
8
9
10
11
12
13
#(1)虚拟机网络配置
克隆Linux系统到其他机器上,有网卡冲突得解决方法.
1.setup 修改IP地址
2.如果看不到eth0,启动网卡 配置文件
ONBOOT=yes
service network restart #重启网络服务,如果还是看不到可能是Ip冲突
3.修改UUID与MAC
使用ifconfig查看实际MAC与nmcli con查看网卡的uuid就行修改,如果还是不行参考下面
1)vi /etc/sysconfig/network-scripts/ifcfg-eth0 #删除MAC地址行
2)rm -rf /etc/udev/rules.d/70-persistent-net.rules #删除网卡和MAC地址绑定文件
3)重启系统
4.设置虚拟机网络连接方式
5.修改桥接网卡


ifdown 命令

ifdown 网卡名 #禁用网卡设备


ifup 命令

ifup 网卡名 #启用网卡设备


ip 命令

描述:ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下iproute2软件包里面较新的功能强大的网络配置工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#基础语法
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
#参数选项
-s:输出更详细得信息
-f:强制使用指定得协议族
-4/-6:指定使用得网络层层协议是IPV4/6协议;
-0:输出信息每条记录输出一行,即便内容较多也不换行显示;
-r:显示主机时候,不使用IP地址而使用主机得域名;


#OBJECT:是你要具体管理或者网络对象
link 网络设备
address 一个设备的协议(IP或者IPV6)地址
neighbour ARP或者NDISC缓冲区条目
route 路由表条目
rule 路由策略数据库中的规则
maddress 多播地址
mroute 多播路由缓冲区条目
tunnel IP上的通道

#COMMAND设置针对指定对象执行的操作,它和对象的类型有关:
一般情况下ip支持对象的增加(add)、删除(delete)和展示(show或者list)。有些对象不支持所有这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。
这个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。


#ARGUMENTS是命令的一些参数,它们倚赖于对象和命令:
ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成
为了方便,每个命令都有一个可以忽略的默认参数
例如,参数dev是ip link命令的默认参数,因此ip link ls eth0 等于 ip link ls dev eth0

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#示例0.用ip命令显示网络设备的运行状态
ip link | grep PROMISC  #正常网卡不应该存在promisc,如果存在可能有sniffer
ip link list
ip -s link list #等同于ifconfig eth0
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
# link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# RX: bytes packets errors dropped overrun mcast
# 4996 38 0 0 0 0
# TX: bytes packets errors dropped carrier collsns
# 4996 38 0 0 0 0
ip -s -s link ls eth0 # #查看eth0网卡信息 错误消息
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
# link/ether 00:16:3e:04:c7:0b brd ff:ff:ff:ff:ff:ff
# RX: bytes packets errors dropped overrun mcast
# 957505630 1666773 0 0 0 0
# RX errors: length crc frame fifo missed
# 0 0 0 0 0
# TX: bytes packets errors dropped carrier collsns
# 196168619 1455570 0 0 0 0
# TX errors: aborted fifo window heartbeat transns
# 0 0 0 0 2


#示例1.网卡的地址信息
ip addr #所有网卡的地址信息
ip addr show eth0 #指定网卡的配置信息
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
# link/ether 00:16:3e:04:c7:0b brd ff:ff:ff:ff:ff:ff
# inet 172.17.24.236/18 brd 172.17.63.255 scope global dynamic eth0
# valid_lft 313310085sec preferred_lft 313310085sec
ip addr ls eth0 #ip address show--显示协议地址. 缩写:show、list、lst、sh、ls、l


#示例2.设置IP地址与删除IP地址
ip addr add 192.168.1.1/24 dev eth0
ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0 # 为每个地址设置一个字符串作为标签
ip addr add 192.168.4.2/24 brd + dev eth1 label eth0:1 # 在以太网接口eth0上增加一个地址192.168.4.2,掩码长度为24位(255.255.255.0),标准广播地址,标签为eth0:Alias
ip addr del 192.168.1.1 dev eth0
ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:1 # ip address delete--删除一个协议地址. 缩写:delete、del、d

# 示例3.查看路由/显示核心路由表/设置路由
ip route
ip -s route list
# default via 172.17.63.253 dev eth0
# default via 172.17.63.253 dev eth0 proto dhcp metric 100
# 169.254.0.0/16 dev eth0 scope link metric 1002
# 172.17.0.0/18 dev eth0 proto kernel scope link src 172.17.24.236
# 172.17.0.0/18 dev eth0 proto kernel scope link src 172.17.24.236 metric 100
# 172.18.0.0/16 dev docker0 proto kernel scope link src 172.18.0.1
ip route add 10.10.107.221/32 via 10.10.107.1 src 10.10.107.236 # 配置路由时指定源地址

# 示例4.设置网卡设备
ip link set dev eth0 up # up/down 开启/关闭设备 = ifconfig eth0 up/down
ip link set dev eth0 txqueuelen 100 # 改变设备传输队列的长度
ip link set dev eth0 mtu 1500 # 改变网络设备MTU(最大传输单元)的值
ip link set dev eth0 address 00:01:4f:00:15:f1 # 修改网络设备的MAC地址 (重要)

# 示例5.显示ARP缓存条目
$ip neigh
# 172.20.0.2 dev br-15352d6a83b9 lladdr 02:42:ac:14:00:02 STALE
# 172.18.0.2 dev docker0 lladdr 02:42:ac:12:00:02 STALE
# 172.17.63.253 dev eth0 lladdr ee:ff:ff:ff:ff:ff DELAY
# 在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目
$ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm
# 把状态改为reachable
$ip neigh chg 10.0.0.3 dev eth0 nud reachable
# 删除设备eth0上的一个ARP条目10.0.0.3
$ip neigh del 10.0.0.3 dev eth0


# 示例6.网卡地址处理(ip高级命令)
ip -s -s add f to 10/8 #删除属于私网10.0.0.0/8的所有地址
ip -4 addr flush label "eth0" #取消所有以太网卡eth0的IP地址

# 示例7.输出更为详细的错误信息统计。
ip -s -s link ls ens160
# 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
# link/ether 00:50:56:8a:6c:22 brd ff:ff:ff:ff:ff:ff
# RX: bytes packets errors dropped overrun mcast
# 144268731942 374101358 0 1341015 0 1213317
# RX errors: length crc frame fifo missed
# 0 0 0 0 0
# TX: bytes packets errors dropped carrier collsns
# 270451950857 426822179 0 0 0 0
# TX errors: aborted fifo window heartbeat transns
# 0 0 0 0 1

# 示例8.清除协议地址
# 删除属于私网10.0.0.0/8的所有地址:
ip -s -s a f to 10/8

# 取消所有以太网卡的IP地址
ip -4 addr flush label "eth0"

# 示例9.显示网络邻居的信息
ip neighbour show
# 10.20.176.102 dev ens160 lladdr 00:50:56:8a:87:27 STALE
# 10.20.176.217 dev ens160 lladdr 18:c0:4d:41:c9:cb REACHABLE

# 示例10.为ens33网卡设置一个临时IP并为其设置一临时路由
sudo ip addr add 192.168.30.100/24 dev ens33
sudo ip route add default via 192.168.30.2

WeiyiGeek.

WeiyiGeek.


实践操作: 双网卡通过配置静态路由同时接入内外网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Ubuntu 中的两张网卡
# The primary network interface
# - 1.eth0 DHCP 自动获得外网IP
auto eth0
iface eth0 inet dhcp

# - 2.eth1 Static 静态IP连接单位内网
auto eth1
iface eth1 inet static
address 192.168.39.121
netmask 255.255.255.0

# - 3.添加静态路由指定单位内网通过eth1连接
ip route add 192.168.39.0/24 via 192.168.39.1
ip route add 192.168.0.0/16 via 192.168.39.1
ip route add 172.19.0.0/16 via 192.168.39.1
# 或者如下命令 ip route add -net 202.14.88.0 netmask 255.255.255.0 gw 221.5.43.1 eth0

# - 4.删除静态路由的命令:
ip route del 192.168.39.0/24 via 192.168.39.1

# ubuntu可以在 /etc/network/interfaces 文件末尾末尾加入如下代码以添加永久静态路由
up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.60.1 eth1
up route add -net 172.19.0.0 netmask 255.255.0.0 gw 192.168.60.1 eth1
up route add -net 150.102.0.0 netmask 255.255.0.0 gw 192.168.60.1 eth1
up route add -net 10.130.0.0 netmask 255.255.0.0 gw 192.168.60.1 eth1
up route add -net 10.36.0.0 netmask 255.255.0.0 gw 192.168.60.1 eth1


arp 命令

描述: arp命令用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的ip地址与MAC地址对应关系。
参数 = ip条目

1
2
# 语法
arp 选项 参数
WeiyiGeek.选项

WeiyiGeek.选项

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#示例1.显示所有得arp映射列表
arp -a
? (172.20.0.2) at 02:42:ac:14:00:02 [ether] on br-15352d6a83b9
? (172.18.0.2) at 02:42:ac:12:00:02 [ether] on docker0
gateway (172.17.63.253) at ee:ff:ff:ff:ff:ff [ether] on eth0

#示例2.以Linux显示风格显示arp缓冲区得网络接口;并显示缓冲区条目得统计信息
$arp -e
$arp -v
Address HWtype HWaddress Flags Mask Iface
172.20.0.2 ether 02:42:ac:14:00:02 C br-15352d6a83b9
172.18.0.2 ether 02:42:ac:12:00:02 C docker0
gateway ether ee:ff:ff:ff:ff:ff C eth0
Entries: 3 Skipped: 0 Found: 3

#示例3.指定网卡类型
$arp -H ether #网卡类型
Address HWtype HWaddress Flags Mask Iface
172.20.0.2 ether 02:42:ac:14:00:02 C br-15352d6a83b9
172.18.0.2 ether 02:42:ac:12:00:02 C docker0
gateway ether ee:ff:ff:ff:ff:ff C eth0

# 示例4.添加IP对应的Mac
arp –s IP MAC

# 示例5.删除指定IP的ARP缓存
arp –d IP


route 命令 - (Linux)

描述:使用 Route 命令行工具查看并编辑计算机的 IP 路由表, 使用该命令我们可以针对主机路由进行修改。

语法参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Usage: route [-nNvee] [-FC] [<AF>]           List kernel routing tables
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.
route {-h|--help} [<AF>] Detailed usage syntax for specified AF.
route {-V|--version} Display version/author and exit.

-v, --verbose # 版本
-n, --numeric # 不进行名称解析
-e, --extend # 显示更改信息
-F, --fib # 显示转发信息库 (default)
-C, --cache # 显示路由缓存而不是FIB

<AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet

# 可能的地址系列列表 (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)


# 基础语法
# 1.添加到网络的路由
route add –net {IP} netmask {MASK} eth0
route add –net {IP} netmask {MASK} gw {IP}
route add –net {IP}/24 eth0

# 2.添加默认网关
route add default gw {IP}


实际案例:

  • 1.路由条目查看与查看系统内核路由表(有效的)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ ip route
    # default via 10.10.107.1 dev ens32 proto static
    # 10.10.107.0/24 dev ens32 proto kernel scope link src 10.10.107.220
    # 172.21.0.0/16 dev cni0 proto kernel scope link src 172.21.0.1 linkdown
    # 192.168.109.64/26 via 10.10.107.221 dev tunl0 proto bird onlink
    # blackhole 192.168.196.0/26 proto bird

    $ route # 系统路由表 (自上而下)
    # Kernel IP routing table
    # Destination Gateway Genmask Flags Metric Ref Use Iface
    # default _gateway 0.0.0.0 UG 0 0 0 ens32
    # 10.10.107.0 0.0.0.0 255.255.255.0 U 0 0 0 ens32
    # 172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 cni0
    # 192.168.109.64 k8s-node-1 255.255.255.192 UG 0 0 0 tunl0
    # 192.168.196.0 0.0.0.0 255.255.255.192 U 0 0 0 *

    $ route -n # 查看路由列表(可以看到网关), 等同于 netstat -rn //拒绝显示别名,能显示数字的全部转化成数字。
    # Kernel IP routing table
    # Destination Gateway Genmask Flags Metric Ref Use Iface
    # 0.0.0.0 172.17.63.253 0.0.0.0 UG 0 0 0 eth0
    # 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
    WeiyiGeek.路由表查看

    WeiyiGeek.路由表查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 示例2.设置网关将默认网关设置为192.168.1.1,所有流量将从此处转发。
route add default gw 192.168.1.1 # 临时设定

# 示例3.添加静态路由,例如访问`172.16.0.0/24`网段的将从eth0接口的192.168.1.100地址转发出去。
route add -net 172.16.0.0/24 gw 192.168.1.100 eth0
route add -net 172.16.0.0 netmask 255.255.255.0 gw 192.168.1.100

# 实例4.设置指定IP地址流出经过的网卡
route add –host 192.168.2.10 dev eth0

# 示例5.删除创建的静态路由
route del -net 192.168.2.0/24
route del -net 192.168.2.0 netmask 255.255.255.0
route del –host 192.168.2.10 dev eth0

补充扩展:

  • 在Linux系统下设置永久生效的路由方法。
1
2
3
4
5
# 1.在/etc/rc.local里添加
route add -net 192.168.1.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.3.254

# 2.CentOS 可在 /etc/sysconfig/network 文件末尾添加如下 GATEWAY=gw-ip 或者 GATEWAY=gw-dev,或者在 /etc/sysconfig/static-router


tracepath 命令

描述:获取机器的网关地址;

实际案例:

1
2
3
4
5
6
7
8
#示例1.
$tracepath www.baidu.com
1?: [LOCALHOST] pmtu 1500
1: no reply
2: 11.220.37.25 4.427ms asymm 1
3: 11.220.36.138 4.191ms asymm 2
4: 11.217.38.206 1.313ms asymm 3
5: 119.38.215.78 2.581ms


macchanger 命令

描述:修改mac地址的工具,只能修改让别人看见的mac地址,实际真正的mac地址不能改变,ifconfig eth0 的 HWaddr即为MAC地址,前三项是 设备制造商 信息;

MAC地址:

  • 物理地址、硬件地址
  • 定义网络设备的位置
  • 在OSI模型中,第二层数据链路层则负责 MAC地址
  • MAC地址是网卡决定的,是固定的。

语法参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
#其他参数:
-h, --help 帮助信息
-V, --version 输出版本信息并退出
-s, --show 输出MAC地址并退出
-e, --ending 不改变有关设备商信息的字节
-a, --another 设置相同供应商的随机MAC地址
-A 设置任意类型的供应商MAC
-p, --permanent 重置为原始、永久的硬件MAC
-r, --random 设置完全随机MAC地址
-l, --list[=keyword] 输出已知的供应商
-b, --bia 冒充地址
-m, --mac=XX:XX:XX:XX:XX:XX
--mac XX:XX:XX:XX:XX:XX 设置 MAC XX:XX:XX:XX:XX:XX

实际案例:

1
2
3
4
5
6
7
8
9
#示例1..查看与修改网卡MAC
macchanger -s eth0 #查看eth0的MAC地址
macchanger -r eth0 #随机生成并修改eth0的MAC地址
macchanger -m 00:11:11:11:11:11 eth0 #修改mac地址


#示例2. 开机自动修改 MAC地址
crontab -e #crontab命令 用于设置周期性被执行的指令
@reboot macchanger -r eth0 #最后一行添加,每次重启MAC随机;

WeiyiGeek.macchanger

WeiyiGeek.macchanger


mii-tool 命令

描述:用于查看、管理介质的网络接口的状态,mii-tool就是能指定网卡的协商方式,比如10/100/1000M的卡半双工、全双工、自动协商的配置。
但大多数的网络设备是不用我们来修改协商,因为大多数网络设置接入的时候,都采用自动协商来解决相互通信的问题,不过自动协商也不是万能的,有时也会出现错误,比如丢包率比较高,这时就要我们来指定网卡的协商方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 语法 
usage: mii-tool [-VvRrwl] [-A media,... | -F media] <interface> ...

## 选项
-V, --version 显示版本信息;
-v, --verbose 显示网络接口的信息;
-R, --reset 重设MII到开启状态;
-r, --restart 重启自动协商模式;
-w, --watch 查看网络接口连接的状态变化;
-l, --log 写入事件到系统日志;
-A, --advertise=media,... 指令特定的网络接口;
-F, --force=media 更改网络接口协商方式;
media: 000baseTx-HD, 1000baseTx-FD,
100baseT4, 100baseTx-FD, 100baseTx-HD,
10baseT-FD, 10baseT-HD,
(to advertise both HD and FD) 1000baseTx, 100baseTx, 10baseT

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#示例1.查看网络接口的协商状态:
mii-tool -v eth1 #注:下面图片中我们可以看得到是自动协商,注意红字的部份。
# eth0: negotiated 100baseTx-FD, link ok # 百兆
# product info: vendor 00:aa:00, model 57 rev 0
# basic mode: autonegotiation enabled
# basic status: autonegotiation complete, link ok
# capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
# advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
# link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

#示例2.更改网络接口的协商方式我们要用到-F选项,后面可以接100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD等参数;
mii-tool -F 100baseTx-FD
mii-tool -v eth1
# eth0: 100 Mbit, full duplex, link ok
# product info: vendor 00:00:00, model 0 rev 0
# basic mode: 100 Mbit, full duplex
# basic status: link ok
# capabilities功能: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
# advertising广告: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD


#示例3.如果我们想把网络接口eth0改为1000Mb/s全双工的模式应该怎么办呢?
ethtool -s eth1 speed 100 duplex full #下面的是利用ethtool来更改,全双工

WeiyiGeek.网络接口

WeiyiGeek.网络接口

Tips : 测试是否是1000M端口,最保险的说用wget测试一个对方的带宽足够大的下载地址:wget http://cachefly.cachefly.net/100mb.test 如果下载速度能超过15MB/s,那么不是100M端口了,通常就是1000M端口


ethtool 命令

描述:用于获取以太网卡的配置信息,或者修改这些配置,这个命令比较复杂,功能特别多。
Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层,该命令在Linux内核中实现的逻辑层次为:
最重要的结构体struct ethtool_ops,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 语法
ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX
ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off]
ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N][pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-lowN] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N]
ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]
ethtool [-e] ethX [raw on|off] [offset N] [length N]
ethtool [-E] ethX [magic N] [offset N] [value N]
ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off]
ethtool [-p] ethX [N]
ethtool [-t] ethX [offline|online]
ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external]
[wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]

# 选项
-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-c display the Coalesce information of the specified ethernet card。
-C Change the Coalesce setting of the specified ethernet card。
-g Display the rx/tx ring parameter information of the specified ethernet card。
-G change the rx/tx ring setting of the specified ethernet card。
-i 显示网卡驱动的信息,如驱动的名称、版本等。
-d 显示register dump信息, 部分网卡驱动不支持该选项。
-e 显示EEPROM dump信息,部分网卡驱动不支持该选项。
-E 修改网卡EEPROM byte。
-k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
-K 修改网卡Offload参数的状态。
-p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
-r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation。
-S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
-t 让网卡执行自我检测,有两种模式:offline or online。
-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。

网卡驱动负责实现(部分)这些函数,并将其封装入ethtool_ops结构体,为网络核心层提供统一的调用接口,因此不同的网卡驱动会给应用层返回不同的信息。
Ethtool命令选项、struct ethtool_ops成员函数、Ethtool命令显示参数的来源,三者间的对应关系如下表所示:

命令选项 struct ethtool_ops成员函数 Ethtool命令显示参数的来源(以网卡驱动BNX2为例)
无 -s get_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel 从网卡寄存器中获得网卡速度等信息,可配置。
-a -A get_pauseparam set_pauseparam 从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。
-c -C get_coalesceset_coalesce 从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。
-g -G get_ringparam set_ringparam 除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。
-k -K get_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso 显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此TX/RX校验等模块一直处于on状态,实际上是无法修改的。
-i get_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len] 网卡bnx2自己固定的信息,如:driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0
-d get_drvinfoget_regs 不支持,即bnx2中没有实现函数get_regs。
-e -E get_eepromset_eeprom 不支持,即bnx2中没有实现函数get_eeprom。
-r nway_reset 配置网卡MII_BMCR寄存器,重启Auto negotiation模块。

由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#示例1.查看机器上网卡的速度:百兆还是千兆,请输入:
ethtool eth0 #操作完毕后,输出信息中Speed:这一项就指示了网卡的速度 操作完毕后,输出信息中Speed:这一项就指示了网卡的速度
ethtool eno3
Settings for eno3:
Supported ports: [ FIBRE ]
Supported link modes: 10000baseT/Full
1000baseX/Full
10000baseSR/Full
10000baseLR/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10000baseT/Full
1000baseX/Full
10000baseSR/Full
10000baseLR/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 10000Mb/s
Duplex: Full
Port: FIBRE
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: g
Wake-on: g
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes # 网线已插好并且网卡已激活


#示例2.查看网卡eth0采用了何种驱动
ethtool -i eth0 # 查看网卡驱动
# driver: virtio_net # 也可以采用 `lspci -vvv`
# version: 1.0.0
# firmware-version:
# expansion-rom-version:
# bus-info: 0000:00:03.0
# supports-statistics: no
# supports-test: no
# supports-eeprom-access: no
# supports-register-dump: no
# supports-priv-flags: no


#示例3.网卡参数统计
ethtool -S eth1 #查看网卡,在接收/发送数据时,有没有出错请输入

WeiyiGeek.ethtool

WeiyiGeek.ethtool

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#示例4.把网络接口eth0改为1000Mb/s全双工的模式
ethtool -s eth1 speed 1000 duplex full #全双工 duplex
ethtool -s eth0 speed 100 #将千兆网卡的速度降为百兆,自适应


#示例5.停止网卡的发送模块TX,请输入
ethtool -A tx off eth0
ethtool -a eth0 #查看tx模块是否已被停止


#示例6.关闭网卡对收到的数据包的校验功能,请输入:
ethtool -K eth0 rx off
ethtool -k eth0 #查看校验功能是否已被停止
Features for eth0:
rx-checksumming: on [fixed]
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on

Tips : 如果ethtool 和mii-tool查出来的速率不同呢?

曾经有个千兆网卡二者查出的速率不同多方查阅,终于在man mii-tool发现了结果 This program is obsolete. Valid media are only 100baseT4, 100baseTx-FD,100baseTx-HD, 10baseT-FD and 10baseT-HD ethernet cards. For replacement check ethtool.
如果你也遇到这个问题不要犹豫果断相信ethtool的结果吧。


dhclient 命令

描述:dhclient是一个DHCP协议客户端,它使用DHCP协议或者BOOTP协议或在这两个协议都不可用时使用静态地址来配置一个或多个网络接口。
一般存在一个默认文件 dhclient.conf,但可以针对不同网卡创建对应网卡名称的配置文件,dhclient-eth0.conf,dhclient-eth1.conf
DHCP协议允许主机联系中央服务器,该中央服务器维护可以在一个或多个子网上分配的IP地址列表。

1
2
#基础语法:
dhclient [-4|-6] [-SNTPI1dvrxi] [-nw] [-p <port>] [-D LL|LLT]
WeiyiGeek.参数

WeiyiGeek.参数

例如,如果在启动DHCP客户端时尚未安装DBDIR或RUNDIR,则它们特别有用。

WeiyiGeek.高级用法

WeiyiGeek.高级用法

实际案例:

1
2
3
4
5
6
7
8
9
#示例1.释放获取到得IP地址:
sudo dhclient eth1 -r #释放ip命令
Listening on LPF/eth1/00:0c:29:9b:52:dd
Sending on LPF/eth1/00:0c:29:9b:52:dd
Sending on Socket/fallback
DHCPRELEASE on eth1 to 192.168.233.254 port 67 (xid=0x5395c742)

#示例2.重新获取IP
sudo dhclient eth1 #获取ip命令


nscd 命令

描述:nscd(Name Service Cache Daemon)是一种能够缓存 passwd、group、hosts 的本地缓存服务,分别对应三个源 /etc/passwd、/etc/hosts、/etc/resolv.conf

其最为明显的作用就是加快 DNS 解析速度,在接口调用频繁的内网环境建议开启,实际上我们利用 nscd 的 hosts 缓存服务来实现 清除 CentOS 8 Linux 下的 DNS 缓存。

1
2
3
#CentOS8下安装
dnf -y install nscd
systemctl start nscd #nscd 服务默认是关闭的

补充:开启 nscd 的 hosts 缓存服务后,每次内部接口请求不会都发起 dns 解析请求,而是直接命中 nscd 缓存散列表,从而获取对应服务器 ip 地址,这样可以在大量内部接口请求时减少接口的响应时间。



基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
用法: nscd [选项...]
网域名称缓存精灵
-d, --debug 不在目前的 tty 产生子进程 (fork) 以及显示消息
-f, --config-file=名称 从 NAME 中读取配置数据
-F, --foreground 不衍生,但是否则 behave 如同守护程序
-g, --statistics 印出目前组态统计
-i, --invalidate=表格 使选定的缓存无效
-K, --shutdown 关闭服务器
-t, --nthreads=号码 启动 NUMBER 个线程
-?, --help 给出此帮助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号

基础示例:

1
2
#1.清除DNS缓存
nscd -i hosts


systemd-resolve 命令

描述: systemd-resolved 为本地应用程序提供了网络名字解析服务。 它不但提供了传统的 DNS/DNSSEC 解析与本地缓存功能,还提供了 LLMNR 与 MulticastDNS 的解析(resolver)与应答(responder)的功能。

DNS名称解析 (Ubuntu Service for DNS Name Resolution) 管理的服务是systemd-resolved.service, 其用于运行DNS查询和维护DNS缓存。

本地应用程序可以通过三种方式提交网络名字解析请求:

  • 第一种,通过D-Bus总线上的本地全功能API systemd-resolved (详见 API Documentation)。 这是首选方法,因为它是异步的并且功能最全。 此种方式可以正确返回 DNSSEC 的有效状态,以及支持 link-local 网络所必需的地址的网口范围(interface scope)。

  • 第二种,通过 glibc 的 getaddrinfo(3), gethostbyname(3) 等相关API(RFC3493)。 这些API受到了广泛的支持(包括非Linux平台)。此种方法不能检查 DNSSEC 的有效状态,并且是同步的。 此种方法由 glibc Name Service Switch (nss(5)) 支持。 必须使用 glibc NSS 模块 nss-resolve(8) 才能让 glibc NSS 使用 systemd-resolved 提供的名字解析功能。

  • 第三种,通过 systemd-resolved 在本地回环网口 127.0.0.53 上提供的本地DNS服务器。 应用程序可以直接向 127.0.0.53 发送DNS请求,从而直接使用 systemd-resolved 提供的解析服务。 除非确实无法使用前面的 glibc NSS 或 D-Bus API 两种方法, 否则应该尽量避免使用此种方式, 因为无法将各种网络解析功能(例如 link-local 地址或 LLMNR Unicode 域名)全部映射到 单播DNS协议中。


合成记录(Synthetic Record)
systemd-resolved 会为下列特殊域名合成DNS资源记录(RR):

  • 本机的主机名将按如下规则解析: 如果配置了本机IP地址, 那么将被解析为所有本机IP地址(按范围排序)。 如果不存在本机IP地址, 那么将被解析为本地回环上的 127.0.0.2 与 ::1
  • “localhost” 与 “localhost.localdomain” 以及所有以 “.localhost” 或 “.localhost.localdomain” 结尾的主机名, 都将被解析为 127.0.0.1 与 ::1
  • “_gateway” 将被解析为所有当前路由表中的默认网关IP地址(按数字大小排序)。 通过给网关分配一个固定的名称, 方便了应用程序对网关地址的引用, 应用程序不再需要关心网络的具体配置。
  • 在 /etc/hosts 中定义的映射关系(正向解析与反向解析)。 不过需要注意的是, 这些映射关系对非IP地址类解析(例如MX记录)无效。

Tips : 服务和命令名称略有不同命令名称没有最后一个字符“d”。
Tips : 相关配置配置文件systemd-resolved 实时更新 /run/systemd/resolve/stub-resolv.conf 文件以确保兼容传统的 Linux 程序, 静态 /usr/lib/systemd/resolv.conf 文件,此文件仅包含一个唯一的 127.0.0.53 DNS服务器,将软连接 /etc/resolv.conf 指向该静态文件以及DNS服务器来自于全局配置文件(/etc/systemd/resolved.conf),。
Tips : 操作系统网络配置文件中的DNS影响该 systemd-resolved 服务配置文件。

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1) 检查 systemd-resolved.service 状态
sudo systemctl status systemd-resolved
# ● systemd-resolved.service - Network Name Resolution
# Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
# Active: active (running) since Thu 2021-02-04 14:13:15 CST; 1 months 13 days ago
# Docs: man:systemd-resolved.service(8)
# Main PID: 830 (systemd-resolve)
# Status: "Processing requests..."
# Tasks: 1 (limit: 19112)
# Memory: 9.5M
# CGroup: /system.slice/systemd-resolved.service
# └─830 /lib/systemd/systemd-resolved

# 2) 如果要清除所有缓存统计信息,则必须重新启动systemd解析的服务。
sudo systemctl restart systemd-resolved


基础示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# (1) 检查DNS缓存统计信息。
sudo systemd-resolve --statistics
# DNSSEC supported by current servers: no

# Transactions
# Current Transactions: 0
# Total Transactions: 691

# Cache # DND 当前缓存统计
# Current Cache Size: 2 # 缓存大小
# Cache Hits: 264 # 命中
# Cache Misses: 505 # 丢弃

# DNSSEC Verdicts
# Secure: 0
# Insecure: 0
# Bogus: 0
# Indeterminate: 0

# (2) 清除Ubuntu上的DNS缓存然后再次检查统计信息以确认“当前缓存大小”为0。
# Tips: DNS刷新命令不会清除缓存命中和未命中统计信息;
# Tips: systemd-resolved 会在网络配置发生变化时自动刷新缓存
sudo systemd-resolve --flush-caches
# Cache
# Current Cache Size: 0
# Cache Hits: 264
# Cache Misses: 505

# (3) 忘记所有已缓存的DNS服务器特性
resolvectl reset-server-features
# resolvectl query www.baidu.com
# www.baidu.com: 112.80.248.76 -- link: ens160
# 112.80.248.75 -- link: ens160
# (www.a.shifen.com)

# -- Information acquired via protocol DNS in 1.5ms.
# -- Data is authenticated: no

Tips : 在Ubuntu上刷新缓存非常容易, 但是刷新DNS的命令可以由root用户或具有sudo特权的用户运行。