# Linux 网络管理

> 关键词：`curl`, `wget`, `telnet`, `ip`, `hostname`, `ifconfig`, `route`, `ssh`, `ssh-keygen`, `firewalld`, `iptables`, `host`, `nslookup`, `dig`，`nc`/`netcat`, `ping`, `traceroute`,`netstat`
>
> ，`mtr`

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击[联系博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

## 1. Linux 网络应用要点 <a href="#id-1-linux-wang-luo-ying-yong-yao-dian" id="id-1-linux-wang-luo-ying-yong-yao-dian"></a>

* 下载文件 - 使用 [curl](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)、[wget​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* telnet 方式登录远程主机，对远程主机进行管理 - 使用[ telnet​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道 - 使用[ ip​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看和设置系统的主机名 - 使用 [hostname​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看和配置 Linux 内核中网络接口的网络参数 - 使用 [ifconfig​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看和设置 Linux 内核中的网络路由表 - 使用[ route​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* ssh 方式连接远程主机 - 使用 [ssh](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 为 ssh 生成、管理和转换认证密钥 - 使用[ ssh-keygen​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看、设置防火墙（Centos7），使用[ firewalld​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看、设置防火墙（Centos7 以前），使用[ iptables​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看域名信息 - 使用 [host](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)、[nslookup](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)、[dig](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)​
* 设置路由 - 使用[ nc/netcat​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 测试主机之间网络是否连通 - 使用 [ping​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 追踪数据在网络上的传输时的全部路径 - 使用 [traceroute](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)、[mtr​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)
* 查看当前工作的端口信息 - 使用 [netstat​](https://hezhiqiang.gitbook.io/linux-yun-wei-guan-li/linux-wang-luo-guan-li)

## 2. 命令常见用法 <a href="#id-2-ming-ling-chang-jian-yong-fa" id="id-2-ming-ling-chang-jian-yong-fa"></a>

### 2.1. curl <a href="#id-2-1-curl" id="id-2-1-curl"></a>

> curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载，所以是综合传输工具，但按传统，习惯称 curl 为下载工具。作为一款强力工具，curl 支持包括 HTTP、HTTPS、ftp 等众多协议，还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化，curl 可以祝一臂之力。​

#### 示例：

```
# 下载文件
$ curl http://man.linuxde.net/text.iso --silent

# 下载文件，指定下载路径，并查看进度
$ curl http://man.linuxde.net/test.iso -o filename.iso --progress
########################################## 100.0%
```

### 2.2. wget <a href="#id-2-2-wget" id="id-2-2-wget"></a>

> wget 命令用来从指定的 URL 下载文件。​

#### 示例：

```
# 使用 wget 下载单个文件
$ wget http://www.linuxde.net/testfile.zip
```

### 2.3. telnet <a href="#id-2-3-telnet" id="id-2-3-telnet"></a>

> telnet 命令用于登录远程主机，对远程主机进行管理。​

#### 示例：

```
telnet 192.168.2.10
Trying 192.168.2.10...
Connected to 192.168.2.10 (192.168.2.10).
Escape character is '^]'.

    localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)

login: root
Password:
Login incorrect
```

### 2.4. ip <a href="#id-2-4-ip" id="id-2-4-ip"></a>

> ip 命令用来查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道，是 Linux 下较新的功能强大的网络配置工具。​

#### 示例：

```
$ ip link show                     # 查看网络接口信息
$ ip link set eth0 upi             # 开启网卡
$ ip link set eth0 down            # 关闭网卡
$ ip link set eth0 promisc on      # 开启网卡的混合模式
$ ip link set eth0 promisc offi    # 关闭网卡的混个模式
$ ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
$ ip link set eth0 mtu 1400        # 设置网卡最大传输单元
$ ip addr show                     # 查看网卡IP信息
$ ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
$ ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址

$ ip route show # 查看系统路由
$ ip route add default via 192.168.1.254   # 设置系统默认路由
$ ip route list                 # 查看路由信息
$ ip route add 192.168.4.0/24  via  192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
$ ip route add default via  192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254
$ ip route del 192.168.4.0/24   # 删除192.168.4.0网段的网关
$ ip route del default          # 删除默认路由
$ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
```

### 2.5. hostname <a href="#id-2-5-hostname" id="id-2-5-hostname"></a>

> hostname 命令用于查看和设置系统的主机名称。环境变量 HOSTNAME 也保存了当前的主机名。在使用 hostname 命令设置主机名后，系统并不会永久保存新的主机名，重新启动机器之后还是原来的主机名。如果需要永久修改主机名，需要同时修改 `/etc/hosts` 和 `/etc/sysconfig/network` 的相关内容。​

#### 示例：

```
$ hostname
hezhiqiang
```

### 2.6. ifconfig <a href="#id-2-6-ifconfig" id="id-2-6-ifconfig"></a>

> ifconfig 命令被用于查看和配置 Linux 内核中网络接口的网络参数。用 ifconfig 命令配置的网卡信息，在网卡重启后机器重启后，配置就不存在。要想将上述的配置信息永远的存的电脑里，那就要修改网卡的配置文件了。​

#### 示例：

```
# 查看网络设备信息（激活状态的）
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3E:00:1E:51
          inet addr:10.160.7.81  Bcast:10.160.15.255  Mask:255.255.240.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
          TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3607197869 (3.3 GiB)  TX bytes:6115042 (5.8 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:5079451 (4.8 MiB)  TX bytes:5079451 (4.8 MiB)
```

### 2.7. route <a href="#id-2-7-route" id="id-2-7-route"></a>

> route 命令用来查看和设置 Linux 内核中的网络路由表，route 命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信，需要一台连接两个网络的路由器，或者同时位于两个网络的网关来实现。​

#### 示例：

```
# 查看当前路由
route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
112.124.12.0    *               255.255.252.0   U     0      0        0 eth1
10.160.0.0      *               255.255.240.0   U     0      0        0 eth0
192.168.0.0     10.160.15.247   255.255.0.0     UG    0      0        0 eth0
172.16.0.0      10.160.15.247   255.240.0.0     UG    0      0        0 eth0
10.0.0.0        10.160.15.247   255.0.0.0       UG    0      0        0 eth0
default         112.124.15.247  0.0.0.0         UG    0      0        0 eth1

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0    # 添加网关/设置网关
route add -net 224.0.0.0 netmask 240.0.0.0 reject      # 屏蔽一条路由
route del -net 224.0.0.0 netmask 240.0.0.0             # 删除路由记录
route add default gw 192.168.120.240                   # 添加默认网关
route del default gw 192.168.120.240                   # 删除默认网关
```

### 2.8. ssh <a href="#id-2-8-ssh" id="id-2-8-ssh"></a>

> ssh 命令是 openssh 套件中的客户端连接工具，可以给予 ssh 加密协议实现安全的远程登录服务器。​

#### 示例：

```
# ssh 用户名@远程服务器地址
ssh user1@172.24.210.101
# 指定端口
ssh -p 2211 root@140.206.185.170
```

引申阅读：[ssh 背后的故事](https://linux.cn/article-8476-1.html)​

### 2.9. ssh-keygen <a href="#id-2-9-ssh-keygen" id="id-2-9-ssh-keygen"></a>

> ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥，它支持 RSA 和 DSA 两种认证密钥。​

### 2.10. firewalld

> firewalld 命令是 Linux 上的防火墙软件（Centos7 默认防火墙）。​

#### 2.10.1. firewalld 的基本使用

* 启动 - systemctl start firewalld
* 关闭 - systemctl stop firewalld
* 查看状态 - systemctl status firewalld
* 开机禁用 - systemctl disable firewalld
* 开机启用 - systemctl enable firewalld

#### 2.10.2. 使用 systemctl 管理 firewalld 服务 <a href="#id-2-10-2-shi-yong-systemctl-guan-li-firewalld-fu-wu" id="id-2-10-2-shi-yong-systemctl-guan-li-firewalld-fu-wu"></a>

systemctl 是 CentOS7 的服务管理工具中主要的工具，它融合之前 service 和 chkconfig 的功能于一体。

* 启动一个服务 - systemctl start firewalld.service
* 关闭一个服务 - systemctl stop firewalld.service
* 重启一个服务 - systemctl restart firewalld.service
* 显示一个服务的状态 - systemctl status firewalld.service
* 在开机时启用一个服务 - systemctl enable firewalld.service
* 在开机时禁用一个服务 - systemctl disable firewalld.service
* 查看服务是否开机启动 - systemctl is-enabled firewalld.service
* 查看已启动的服务列表 - systemctl list-unit-files|grep enabled
* 查看启动失败的服务列表 - systemctl --failed

#### 2.10.3. 配置 firewalld-cmd <a href="#id-2-10-3-pei-zhi-firewalldcmd" id="id-2-10-3-pei-zhi-firewalldcmd"></a>

* 查看版本 - firewall-cmd --version
* 查看帮助 - firewall-cmd --help
* 显示状态 - firewall-cmd --state
* 查看所有打开的端口 - firewall-cmd --zone=public --list-ports
* 更新防火墙规则 - firewall-cmd --reload
* 查看区域信息: firewall-cmd --get-active-zones
* 查看指定接口所属区域 - firewall-cmd --get-zone-of-interface=eth0
* 拒绝所有包：firewall-cmd --panic-on
* 取消拒绝状态 - firewall-cmd --panic-off
* 查看是否拒绝 - firewall-cmd --query-panic

#### 2.10.4. 在防火墙中开放一个端口 <a href="#id-2-10-4-zai-fang-huo-qiang-zhong-kai-fang-yi-ge-duan-kou" id="id-2-10-4-zai-fang-huo-qiang-zhong-kai-fang-yi-ge-duan-kou"></a>

* 添加（--permanent 永久生效，没有此参数重启后失效） - firewall-cmd --zone=public --add-port=80/tcp --permanent
* 重新载入 - firewall-cmd --reload
* 查看 - firewall-cmd --zone= public --query-port=80/tcp
* 删除 - firewall-cmd --zone= public --remove-port=80/tcp --permanent

### 2.11. iptables <a href="#id-2-11-iptables" id="id-2-11-iptables"></a>

> iptables 命令是 Linux 上常用的防火墙软件，是 netfilter 项目的一部分。可以直接配置，也可以通过许多前端和图形界面配置。​

#### 示例：

```
# 开放指定的端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

# 屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

# 查看已添加的iptables规则
iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
 pkts bytes target     prot opt in     out     source               destination
 5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
 191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
 6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
 pkts bytes target     prot opt in     out     source               destination
 5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
```

### 2.12. host <a href="#id-2-12-host" id="id-2-12-host"></a>

> host 命令是常用的分析域名查询工具，可以用来测试域名系统工作是否正常。​

#### 示例：

```
[root@localhost ~]# host he.zhiqiang.cloud
he.zhiqiang.cloud is an alias for hosting.gitbook.io.
hosting.gitbook.io has address 104.18.1.145
hosting.gitbook.io has address 104.18.0.145
hosting.gitbook.io has IPv6 address 2606:4700::6812:191
hosting.gitbook.io has IPv6 address 2606:4700::6812:91
```

### 2.13. nslookup <a href="#id-2-13-nslookup" id="id-2-13-nslookup"></a>

> nslookup 命令是常用域名查询工具，就是查 DNS 信息用的命令。​

#### 示例：

```
[root@localhost ~]# nslookup he.zhiqiang.cloud
Server:         183.60.82.98
Address:        183.60.82.98#53

Non-authoritative answer:
he.zhiqiang.cloud       canonical name = hosting.gitbook.io.
Name:   hosting.gitbook.io
Address: 104.18.1.145
Name:   hosting.gitbook.io
Address: 104.18.0.145
Name:   hosting.gitbook.io
Address: 2606:4700::6812:191
Name:   hosting.gitbook.io
Address: 2606:4700::6812:91
```

### 2.14. dig

> dig 命令是常用的域名查询工具， 解析域名除了使用nslookup之外，还可以使用dig命令来解析域名，dig命令可以得到更多的域名信息。dig 命令主要用来从 DNS 域名服务器查询主机地址信息

#### 示例：

```
[root@localhost ~]# dig he.zhiqiang.cloud

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> he.zhiqiang.cloud
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61081
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;he.zhiqiang.cloud.             IN      A

;; ANSWER SECTION:
he.zhiqiang.cloud.      600     IN      CNAME   hosting.gitbook.io.
hosting.gitbook.io.     300     IN      A       10.18.0.66
hosting.gitbook.io.     300     IN      A       10.18.1.66

;; Query time: 299 msec
;; SERVER: 183.60.82.98#53(183.60.82.98)
;; WHEN: Fri Jun 18 21:01:13 CST 2021
;; MSG SIZE  rcvd: 110
```

### 2.15. nc <a href="#id-2-14-nc-netcat" id="id-2-14-nc-netcat"></a>

> nc  **命令** 全称**netcat**，用于设置路由器。它能通过 TCP 和 UDP 在网络中读写数据。

#### 示例：

TCP 端口扫描

```
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open
```

UDP 端口扫描

```
[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000  # 扫描192.168.0.3 的端口 范围是 1-1000
```

### 2.16. ping <a href="#id-2-15-ping" id="id-2-15-ping"></a>

> ping 命令用来测试主机之间网络的连通性。执行 ping 指令会使用 ICMP 传输协议，发出要求回应的信息，若远端主机的网络功能没有问题，就会回应该信息，因而得知该主机运作正常。​

#### 示例：

```
[root@localhost ~]# ping www.jsdig.com
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=2 ttl=50 time=178 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=3 ttl=50 time=174 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=4 ttl=50 time=177 ms
...按Ctrl+C结束

--- host.1.jsdig.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
```

### 2.17. traceroute <a href="#id-2-16-traceroute" id="id-2-16-traceroute"></a>

> traceroute 命令用于追踪数据包在网络上的传输时的全部路径，它默认发送的数据包大小是 40 字节。​

#### 示例：

```
traceroute www.58.com
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
 1  unknown (192.168.2.1)  3.453 ms  3.801 ms  3.937 ms
 2  221.6.45.33 (221.6.45.33)  7.768 ms  7.816 ms  7.840 ms
 3  221.6.0.233 (221.6.0.233)  13.784 ms  13.827 ms 221.6.9.81 (221.6.9.81)  9.758 ms
 4  221.6.2.169 (221.6.2.169)  11.777 ms 122.96.66.13 (122.96.66.13)  34.952 ms 221.6.2.53 (221.6.2.53)  41.372 ms
 5  219.158.96.149 (219.158.96.149)  39.167 ms  39.210 ms  39.238 ms
 6  123.126.0.194 (123.126.0.194)  37.270 ms 123.126.0.66 (123.126.0.66)  37.163 ms  37.441 ms
 7  124.65.57.26 (124.65.57.26)  42.787 ms  42.799 ms  42.809 ms
 8  61.148.146.210 (61.148.146.210)  30.176 ms 61.148.154.98 (61.148.154.98)  32.613 ms  32.675 ms
 9  202.106.42.102 (202.106.42.102)  44.563 ms  44.600 ms  44.627 ms
10  210.77.139.150 (210.77.139.150)  53.302 ms  53.233 ms  53.032 ms
11  211.151.104.6 (211.151.104.6)  39.585 ms  39.502 ms  39.598 ms
12  211.151.111.30 (211.151.111.30)  35.161 ms  35.938 ms  36.005 ms
```

### 2.18. netstat <a href="#id-2-17-netstat" id="id-2-17-netstat"></a>

> netstat 命令用来打印 Linux 中网络系统的状态信息，可让你得知整个 Linux 系统的网络情况。​

#### 示例：

```
# 列出所有端口 (包括监听和未监听的)
netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口

# 列出所有处于监听状态的 Sockets
netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口

# 显示每个协议的统计信息
netstat -s    显示所有端口的统计信息
netstat -st   显示TCP端口的统计信息
netstat -su   显示UDP端口的统计信息
```

### 2.19. mtr <a href="#id-2-17-netstat" id="id-2-17-netstat"></a>

> mtr在单个网络诊断工具中结合了traceroute和ping程序的功能，当mtr启动时，它调查运行在主机mtr和主机名之间的网络连接。
>
> 参考：​[https://www.linuxcool.com/mtr](https://www.linuxcool.com/mtr)

{% embed url="https://www.linuxcool.com/mtr" %}

**语法格式：**

```
mtr [参数]
```

&#x20;**选项：**

* -n no-dns(或简写为-n) :不对IP地址做域名解析
* -s :用来指定ping数据包的大小
* -i :使用这个参数来设置ICMP返回之间的要求默认是1秒
* -a :来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
* -r :已报告模式显示
* -c : 每秒发送多少包，默认为10个。英文是(–report-cycles COUNT)
* -report ：结果显示，并不动态显示
* -4：使用IPv4&#x20;
* -6：使用IPv6

#### 示例：

输出参数的解释：&#x20;

* 第一列：              显示的是IP地址和本机域名，这点和tracert很像。
* 第二列 Loss%： 显示的每个对应IP的丢包率。
* 第三列 snt：       snt等于10，设置每秒发送数据包的数量，默认值是10 可以通过参数 -c来指定。
* 第四列 Last：     显示的最近一次的返回时延。
* 第五列 Avg：      平均值，这个应该是发送ping包的平均时延。
* 第六列 Best：     最好或者说时延最短的时间。
* 第七列 Wrst：     最坏或者说时延最长的时间。
* 第八列 StDev：   标准偏差。

```
[root@localhost ~]# mtr he.zhiqiang.cloud
localhost (0.0.0.0)                                                                 Fri Jun 18 21:16:40 2021
Resolver: Received error response 2. (server failure)er of fields   quit
                           Packets               Pings
 Host                      Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 9.31.26.129            0.0%    13    0.6   0.6   0.5   0.6   0.0
    9.31.26.130
 2. 9.31.119.212           0.0%    13    0.6   0.8   0.6   1.8   0.3
    9.31.119.214
 3. 10.196.18.125          75.0%    13    0.6   1.1   0.6   2.0   0.0
 4. 10.200.16.177           0.0%    13    0.6   0.6   0.5   0.8   0.0
 5. 10.196.2.101            0.0%    13    0.6   0.7   0.6   1.0   0.0
 6. ???
 7. 58.63.249.45            0.0%    13    8.6   5.8   2.3   9.6   2.3
 8. 113.96.5.81             61.5%    13    2.1   2.1   2.1   2.2   0.0
 9. 202.97.94.138           91.7%    13    3.7   3.7   3.7   3.7   0.0
10. 202.97.94.98            0.0%    13   11.8   8.8   5.3  11.8   2.2
11. 202.97.43.242           0.0%    12  170.0 172.5 169.4 176.6   2.5
12. 202.97.50.70            0.0%    12  161.6 162.7 159.3 165.8   2.2
13. 218.30.53.214           0.0%    12  177.9 193.6 177.9 229.7  18.0
14. 104.18.1.145            0.0%    12  153.0 153.0 152.7 153.2   0.0
```

## 3. 网卡配置文件详解

### 3.1 网卡配置文件：

```
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

DEVICE=ens33                         # 网卡的设备名称
NAME=ens33                           # 网卡设备的别名
TYPE=Ethernet                        # 网络类型：Ethernet以太网
PROXY_METHOD=none                    # 代理方式：关闭状态
BROWSER_ONLY=no                      # 只是浏览器：否
BOOTPROTO=dhcp                       # 引导协议：static静态、dhcp动态获取、none不指定（可能出现问题）
DEFROUTE=yes                         # 启动默认路由
IPV4_FAILURE_FATAL=no                # 不启用IPV4错误检测功能
IPV6INIT=yes                         # 启用IPV6协议
IPV6_AUTOCONF=yes                    # 自动配置IPV6地址
IPV6_DEFROUTE=yes                    # 启用IPV6默认路由
IPV6_FAILURE_FATAL=no                # 不启用IPV6错误检测功能
UUID=sjdfga-asfd-asdf-asdf-f82b      # 网卡设备的UUID唯一标识号
ONBOOT=yes                           # 开机自动启动网卡
DNS=114.114.114.114                  # DNS域名解析服务器的IP地址 可以多设置一个DNS1
IPADDR=192.168.1.22                  # 设置固定的IPv4地址，192.168.1.2-255之间都可以，如果是dhcp可以不填写
PREFIX=24                            # 子网前缀长度
GATEWAY=192.168.1.1                  # 默认网关IP地址
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
NETMASK=255.255.255.0                # 子网掩码，不需要修改；
```

```
[root@localhost network-scripts]# nmcli c reload   # 重启网卡 
```

### 3.2 nmcli

> nmcli命令是可以完成网卡上的所有配置，并可以写入配置文件中。
>
> 参考：[https://www.linuxcool.com/nmcli](https://www.linuxcool.com/nmcli)

{% embed url="https://www.linuxcool.com/nmcli" %}

#### nmcli安装命令：

```
yum install NetworkManager
```

#### &#x20;启动nmcli

```
systemctl enable --now NetworkManager
```

**语法格式：**

```
nmcli [选项] OBJECT { 命令 | help }
```

#### 选项 ：

* `-t[erse]                       # terse output 简洁的输出`&#x20;
* `-p[retty]                      # pretty output 漂亮的输出`&#x20;
* `-m[ode] tabular|multiline      # output mode 输出模式`&#x20;
* `-f[ields] |all|common          # specify fields to output 指定要输出的字段`&#x20;
* `-e[scape] yes|no               # escape columns separators in values 在值中转义列分隔符`&#x20;
* `-n[ocheck]                     # 不要检查nmcli和NetworkManager版本`&#x20;
* `-a[sk]                         # 要求缺少参数`&#x20;
* `-w[ait]                        # 设置超时等待整理操作`&#x20;
* `-v[ersion]                     # 显示程序版本`&#x20;
* `-h[elp]                        # 打印此帮助`

#### OBJECT&#x20;

* `g[eneral]                      NetworkManager的一般状态和操作`&#x20;
* `n[etworking]                   整体组网控制 r[adio] NetworkManager切换开关`&#x20;
* `c[onnection]                   NetworkManager的连接`&#x20;
* `d[evice]                       由NetworkManager管理的设备`&#x20;
* `a[gent]                        NetworkManager秘密代理或polkit代理`

#### 示例：

```
nmcli connection show           # 查看当前连接状态
nmcli connection reload         # 重启服务
nmcli connection show -active   # 显示活动的连接
nmcli connection show "lan eth0"# 显示指定一个网络连接配置
nmcli device status             # 显示设备状态
nmcli device show eno16777736   # 显示指定接口属性
nmcli device show               # 显示全部接口属性
nmcli con up static             # 启用static连接配置
nmcli con up default            # 启用default连接配置 
nmcli con add help              # 查看帮助
```

## 4.Host 配置文件详解

&#x20;       启动时，查询主机名到IP地址的匹配，这些匹配信息存放在/etc/hosts文件中，在没有域名服务器情况下，系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址。

#### 示例：

输出参数的解释：

* 第一列：主机IP信息
* 第二列：主机名
* 后面任何的列都是该主机的别名

```
[root@localhost ~]# vi /etc/hosts
127.0.0.1 localhost he.zhiqiang.cloud
192.168.0.3 he.zhiqiang.cloud
```

## 5.Network 配置文件详解

&#x20;        该文件用来指定服务器上的网络配置信息，配置主机名和网关

#### 示例：

输出参数的解释：

* NETWORK=yes/no                                       网络是否被配置&#x20;
* FORWARD\_IPV4=yes/no                             是否开启IP转发功能&#x20;
* HOSTNAME= \<hostname>                         \<hostname>表示服务器的主机名&#x20;
* GAREWAY= \<address>                                \<address>表示网络网关的IP地址&#x20;
* GAREWAYDEV= \<device>                           \<device>表示网关的设备名，如：eth0

```
NETWORK=yes
RORWARD_IPV4=yes
HOSTNAME=he.zhiqiang.cloud
GAREWAY=192.168.0.1
GATEWAYDEV=eth0
```

## 6.resolv.conf 配置文件详解

&#x20;        DNS客户端配置文件，设置DNS服务器的IP地址及DNS域名，还包含了主机的域名搜索顺序，每一行应包含一个关键字和一个或多个参数

#### 示例：

输出参数的解释：

* nameserver             # 定义DNS服务器的IP地址&#x20;
* domain                     # 定义本地域名&#x20;
* search                      # 定义域名的搜索列表&#x20;
* sortlist                      # 对返回的域名进行排序

```
[root@localhost ~]# vi /etc/resolv.conf
search  zhiqiang.cloud
nameserver 114.114.114.114
nameserver 114.114.115.115
```

{% hint style="danger" %}
注意：nameserver关键字，如果没指定nameserver就找不到DNS服务器，其它关键字是可选，domain和search不能共存；如果同时存在，后面出现的将会被使用。
{% endhint %}

#### 参数及意义如下：

* nameserver 表明DNS服务器的IP地址.可以有很多行的nameserver，每一行带一个IP地址，查询时就按nameserver在本文件中的顺序进行，当第一个nameserver没有反应时才查询下面的nameserver
* domain 声明主机的域名，很多程序用到它，如邮件系统；当为没有域名的主机进行DNS查询时，也要用到。如果没有域名，主机名将被使用，删除所有在第一个点( .)前面的内容。
* search 它的多个参数指明域名查询顺序。当要查询没有域名的主机，主机将在由search声明的域中分别查找，domain和search不能共存；如果同时存在，后面出现的将会被使用。
* sortlist 允许将得到域名结果进行特定的排序，它的参数为网络/掩码对，允许任意的排列顺序。
