Linux 的网络参数设置
1、连接 Internet
1.1、Linux 网络相关配置文件
我们知道 TCP/IP 的重要参数主要是 IP、Netmask、Gateway、DNS IP,而且千万不要忘记你这台主机也应该有主机名(Hostname)。此外,我们也知道 IP 的获取办法有手动获取、DHCP 自动分配等。那么这些参数主要写在哪些配置文件中呢?
所需网络参数 | 主要配置文件名 | 重要参数 |
---|---|---|
IP Netmask DHCP Gateway |
/etc/sysconfig/network-scripts/ifcfg-网卡名 | DEVICE=网卡名称 BOOTPROTO=是否启用 dhcp HWADDR=是否加入网卡 MAC 地址 IPADDR=IP 地址 NETMASK=子网掩码 ONBOOT=要不要默认启动此接口 GATEWAY=网关地址 NM_CONTROLLED=额外的网管软件,建议取消 |
主机名 | /etc/sysconfig/network | NETWORKING=要不要使用网络 NETWORKING_IPV6=是否支持 IPV6 HOSTNAME=主机名 |
DNS IP | /etc/resolv.conf | Name Server DNS 的 IP 地址 |
私有 IP 对应的主机名 | /etc/hosts | 私有 IP 主机名 别名 |
此外,还有一些文件需要了解一下:
-
/etc/services:
这个文件是记录构建在 TCP/IP 上面的各种协议所定义的 port number,都是这个文件所规划出来的。如果你想自定义一个新的协议与 port 相对应,就需要修改这个文件。
-
/etc/protocols:
这个文件是在定义 IP 数据报协议的相关数据,包括 ICMP/TCP/UDP 的数据报协议的定义等。
至于网络方面的启动命令,记住以下一个命令即可:
-
systemctl restart network(/etc/init.d/network restart):
一口气重新启动整个网络的参数。它会主动地读取所有的网络配置文件,所以可以很快地恢复系统默认的参数值。
-
ifup 网卡名(ifdown 网卡名):
启动或者关闭某个网络接口。这两个 scripts 会主动去 /etc/sysconfig/network-scripts/ 目录下,读取适当的配置文件来处理。
此外,还有一个 NetworkManager 的软件来管理网络,如果想要自己搭建网络环境,建议把它关闭。
1.2、连接 Inernet 的设置方法
1.2.1、手动配置固定 IP 参数
我的网络环境:我的 Linux 主机与一台路由器连接,路由器分配的地址为:10.0.0.100 ~ 10.0.0.250,子网掩码为:255.0.0.0,如图:
所以可知,取得的固定 IP 参数并非一定是 Public IP。它只是一组可接受的固定 IP。相关配置参数与启动脚本及指令如下:
修改的参数 | 配置文件与重要启动脚本 | 查看结果的指令 |
---|---|---|
IP 相关参数 | /etc/sysconfig/network-scripts/ifcfg-网卡名 systemctl restart network |
ifconfig (IP/Netmask) route -n (gateway) |
DNS | /etc/resolv.conf | dig www.baidu.com |
主机名 | /etc/sysconfig/network /etc/hosts |
hostname 主机名 ping $(hostname) reboot |
1.2.1.1、IP/Netmask/Gateway 的配置、启动与查看
[root@li ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE="ens33" #网卡名称,必须要与 ifcfg-ens33 相对应
UUID="1d79d0d4-b10b-44ea-b843-574618e0588a" #设备的 UUID
ONBOOT="yes" #是否默认启动此接口
BOOTPROTO=none #取得 IP 的方式,其实关键字只有 dhcp,手动可以输入 none
IPADDR=10.0.0.246 #就是 IP
NETMASK=255.0.0.0 #子网掩码
GATEWAY=10.0.0.1 #默认路由
...
配置完成后,现在让我们来重新启动网络接口,这样才能更新整个网络参数:
[root@li ~]# systemctl restart network
接下来检查一下配置是否正确:
#检查一下 IP 参数
[root@li ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.246 netmask 255.0.0.0 broadcast 10.255.255.255 #这一行
inet6 fe80::20c:29ff:fe5d:576 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:05:76 txqueuelen 1000 (Ethernet)
RX packets 6649 bytes 455083 (444.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11962 bytes 1373300 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#检查一下路由定义
[root@li ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 ens33
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
#0.0.0.0 代表默认路由的配置值
#检查与路由器之间能否连接成功
[root@li ~]# ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.793 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.726 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.607 ms
--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2015ms
rtt min/avg/max/mdev = 0.607/0.708/0.793/0.082 ms
#如果失败了,要看路由器是否已经关闭了?或者是 Switch/Hub 是否有问题?或者是网线的问题,还是路由器配置错误?
这时 TCP/IP 参数已经配置完毕了,这表示你可以使用 IP 来上网了。但是还不能使用主机名上网。
1.2.1.2、DNS 服务器 IP 的定义与查看
这个 /etc/resolv.conf 文件很重要,它会影响到你是否可以查询到主机名与 IP 地址的映射。
[root@li ~]# vim /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search lan server
nameserver 10.0.0.1
测试:
[root@li ~]# yum -y install bind-utils
[root@li ~]# dig www.baidu.com
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1029 IN CNAME www.a.shifen.com.
www.a.shifen.com. 58 IN A 61.135.169.121
www.a.shifen.com. 58 IN A 61.135.185.32
;; Query time: 18 msec
;; SERVER: 10.0.0.1#53(10.0.0.1) #可以看到 server 是哪台主机
;; WHEN: 四 8月 27 10:49:01 CST 2020
;; MSG SIZE rcvd: 101
上面的输出有两个重点:一个是问题查询(QUESTION SECTION) www.baidu.com 的 A(Address)参数,并且从回答(ANSWER SECTION)中得到我们所需要的 IP 参数。二是最后的 Server 字段,表明 DNS 服务器的 IP 地址。
1.2.1.3、主机名的修改
修改主机名就需要修改 /etc/sysconfig/network 和 /etc/hosts 这两个文件:
[root@li ~]# vim /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=Li.server
[root@li ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#上面两行特别重要,不要删除
10.0.0.246 Li.server
修改完毕后需要重新启动。因为系统中有很多的服务需要主机名,都是去这个文件中读取的。但我们还需要确认一些信息,再去重启。
[root@li ~]# ping -c 2 Li.server #ping 我们刚才设置的主机名
PING Li.server (10.0.0.246) 56(84) bytes of data.
64 bytes from Li.server (10.0.0.246): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from Li.server (10.0.0.246): icmp_seq=2 ttl=64 time=0.036 ms
--- Li.server ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.036/0.055/0.075/0.020 ms
1.2.2、自动取得 IP 参数
[root@li ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO=dhcp #只需要修改这个,其余的注解掉
#IPADDR=10.0.0.246
#NETMASK=255.0.0.0
#GATEWAY=10.0.0.1
[root@li ~]# systemctl restart network
基本上,/etc/resolv.conf 默认会被 DHCP 所修改,甚至连主机名都会被 DHCP 修改。
2、Linux 中常用的网络命令
2.1、设置网络参数的命令
- ifconfig:查询、设置网卡与 IP 网络等相关参数;
- ifup、ifdown:这是两个 script 文件,起作用是通过更简单的方式来启动与关闭网络接口;
- route:查看、配置路由表;
- ip:整合式的命令,可以直接修改上述提到的功能。
2.1.1、手动/自动配置 IP 参数与启动/关闭网络接口:ifconfig、ifup、ifdown
2.1.1.1、ifconfig
[root@li ~]# ifconfig {interface} {up|down}
[root@li ~]# ifconfig interface {options}
选项与参数:
interface:网卡接口名称
options:可以使用的参数,包括:
up,down:启动或关闭该网络接口
mtu:设置不同的 MTU 值
netmask:子网掩码
broadcast:广播地址
#1、查看所有的网络接口(直接输入 ifconfig)
[root@li ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.246 netmask 255.0.0.0 broadcast 10.255.255.255
inet6 fe80::20c:29ff:fe5d:576 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:05:76 txqueuelen 1000 (Ethernet)(传输数据的缓冲区长度)
RX packets 5671 bytes 388961 (379.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10151 bytes 1168482 (1.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0(数据包冲突情况)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 4 bytes 336 (336.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 336 (336.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#2、暂时修改网络接口,给予 ens33 一个 10.0.0.125 的参数
[root@li ~]# ifconfig ens33 10.0.0.125
#系统会依照该 IP 所在的 class 范围内,自动计算出 netmask 以及 network,broadcast 等 IP 参数,若想修改其他 IP 参数:
[root@li ~]# ifconfig ens33 10.0.0.125 \
> netmask 255.0.0.0 mtu 8000
[root@li ~]# ifconfig ens33 mtu 5000 #仅修改 MTU
#在实体网卡上再仿真出一个网络接口,也就是一张网卡上设置多个 IP 的意思
[root@li ~]# ifconfig ens33:0 172.16.0.100
[root@li ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 5000
inet 10.0.0.125 netmask 255.0.0.0 broadcast 10.255.255.255
inet6 fe80::20c:29ff:fe5d:576 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:05:76 txqueuelen 1000 (Ethernet)
RX packets 493 bytes 44193 (43.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 616 bytes 79326 (77.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.0.100 netmask 255.255.0.0 broadcast 172.16.255.255
ether 00:0c:29:5d:05:76 txqueuelen 1000 (Ethernet)
#关掉 ens33:0 这个接口
[root@li ~]# ifconfig ens33:0 down
#重启网络,使之前的配置全部失效
[root@li ~]# systemctl restart network
2.1.1.2、ifup、ifdown
[root@li ~]# ifup {interface}
[root@li ~]# ifdown {interface}
不过注意的是,如果以 ifconfig ens33 的方式来设置或修改了网络接口后,那就无法再以 ifdown ens33 的方式来关闭了。因为 ifdown 会去分析比对当前网络参数与 ifcfg-ens33 是否相符,不符的话就会放弃此次操作。因此使用 ifconfig 修改完毕后,应该使用 ifconfig ens33 down 来关闭。
2.1.2、修改路由:route
[root@li ~]# route [-nee]
[root@li ~]# route add [-net|-host] [网络或主机] netmask [mask] [gw|dev]
[root@li ~]# route del [-net|-host] [网络或主机] netmask [mask] [gw|dev]
选项与参数:
查看的参数:
-n:不要使用通信协议或主机名,直接使用 IP 地址或 port number
-ee:显示更详细的信息
增加与删除路由的相关信息:
-net:表示后面接的路由为一个网络
-host:表示后面接的为连接到单台主机的路由
netmask:与网络有关,可设置 netmask 决定网络的大小
gw:gateway 的简写,后续接的是 IP 的数值,与 dev 不同
dev:如果只是要指定由哪一块网卡连接出去,则使用这个参数
#1、单纯地查看路由
[root@li ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 ens33
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
[root@li ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default phicomm.me 0.0.0.0 UG 0 0 0 ens33
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
在默认情况下,route 会解析出 IP 的主机名,如果解析不到呢?就会有延时,所以直接使用 route -n。
- Destination、Genmask:这两个参数就是 network 与 netmask 了,它们就组合成了一个完整的网络。
- Gateway:该网络是通过哪个 Gateway 连接出去的?如果显示的是 0.0.0.0 表示的是该路由是直接由本机传送的,也就是通过局域网的 MAC 直接发送的;如果现实的是 IP 的话,表示该路由需要经过路由器(网关)的帮忙才能发送出去。
- Flags:总共有多个标志,代表的意义如下:
- U(route is up):该路由是启动的;
- H(target is a host):目标是一台主机(IP)而非网络;
- G(use gateway):需要通过外部的主机来传递数据包;
- R:使用动态路由时,恢复路由信息的标志;
- D:动态路由;
- M:路由已经被修改了;
- !:这个路由将不会被接受(用来阻止不安全的网络)。
- Iface:这个路由传递数据包的接口。
#2、路由的增加与删除
[root@li ~]# ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=63 time=2.31 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=63 time=2.21 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=63 time=1.97 ms
[root@li ~]# route add -net 172.160.0.0 netmask 255.255.0.0 dev ens33
#注意,增加的路由必须能够与你的网络互通
[root@li ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev ens33
[root@li ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default phicomm.me 0.0.0.0 UG 0 0 0 ens33
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens33
172.160.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens33
#增加默认路由的方法,请注意,只要有一个默认路由就够了
[root@li ~]# route add default gw 172.160.0.1
[root@li ~]# systemctl restart network #重启网络,恢复原本的设置
2.1.3、网络参数综合命令:ip
[root@li ~]# ip [options] [动作] [命令]
选项与参数:
options:设置的参数,主要有:
-s:显示出设备的统计数据,例如接收数据包的总数等;
操作:也就是可以针对哪些网络参数进行操作,包括:
link:与设备相关的设置,包括:MTU、MAC 地址等
addr/address:关于额外的 IP 协议,例如多 IP 的实现等
route:与路由有关的相关设置
2.1.3.1、关于接口设备(device)的相关设置:ip link
[root@li ~]# ip [-s] link show #单纯地显示该设备的相关信息
[root@li ~]# ip link set [device] [动作与参数]
选项与参数:
show:仅显示出这个设备的相关属性,如果加上 -s 会显示更多的统计信息
set:可以开始设置项目,device 指的是 ens33 等设备名称
动作与参数:
up|down:启动或关闭某个接口
address:如果这个设备可以更改 MAC 的话,用这个参数修改
name:给予这个设备一个特殊的名字
mtu:就是最大传输单元
#1、显示本机所有的接口信息
[root@li ~]# ip link show
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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:5d:05:76 brd ff:ff:ff:ff:ff:ff
[root@li ~]# ip -s link show
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
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:5d:05:76 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
713706 11314 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2401764 21104 0 0 0 0
2.1.3.2、关于额外 IP 的相关设定:ip address
如果说 ip link 是与 ISO 七层协议的第二层数据链路层相关的话,那么 ip address(ip addr) 就是与第三层网络层相关了。
[root@li ~]# ip address show #显示查看 IP 参数
[root@li ~]# ip address [add|del] [IP参数] [dev 设备名] [相关参数]
选项与参数:
show:仅显示接口的 IP 信息
add|del:进行相关参数的增加或删除设置,主要有:
IP 参数:主要就是网络的设置
dev:这个 IP 参数所要设置的接口
相关参数主要有以下这些:
broadcast:设置广播地址,如果是 + 则表示让系统自己计算
label:设备别名
scope:这个选项的参数,通常是这几类:
global:允许来自所有来源的连接
site:仅支持 ipv6,仅允许本主机的连接
link:仅允许本设备的自我连接
host:仅允许本主机内部的连接
所以当然使用 global 了,默认也是这个参数
#1、显示所有的接口的 IP 参数
[root@li ~]# ip address show
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5d:05:76 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.246/8 brd 10.255.255.255 scope global dynamic ens33
valid_lft 84945sec preferred_lft 84945sec
inet6 fe80::20c:29ff:fe5d:576/64 scope link
valid_lft forever preferred_lft forever
增加虚拟网络接口试试:
[root@li ~]# ip address add 176.160.0.100/16 broadcast + dev ens33 label ens33:Li
[root@li ~]# ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5d:05:76 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.246/8 brd 10.255.255.255 scope global dynamic ens33
valid_lft 84854sec preferred_lft 84854sec
inet 176.160.0.100/16 brd 176.160.255.255 scope global ens33:Li #这一行
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5d:576/64 scope link
valid_lft forever preferred_lft forever
[root@li ~]# ifconfig
ens33:Li: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 176.160.0.100 netmask 255.255.0.0 broadcast 176.160.255.255
ether 00:0c:29:5d:05:76 txqueuelen 1000 (Ethernet)
#删除刚刚的那个接口
[root@li ~]# ip address del 176.160.0.100/16 dev ens33
2.1.3.3、关于路由的相关设定:ip route
[root@li ~]# ip route show
[root@li ~]# ip route [add|del] [IP或网络号] [via gateway] [dev 设备]
选项与参数:
show:单纯地显示出路由表,也可以使用 list
add|del:添加或删除路由
IP 或网络号:可使用网络号或单纯的 IP
via:网关地址
dev:设备
mtu:额外设置 MTU
#1、显示出路由信息
[root@li ~]# ip route show
default via 10.0.0.1 dev ens33
10.0.0.0/8 dev ens33 proto kernel scope link src 10.0.0.246
169.254.0.0/16 dev ens33 scope link metric 1002
#2、路由的添加,主要是本机可直接沟通的网络
[root@li ~]# ip route add 172.160.0.0/16 dev ens33
[root@li ~]# ip route show
172.160.0.0/16 dev ens33 scope link
#3、增加可以通往外部的路由,需要通过 router
[root@li ~]# ip route add 172.16.0.0/16 via 10.0.0.1 dev ens33
[root@li ~]# ip route show
172.16.0.0/16 via 10.0.0.1 dev ens33
#4、删除路由
[root@li ~]# ip route del 172.160.0.0/16
[root@li ~]# ip route del 172.16.0.0/16
2.1.4、DHCP 客户端命令:dhclient
如果你是使用 DHCP 协议在局域网内获取 IP 的话,那么是否一定要去编辑 ifcfg-ens33 内的 BOOTPROTO 呢?有更快速的办法,就是利用 dhclient 这个命令。因为这个命令才是真正发送 DHCP 请求的:
[root@li ~]# dhclient ens33
2.2、网络排错命令检查
2.2.1、两台主机之间的沟通:ping
ping 是通过 ICMP 数据报来进行整个网络的状态报告。
[root@li ~]# ping [选项与参数] IP
选项与参数:
-c 数值:后面接的是 ping 的次数
-n:在后面输出数据时不进行 IP 与主机名的反查,直接使用 IP 输出(速度较快)
-s 数值:发送出去的 ICMP 数据报大小,默认为 56bytes
-t 数值:TTL 的数值,每经过一个节点就减少 1
-W 数值:等待响应对方主机的秒数
-M [do|dont]:主要在检测网络的 MTU 数值大小,两个常见的项目是:
do:代表传送一个 DF 标志,让数据报不能重新拆包与打包
dont:表示可以拆包与打包
#1、测试与路由器的连通性
[root@li ~]# ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.448 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.737 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.778 ms
--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 0.448/0.654/0.778/0.148 ms
#2、找出最大的 MTU 数值
[root@li ~]# ping -c 2 -s 1000 -M do 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 1000(1028) bytes of data.
1008 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.935 ms
1008 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.804 ms
#如果有响应,则代表这个 MTU 可以接受
[root@li ~]# ping -c 2 -s 8000 -M do 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 8000(8028) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
#如果没响应说明这个 MTU 数值太大了
不过,需要注意的是,由于 IP 数据报的报头就已经占用了 20bytes,再加上 ICMP 的报头有 8bytes,所以当你在使用 -s size 的时候,那个数据报的大小就需要先扣除 (20+8=28)的大小了。
2.2.2、两主机各节点分析:traceroute
[root@li ~]# traceroute [选项与参数] IP
选项与参数:
-n:可以不必进行主机的名称解析,单纯使用 IP
-U:使用 UDP 的 port 33433 来进行检测,这也是默认的检测协议
-I:使用 ICMP 的方式进行检测
-T:使用 TCP 进行检测,一般使用 port 80 检测
-w:若对方主机在几秒之内没有回应就说明不通...默认是 5 秒
-p 端口号:若不想使用 UDP 与 TCP 的默认端口,可在此改变端口
-i 设备:用在比较复杂的环境,如果网路接口很多很复杂时,才会用到这个参数
-g 路由:与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP
[root@li ~]# yum install traceroute
#1、检测我的主机与手机之间的各节点连接状态(我的主机连接在 IP 为 10.0.0.1 的路由器下,这台路由器桥接了 172.16.0.1 的路由器,手机则连接在这台路由器下)
[root@li ~]# traceroute -n 172.16.0.171
traceroute to 172.16.0.171 (172.16.0.171), 30 hops max, 60 byte packets
1 10.0.0.1 0.355 ms 0.365 ms 0.381 ms #先经过 10.0.0.1 这台路由器
2 172.16.0.171 16.212 ms 16.182 ms 17.334 ms
#2、检测到百度的节点信息
[root@li ~]# traceroute -n www.baidu.com
traceroute to www.baidu.com (61.135.185.32), 30 hops max, 60 byte packets
1 10.0.0.1 0.336 ms 0.350 ms 0.357 ms
2 172.16.0.1 3.561 ms 3.493 ms 3.405 ms
3 192.168.1.1 8.793 ms 10.312 ms 10.242 ms
4 222.136.56.1 14.093 ms 14.056 ms 14.053 ms
5 221.13.196.201 13.266 ms 221.13.196.205 13.411 ms 221.13.197.181 14.148 ms
6 61.168.28.85 32.559 ms 32.492 ms 61.168.28.89 39.739 ms
7 219.158.22.41 32.394 ms 219.158.98.185 29.700 ms 219.158.11.101 29.648 ms
8 124.65.194.82 29.582 ms 125.33.186.50 31.507 ms 124.65.194.82 29.801 ms
9 202.106.227.10 29.712 ms 26.629 ms 26.479 ms
10 202.106.43.30 29.753 ms 123.125.248.122 25.877 ms 123.125.248.106 25.813 ms
11 * * *
...(下面全是 * * *)
traceroute 这个命令会针对欲连接的目标的所有 node 进行 UDP 的超时等待,并检测回复的时间,每个节点检测三次。其中,返回星号的,代表该 node 可能设有某些防护措施,让我们发送的数据报信息被丢失掉。
#默认使用 UDP 检测,我们也可以使用 TCP 进行测试
[root@li ~]# traceroute -T -w 1 -n www.baidu.com
traceroute to www.baidu.com (61.135.169.121), 30 hops max, 60 byte packets
1 10.0.0.1 0.461 ms 0.529 ms 0.488 ms
2 61.135.169.121 6.069 ms 6.092 ms 6.114 ms
2.2.3、查看本机的网络连接与后门:netstat
[root@li ~]# netstat -[rn] #与路由有关的参数
[root@li ~]# netstat -[antulpc] #与网络接口有关的参数
选项与参数:
与路由有关的参数说明:
-r:列出路由表
-n:不使用主机名与服务名称,使用 IP 与 port number
与网络有关的参数说明:
-a:列出所有的连接状态,包括 tcp/udp/unix socket 等
-t:仅列出 TCP 数据报的连接
-u:仅列出 UDP 数据报的连接
-l:仅列出已在 Listen(监听)的服务的网络状态
-p:列出 PID 与 Program 的文件名
-c:可以设置几秒钟后自动更新一次
#1、列出当前的路由表状态,且以 IP 及 port number 进行显示
[root@li ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 ens33
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens33
#2、列出当前的所有网络连接状态,使用 IP 与 port number
[root@li ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.246:22 10.0.0.100:50428 ESTABLISHED
tcp 0 64 10.0.0.246:22 10.0.0.100:50427 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 19624 private/verify
unix 2 [ ACC ] STREAM LISTENING 19609 private/tlsmgr
...
netstat 的输出主要分为两大部分,分别是 TCP/IP 的网络接口部分,以及传统的 Unix Socket 部分。
#3、显示目前已经启动的网路服务
[root@li ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1035/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1202/master
tcp6 0 0 :::22 :::* LISTEN 1035/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1202/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 976/dhclient
通过参数 -p 我们可以知道启动这个服务的 PID 和服务名,如果想要关闭这个端口,可以直接 kill 删除 PID,也可以使用 killall 删除服务名即可。
#4、查看本机所有的网络连接状态
[root@li ~]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1035/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1202/master
tcp 0 0 10.0.0.246:22 10.0.0.100:50428 ESTABLISHED 1297/sshd: root@not
tcp 0 64 10.0.0.246:22 10.0.0.100:50427 ESTABLISHED 1293/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1035/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1202/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 976/dhclient
2.3、检测主机名与 IP 的对应:host、nslookup
关于主机名与 IP 的对应,主要的命令是 dig,不过还有两个简单的命令:
2.3.1、host
[root@li ~]# host [-a] hostname [server]
选项与参数:
-a:列出该主机的详细的各项主机名设置数据
[server]:可以使用不是由 /etc/resolv.conf 文件定义的 DNS 服务器 IP 来查询
#1、列出 www.baidu.com 的 IP
[root@li ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.185.32
www.a.shifen.com has address 61.135.169.121
可以看到,已经查询出 IP。那么这个 IP 是向谁查询的呢?其实就是写在 /etc/resolv.conf 那个文件里面的 DNS 服务器 IP。如果不想使用该文件内的主机来查询,可以这样做:
[root@li ~]# host www.baidu.com 223.5.5.5 #国内的一台 DNS 服务器 IP
Using domain server:
Name: 223.5.5.5
Address: 223.5.5.5#53
Aliases:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.121
www.a.shifen.com has address 61.135.185.32
[root@li ~]# host www.baidu.com 8.8.8.8 #当然也可以查国外的
www.wshifen.com has address 103.235.46.40
2.3.2、nslookup
[root@li ~]# nslookup [-query=[type]] [hostname|IP]
选项与参数:
-query=type:查询的类型,除了传统的 IP 与主机名的对应外,DNS 还有很多信息,所以我们可以查询很多不同的信息,包括 mx、cname等
#1、找出 www.baidu.com 的 IP
[root@li ~]# nslookup www.baidu.com
Server: 10.0.0.1
Address: 10.0.0.1#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.185.32
Name: www.a.shifen.com
Address: 61.135.169.121
#2、找出 172.16.0.171 的主机名
[root@li ~]# nslookup 10.0.0.183
183.0.0.10.in-addr.arpa name = riashittekiiPad.lan.
2.4、远程连接命令
2.4.1、终端机与 BBS 连接:telnet
[root@li ~]# telnet [host|IP [port]]
[root@li ~]# yum install telnet
#1、检测本地主机的 110 这个 port 是否正确启动
[root@li ~]# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused #没有启动
[root@li ~]# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 li.erver ESMTP Postfix
ehlo localhost
250-li.erver
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
2.5、文字接口下载器:wget
[root@li ~]# wget https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm
--2020-08-28 09:20:15-- https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm
正在解析主机 repo.zabbix.com (repo.zabbix.com)... 162.243.159.138, 2604:a880:1:20::b82:1001
正在连接 repo.zabbix.com (repo.zabbix.com)|162.243.159.138|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:451020 (440K) [application/x-redhat-package-manager]
正在保存至: “zabbix-agent-5.0.0-1.el7.x86_64.rpm”
50% [===========================> ] 229,113 26.4KB/s 用时 8.5s