网络管理
一 网卡名字
网卡名称规则

#1、传统命名
CentOS6之前采用的都是传统的命名方式,如以太网:eth1,eth0....
​
#2、可预知的命名方案
Centos7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比eth0更难读。比如ens33
​
可预知的命名方案例如:
①如果Fireware或BIOS为主板上集成的设备提供索引信息可用,则根据此索引进行命名,如:eno1, eno2, ...
②如果Fireware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, ...
③如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, ...
④如果用户显示定义,也可根据MAC地址命名,例如:enx122161ab212
#上述均不可用时,则仍使用传统方式命名;
​
可预知的命名方案,如本机网卡名为ens33,命名格式的组成如下:
en:ethernet
wl:wlan     #无线局域网
ww:wwan     #无线广域网
​
名称类型:
o<index>         #集成设备的设备索引号;
s<slot>          #扩展槽对的索引号;
x<MAC>           #基于MAC地址的命名;
p<bus>s<slot>    #基于总线及槽的拓扑结构进行命名;

了解网卡命名的策略:

规则1:如果Firmware或者BIOS提供的设备索引信息可用就用此命名。比如eno1。否则使用规则2
​
规则2:如果Firmware或Bios的PCI-E扩展插槽可用就用此命名。比如ens1,否则使用规则3
​
规则3:如果硬件接口的位置信息可用就用此命名。比如enp2s0
​
规则4:根据MAC地址命名,比如enx7d3e9f。默认不开启。
​
规则5:上述均不可用时回归传统命名方式
​
上面的所有命名规则需要依赖于一个安装包:biosdevname
​
biosdevname和net.ifnames属于两种不同的命名规范
​
CentOS-7中默认biosdevname的值为0,net.ifnames的值为1。

配置回归传统命名方式

#修改网卡配置文件名称
[root@egon ~]# cd /etc/sysconfig/network-scripts/
[root@egon ~]# mv ifcfg-ens33 ifcfg-eth0
​
#修改网卡配置文件设备名称
[root@egon ~]# sed -i "s#ens33#eth0#g" ifcfg-eth0
​
##GRUB添加kernel参数
[root@egon ~]# vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="rhgb quiet 'net.ifnames=0 biosdevname=0'"
​
#加载到引导分区
[root@egon ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
​
#重启系统生效
[root@egon ~]# reboot

二 基本网络配置
查看网卡信息

# 查看当前系统所连接的所有网卡
[root@egon ~]# lspci |grep -i eth
​
# 确认网线已经连接好,以eth0 为例
[root@egon ~]# mii-tool eth0
eth0:negotiated 1000baseT-FD flow-control,link ok # link ok网卡能够被识别,并且接了有效的网线
​
[root@egon ~]# mii-tool eth1
SIOCGMIIPHY on 'eth1' failed: Invalid argument
网卡虽然能够被识别(网卡已经被驱动了,但不能用:网卡配置错误,网线没接等)

ifconfig命令

1、ifconfig -a 查看所有网卡信息(包括未激活的网卡)
2、ifconfig eth0 查看单个网卡信息
3、ifconfig eth0 192.168.1.122 netmask 255.255.255.0 临时设定IP和掩码(重启服务或者系统都失效)
4、ifconfig eth0 192.168.1.122/24 
​
5、ifconfig eth0:1 192.168.0.2 netmask 255.255.255.0 配置子接口
# 删除:下述两种方式都可以
ifconfig eth0:0 down
ifconfig eth0:1 del 192.168.0.2  # 删除,不必加掩码
​
6、开启与关闭
ifconfig eth0 down|up  # 不加载网卡配置文件
ifdown eth0 |ifup eth0  # 加载网卡配置文件
​
7、设置网卡最大传输单元
ifconfig eth0 mtu 1500
​
8、开启关闭模式(了解)
ifconfig eth0 promisc  # 开启繁杂模式
ifconfig eth0 -promisc  # 关闭繁杂模式
​
ifconfig ens33 multicast  # 开启多播
ifconfig ens33 -multicast  # 关闭多播
​
ifconfig eth0 allmulti  # 开启
ifconfig eth0 -allmulti  # 关闭
​
9、添加、删除ipv6地址
ifconfig eth0 add 3ffe:3240:800:1005::2/64
ifconfig eth0 del 3ffe:3240:800:1005::2/64

ifconf命令查看到的结果解释

[root@egon ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         # 从flags可知该接口已启用,支持广播、组播,MTU:1500(最大传输单元):1500字节
         # 其他了解知识:
         // UP:表示“接口已启用”。
         // BROADCAST :表示“主机支持广播”。
         // RUNNING:表示“接口在工作中”。
         // MULTICAST:表示“主机支持多播”。
    
        inet 192.168.12.42  netmask 255.255.255.0  broadcast 192.168.12.255
        # IPv4地址           子网掩码               广播地址
        
        inet6 fe80::499e:c2c1:f5ed:3900  prefixlen 64  scopeid 0x20<link>
        # IPv6地址                        掩码长度       作用域,link表示仅该接口有效
        
        ether 00:0c:29:86:f8:59  txqueuelen 1000  (Ethernet)
        #网卡接口的MAC地址         传输队列长度       接口类型为Ethernet
        
        RX packets 5708  bytes 1061424 (1.0 MiB)
        # 表示开机后此接口累积接收的报文个数,总字节数
        
        RX errors 0  dropped 833  overruns 0  frame 0
        # 表示开机后此接口累积接收报文错误数,丢弃数,溢出数(由于速度过快而丢失的数据包数),冲突的帧数
        
        TX packets 102  bytes 16768 (16.3 KiB)
        # 表示开机后此接口累积发送的报文个数,总字节数
        
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        # 表示开机后此接口累积发送报文错误数,丢弃数,溢出数(由于速度过快而丢失的数据包数),
        # carrier 载荷数(发生carrier错误而丢失的数据包数)
        # collisions 冲突数

ethtool解决网卡丢包严重问题

储备知识

# 1、储备知识1:全双工与半双工,目前网卡一般都应该采用全双工模式
全双工传输英文写法是:Full-Duplex Transmissions
是指交换机在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的交换机都支持全双工。
​
全双工的好处在于迟延小、冲突少、速度快。
与之对应的是【半双工】这个概念:就是指一个时间段内只有一个动作发生,举个简单例子,一天窄窄的马路,同时只能有一辆车通过,当目前有两量车对开,这种情况下就只能一辆先过,等到头儿后另一辆再开,这个例子就形象的说明了半双工的原理。早期的对讲机、以及早期集线器等设备都是实行半双工的产品。随着技术的不断进步,半双工会逐渐退出历史舞台。
    
# 2、储备知识2:CRC   
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性

    
# 3、储备知识3:网卡工作原理
网卡发包:
    1、ip包+14个字节的mac头变成数据帧frame
    2、frame拷贝到网卡芯片内部的缓冲区,由网卡处理
    3、网卡芯片为frame添加头部同步信息和CRC校验,此时才是真正可以发送的packet,然后发送该packet
网卡收包:
    1、网络包packet到达网卡,网卡先检查包packet的CRC校验,保证其完整性和正确性,然后去掉它的头得到frame
    2、网卡将frame拷贝到网卡内部的FIFO缓冲区
    3、网卡驱动程序产生硬件中断,把frame从网卡拷贝到内存中,接下来就交给内核处理
    
网卡丢包!!!
    内核通常需要快速的拷贝网络数据包到系统内存!!!
    因为网卡上接收网络数据包的缓存大小固定,而且相比系统内存也要小得多。
    所以上述拷贝动作一旦被延迟,必然造成网卡FIFO缓存溢出 - 进入的数据包占满了网卡的缓存,后续的包只能被丢弃,这也应该就是ifconfig里的overrun的来源。
​

丢包问题解决

# 丢包排查
网卡工作在数据链路层,数据量链路层,会做一些校验,封装成帧。我们可以查看校验是否出错,确定传输是否存在问题。然后从软件层面,是否因为缓冲区太小丢包。
​
# 1 先查看硬件情况
一台机器经常收到丢包的报警,先看看最底层的有没有问题:
# 1.1 查看工作模式是否正常
[root@egon ~]# ethtool ens33 | egrep 'Speed|Duplex'
    Speed: 1000Mb/s
    Duplex: Full
        
# 1.2 查看CRC校验是否正常     
[root@egon ~]# ethtool -S ens33 | grep crc # crc错误值大通常是因为服务器外部的网络环境有问题导致的
     rx_crc_errors: 0
        
-----------Speed,Duplex,CRC 之类的都没问题,基本可以排除物理层面的干扰----------
​
# 2 通过 ifconfig 可以看到 overruns 是否一直增大,如果查看结果是一直增大
for i in `seq 1 100`; do ifconfig ens33 | grep RX | grep overruns; sleep 1; done
​
# 3 调整网卡缓冲区
[root@egon ~]# ethtool -g ens33
Ring parameters for ens33:
Pre-set maximums:  # 最大可以设置的值
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:  # 当前设置的值
RX:     256
RX Mini:    0
RX Jumbo:   0
TX:     256
[root@egon ~]# ethtool -G ens33 rx 2048  # 调大
[root@egon ~]# ethtool -G ens33 tx 2048  # 调大
[root@egon ~]# 
[root@egon ~]# ethtool -g ens33
Ring parameters for ens33:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     2048
RX Mini:    0
RX Jumbo:   0
TX:     2048
​
[root
@egon ~]#

ethtool网卡降速

[root@egon ~]# ethtool -s ens33 speed 100 duplex full
[root@egon ~]# ethtool -s ens33 speed 100 duplex full autoneg off  # 关闭自适应才能设置成功
[root@egon ~]# ethtool ens33  # 查看
​
若想完成永久设置,可以将上述ethtool设置写入/etc/rc.d/rc.local之中。
然后记住必须要加一个x权限
[root@egon ~]# chmod +x /etc/rc.d/rc.local 

ping命令

ping 目标IP地址  # ctrl+c结束 测试是否两台主机网络是否通
ping -c 次数 目标IP地址
​
# 在自己的机器上执行,则禁用别人ping自己
[root@egon ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

NetworkManager服务

NetworkManager作用:是redhat6自带的检测网络、自动连接网络的图形化工具。NetworkManager 服务会干扰网络配置,如:DNS经常会被刷掉,所以通常关闭
[root@egon ~]# systemctl stop NetworkManager
[root@egon ~]# systemctl disable NetworkManager

网卡相关的配置文件:/etc/sysconfig/network-scripts/ifcfg-ethX 接口的网络配置文件

# 打开网卡配置文件,完成静态ip配置,修改完毕后重启网络服务即可:systemctl restart network
DEVICE=eth0         <-- 网卡名字
BOOTPROTO=static       <---- dhcp 动态获取IP
                          <---- none 根据其他选项决定动态还是静态
                          <---- static肯定是手工指定IP
NM_CONTROLLED=no          <---如果NetworkManager服务启用,该网卡配置文件也不受该服务管理
ONBOOT=yes          <---- 网络服务启动的时候,yes代表激活状态 , no 代表禁用
TYPE=Ethernet
IPADDR=10.1.1.11        <-- IP 地址
NETMASK=255.255.255.0     <-- 子网掩码
GATEWAY=10.1.1.1          <-- 默认网关
DNS1=10.1.1.1             <-- DNS1 服务器
DNS2=8.8.8.8              <-- DNS2 服务器
HWADDR=14:da:e9:eb:a9:61  <---MAC地址
USERCTL=no           <---是否允许普通用户启动或者停止该网卡
IPV6INIT=no          <---是否在该网卡上启动IPV6的功能
PEERDNS=yes          <---是否允许网卡在启动时向DHCP服务器查询DNS信息,
                          # 设置为yes时,此文件设置的DNS将覆盖/etc/resolv.conf,
                          # 若开启了DHCP,则默认为yes,所以dhcp的dns也会覆盖/etc/resolv.conf

dns配置文件

1)/etc/resolv.conf DNS解析文件,
[root@egon ~]# cat /etc/resolv.conf  # 设置DNS指向,最多3个
nameserver 8.8.8.8  # 对应网卡配置文件中的配置项DNS1
nameserver 192.168.12.1  # 对应网卡配置文件中的配置项DNS2
​
​
2)/etc/hosts 本地名称解析文件,优先于DNS
​
ps:dns检索优先级
浏览器DNS缓存->本地系统DNS缓存->本地计算机HOSTS文件->ISP DNS缓存->递归or迭代搜索

永久设置主机名

[root@egon ~]# hostnamectl set-hostname egon.xxx.com
[root@egon ~]# hostname
egon.xxx.com
[root@egon ~]# 
[root@egon ~]# cat /etc/hostname 
egon.xxx.com

端口和服务的对应关系

[root@egon ~]# grep '^ftp\|^ssh' /etc/services 

三 路由route
3.1 交换与路由
交换: 指同网络访问。两台机器连在同一个交换机上,配置同网段的不同ip就可以直接通迅 (这里不讨论三层交换).

网络管理_路由表

路由: 指跨网络访问的路径选择

网络管理_linux_02

3.2 Linux处理数据包的过程
在解释Linux路由相关的内容时,我们先来了解一下数据包转发功能以及因此涉及到的路由决策,这对理清路由和未来的防火墙有重要帮助。

linux处理数据包过程如下图
网络管理_路由表_03

当向外界主机发送数据时,在它从网卡流入后需要对它做路由决策,根据其目标决定是流入本机的用户空间还是在内核空间就直接转发给其他主机

# 1、如果是流入本机用户空间的数据,
则数据会从内核空间进入用户空间(被应用程序接收并处理);
此时如果本机用户空间的应用程序不需要产生新的数据包对外发送,那便不再涉及到从某个网卡流出数据;
但是如果本机用户空间的应用程序需要产生新的数据包对外发送,那便需要从某个网卡流出数据,但在流出之前,也需要做路由决策:根据目标决定从哪个网卡流出。
​
# 2、如果不是流入本机用户空间的数据,仅仅只是要经由本机把数据包转发给其他主机
则必然涉及到从某个网卡流出,此时数据包必须从流入网卡完整地转发给流出网卡,这要求Linux主机能够完成这样的转发。但Linux主机默认未开启ip_forward功能,这使得数据包无法转发而被丢弃。
​
ps:Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认则不能转发。若要开启linux主机的转发功能,有很多方式,如下所示

临时开启linux主机的路由转发功能,重启网络服务则失效

# 方式1:
echo 1 > /proc/sys/net/ipv4/ip_forward
​
# 方式2:
sysctl -w net.ipv4.ip_forward=1

若要永久生效,则应该写入配置文件。

# 在CentOS 6中:
将/etc/sysctl.conf文件中的"net.ipv4.ip_forward"值改为1即可
​
#在CentOS 7中:
systemd管理了太多的功能,sysctl的配置文件也分化为多个,包括/etc/sysctl.conf、/etc/sysctl.d/*.conf和/usr/lib/sysctl.d/*.conf,并且这些文件中默认都没有net.ipv4.ip_forward项。当然,直接将此项写入到这些配置文件中也都是可以的,建议写在/etc/sysctl.d/*.conf中,这是systemd提供自定义内核修改项的目录。例如:
​
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf

可以使用以下几种方式查看是否开启了转发功能。

[root@egon ~]# sysctl net.ipv4.ip_forward
[root@egon ~]# cat /proc/sys/net/ipv4/ip_forward
[root@egon ~]# sysctl -a | grep ip_forward

!!!注意了注意注意了:只有当本机被别人当成网关并且本机开启路由转发功能时,别人发来的请求包,本机才会帮忙转发,这一点很重要,请务必记住

如果Linux主机有多块网卡,如果不开启数据包转发功能,则这些网卡之间是无法互通的。

主机1----------------------》eth0 主机2

etht1——————————>主机3

172.16.10.11/24 172.16.10.12/24

192.168.100.12/24 192.168.100.11/24

# 到达该Linux主机2的数据包无法从eth0交给eth1或者从eth1交给eth0,除非Linux主机开启了数据包转发功能。

另外,IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号),只要能和其中一个地址通信,就能和另一个地址通信,而不需要开启数据包转发功能

主机1----------------------》eth0 主机2 etht1

192.168.12.46/24 192.168.12.42/24 172.16.10.24/24

# 例如
主机2有两网卡
eth0:192.168.12.42
eth1:172.16.10.24
​
主机1与主机2的eth0在一个网段里
ip地址为:192.168.12.46
网关指向:192.168.12.42
若主机1执行ping 172.16.10.24,结果将是通的,因为地址属于内核,从主机2的ens33进来的数据包被内核分析时,发现目标地址为本机地址,直接就回应192.168.12.46,回应数据包继续从eth0出去。
​
示范:
主机2:
[root@egon ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.12.42  netmask 255.255.255.0  broadcast 192.168.12.255
        inet6 fe80::499e:c2c1:f5ed:3900  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:86:f8:59  txqueuelen 1000  (Ethernet)
        RX packets 11162  bytes 2670925 (2.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 653  bytes 65271 (63.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.10.24  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::1dde:f649:4124:37fe  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:86:f8:63  txqueuelen 1000  (Ethernet)
        RX packets 1698  bytes 413552 (403.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35  bytes 7070 (6.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
# 主机1
[root@egon ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.12.46  netmask 255.255.255.0  broadcast 192.168.12.255
        inet6 fe80::644f:3e62:6268:6b44  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::d636:4f02:54b8:ad9  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::499e:c2c1:f5ed:3900  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:d0:eb  txqueuelen 1000  (Ethernet)
        RX packets 1597  bytes 346818 (338.6 KiB)
        RX errors 0  dropped 1  overruns 0  frame 0
        TX packets 373  bytes 45758 (44.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.12.1    0.0.0.0         UG    100    0        0 ens33
192.168.12.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@egon ~]# route del default gw 192.168.12.1
[root@egon ~]# route add default gw 192.168.12.42
[root@egon ~]# ping -c 1 172.16.10.24  # 可以ping通

3.3 网关/路由
Linux上分为3种路由:

主机路由:掩码位32位,Destination精确到某一台主机,
所以主机路由是直接指明到某台具体的主机怎么走,主机路由也就是所谓的静态路由
网络路由:掩码小于32位,Destination精确到某一个网段的主机
所以网络路由指明到某类网络怎么走
默认路由:掩码通常为0
不走主机路由的和网络路由的、全部都走默认路由。操作系统上设置的默认路由一般也称为网关。
路由是区分优先级的:若Linux上到某主机有多条路由可以选择,这时候会挑选优先级高的路由

大前提:
主机范围越小、越精确、优先级越高,而缩小主机范围的恰恰就是子网掩码,掩码越长范围越小、越精确、优先级越高
​
优先级区分:
# 1、在Linux中,路由条目的优先级确定方式是先匹配掩码位长度,掩码越长的优先级高
也就是说,掩码位长的路由条目优先级一定比掩码位短的优先级高,所以主机路由的优先级最高,然后是直连网络(即同网段)的路由(也算是网络路由)次之,再是网络路由,最后才是默认路由即网关。
​
# 2、若路由条目的掩码长度相同,则比较节点之间的管理距离(比如metric),管理距离短的生效。

例如1:在本机查看到路由表如下,

[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 eth0
172.16.10.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
192.168.0.0     192.168.100.70  255.255.0.0     UG    0      0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.78  0.0.0.0         255.255.255.255 UH    0      0        0 eth0

在本机ping 192.168.5.20

# 先检索掩码长的路由条件,即按照如下顺序
255.255.255.255 > 255.255.255.0 > 255.255.0.0 > 0.0.0.0 
​
于是先对应192.168.100.78发现无法匹配,然后比对192.168.100.0,发现也无法匹配,接着再匹配192.168.0.0这条网络路由条目,发现能匹配,所以选择该路由条目,从eth0发出数据包

例2:如下路由表。由于两块网卡eth0和eth1都是192.168.100.0/24网段地址,所以它们的路由条目在掩码长度的匹配上是相同的,但是和eth0直连的网段主机通信时,肯定会选择eth0这条路由条目(即第二条),因为eth1和该网段主机隔了一个eth0,距离增加了1。

[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     101    0        0 eth1

3.4 route命令
route命令用于显示和管理路由表。当使用了add或del选项时,route命令将设置路由条目,否则route命令将显示路由表。

要显示路由表信息,只需简单的route -n即可,其中-n选项表示不解析主机名。

例如:

如果本机ens33这个网卡有172.16.10.0/24这个网段的IP,默认就会产生一条路由条目
172.16.10.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
​
169.254.0.0/24 是保留网关
192.168.100.2 是配置的网关
​
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 eth0
172.16.10.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
192.168.0.0     192.168.100.70  255.255.0.0     UG    0      0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.78  0.0.0.0         255.255.255.255 UH    0      0        0 eth0

对于CentOS 6以上的系统,请忽略Metric和Ref两列,它们已经不被内核使用,只是有些路由软件可能会用上。

对于Flags列,如果没有安装路由软件,则只可能出现下面的3种值:

U (route is up)
​
H (target is a host)
​
G (use gateway,也即是设置了下一跳的路由条目)

若要管理路由表,则使用add或del选项。

route [add/del] [-host/-net/default] [address[/mask]] [netmask] [gw] [dev]
​
选项说明:
add/del:增加或删除路由条目
-net:增加或删除的是一条网络路由
-host:增加或删除的是一条主机路由
default:增加或删除的是一条默认路由
netmask:明确使用netmask关键字指定掩码,要可以不使用该选项直接在地址上使用cidr格式的掩码,即IP/MASK。
gw:指定下一跳的地址。要求下一跳地址必须是能到达的,且一般是和本网段直连的接口。
dev:强制将路由条目关联到指定的接口上。一般内核会自动判断路由条目应该关联到哪个网络接口。
​
# route命令添加的多少临时生效

例如:

(1).添加和删除默认路由

[root@egon ~]# route add default gw 192.168.100.10
[root@egon ~]# route del default
[root@egon ~]# route del default gw 192.168.100.10   # 若有多条默认路由,则再加上gw即可唯一删除指定条目

因为默认路由的目的地是0.0.0.0,所以操作默认路由也可以使用0.0.0.0替代default关键字,但这样就麻烦的多了,还是用default会简单一点。

(2).添加和删除网络路由

[root@egon ~]# route add -net 172.16.10.0/24 gw 192.168.100.70
[root@egon ~]# route add -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70

若实在不知道下一跳给谁,那么指定本机接口也是可以的。

[root@egon ~]# route add -net 172.16.10.0/24 dev eth0

删除路由可以直接在增加路由的语句上将add改为del关键字。如

[root@egon ~]# route del -net 172.16.10.0/24 gw 192.168.100.70
[root@egon ~]# route del -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
[root@egon ~]# route del -net 172.16.10.0/24 dev eth0

但大多数时候,可以偷懒,只要能唯一确定删除的是哪条路由即可。如:

[root@egon ~]# route del -net 172.16.10.0/24

(3)添加和删除主机路由

[root@egon ~]# route add -host 172.16.10.55 gw 192.168.10.20
[root@egon ~]# route del -host 172.16.100.55

3.5 配置永久路由
根据接口创建路由配置文件/etc/syconfig/network-scripts/route-ethX,要从那个接口出去X就是几。

路由配置文件的配置格式非常简单,每一行一个路由条目,先是要到达的目标,然后是via关键字,最后是下一跳地址。要求下一跳必须能到达,且一般都和ethX同网段。

DEST via nexthop

例如eth0网卡的IP地址是192.168.10.123,要通过网卡eth0出去到达10.0.0.10,那么下一跳的地址要和eth0的地址在同段,如192.168.10.222。

10.0.0.0 via 192.168.10.222

添加主机路由、默认路由、网段路由示例如下,其中dev是可以省略的,因为没有任何用处,配置在哪个eth文件中就会从哪个接口出去。

#默认路由
default     via 192.168.100.1
1.1.
0.0.0.0/0   via 192.168.100.1
​
#网段路由
192.168.10.0/24   via 192.168.100.1
​
#主机路由
192.168.100.52/32 via 192.168.100.33 dev eth1

配置完后,重启network服务即可立即生效。

route-ethX文件的还有另外一种永久路由的配置写法,但上面的方法更简单快捷,所以此处就不多说了。

配置永久路由时,需要注意几点:

(1).route-ethX的对应网卡配置文件ifcfg-ethX必须存在,否则路由无效。(注意:对于虚拟机,通常新添加的网卡都没有对应的ifcfg-ethX文件,但ifconfig却能找到该网卡)

(2).如果在文件中配置永久默认路由,则必须保证所有使用了DHCP服务的网卡配置文件ifcfg-ethX中的DEFROUTE指令设置为"no",表示DHCP不设置默认路由。

(3).如果在route-ethX文件中配置永久路由,且该网卡使用了DHCP服务分配地址,则必须保证该网卡的ifcfg-ethX文件中的PEERROUTES指令设置为"no",表示DHCP设置的路由允许被覆盖。

3.6 练习
首先创建仅主机模式的四个”交互机“:vmnet1、vmnet2、vmnet3、vmnet4
网络管理_缓存_04

网络管理_ip地址_05

网络管理_路由表_06

网络管理_配置文件_07

然后创建四台虚拟机,四台主机执行下述三条命令

iptables -F
setenforce 0
systemctl stop NetworkManager
​
!!!然后按照下属网络拓扑配置静态IP,注意子网掩码一定要与vmnet的配置保持一致,即24位
配置文件参考如下
[root@egon ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=static
IPADDR=2.2.2.2
NETMASK=255.255.255.0
NAME=eth1
DEVICE=eth1
ONBOOT=yes

网络拓扑如下
网络管理_ip地址_08

虚拟机1

[root@egon ~]# ifconfig 
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 1.1.1.8  netmask 255.255.255.0  broadcast 1.1.1.255
        inet6 fe80::20c:29ff:fe86:f863  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:86:f8:63  txqueuelen 1000  (Ethernet)
        RX packets 308  bytes 32432 (31.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 251  bytes 36999 (36.1 KiB)
        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 36  bytes 2912 (2.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 36  bytes 2912 (2.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     100    0        0 ens37
[root@egon ~]# 

虚拟机2

[root@egon ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 1.1.1.2  netmask 255.255.255.0  broadcast 1.1.1.255
        inet6 fe80::20c:29ff:feef:d0eb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:d0:eb  txqueuelen 1000  (Ethernet)
        RX packets 241  bytes 29171 (28.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 202  bytes 38291 (37.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 2.2.2.2  netmask 255.255.255.0  broadcast 2.2.2.255
        inet6 fe80::20c:29ff:feef:d0f5  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:d0:f5  txqueuelen 1000  (Ethernet)
        RX packets 216  bytes 44837 (43.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 242  bytes 27730 (27.0 KiB)
        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 21  bytes 2352 (2.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 2352 (2.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
[root@egon ~]# 

虚拟机3

[root@egon ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 2.2.2.3  netmask 255.255.255.0  broadcast 2.2.2.255
        inet6 fe80::20c:29ff:fe0f:5b1c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:0f:5b:1c  txqueuelen 1000  (Ethernet)
        RX packets 252  bytes 40507 (39.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 522  bytes 87027 (84.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 3.3.3.3  netmask 255.255.255.0  broadcast 3.3.3.255
        inet6 fe80::20c:29ff:fe0f:5b26  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:0f:5b:26  txqueuelen 1000  (Ethernet)
        RX packets 209  bytes 31979 (31.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 490  bytes 68919 (67.3 KiB)
        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 448  bytes 38080 (37.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 448  bytes 38080 (37.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
2.2.2.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
3.3.3.0         0.0.0.0         255.255.255.0   U     101    0        0 ens37
[root@egon ~]# 

虚拟机4

[root@egon ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 3.3.3.4  netmask 255.255.255.0  broadcast 3.3.3.255
        inet6 fe80::20c:29ff:fe75:fd9f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:75:fd:9f  txqueuelen 1000  (Ethernet)
        RX packets 268  bytes 49290 (48.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 424  bytes 48665 (47.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 4.4.4.4  netmask 255.255.255.0  broadcast 4.4.4.255
        inet6 fe80::20c:29ff:fe75:fda9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:75:fd:a9  txqueuelen 1000  (Ethernet)
        RX packets 126  bytes 13057 (12.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 404  bytes 47702 (46.5 KiB)
        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 112  bytes 9520 (9.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112  bytes 9520 (9.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
3.3.3.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
4.4.4.0         0.0.0.0         255.255.255.0   U     101    0        0 ens37
[root@egon ~]# 

做下述实验前,egon再次温馨提示你:

**!!!注意了注意注意了:只有当本机被别人当成网关并且本机开启路由转发功能时,别人发来的请求包,本机才会帮忙转发,这一点很重要,请务必记住**
1.在虚拟机1上ping1.1.1.2,能不能通? 如果不能通怎么解决?
# 分析
可以通
因为本机1.1.1.8与目标主机1.1.1.2 两台机器处于一个LAN中,并且两台机器上的路由表里具有Destination指向对方的网段路由条目
虚拟机1:1.1.1.8-------》Vmnet1《---------虚拟机2:1.1.1.2
​
# 用route -n查看虚拟机1的路由
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
发现路由条目里包含了一条网络路由,则数据包就会从对应路由条目后面的网卡出去
​
# 如果我们删掉该网络路由,则无法ping通
[root@egon ~]# route del -net 1.1.1.0/24
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
[root@egon ~]# ping 1.1.1.2 # 无法ping通
connect:Network is unreachable
​
# 可以添加网络路由,也可以添加主机路由,只要能到达虚拟机2就可以
[root@egon ~]# route add -host 1.1.1.2/32 dev ens37 # 主机路由必须指定设备
[root@egon ~]# ping 1.1.1.2 # 可以ping通
[root@egon ~]# route del -host 1.1.1.2/32 dev ens37


2.在前面ping通的基础上,继续在vm1上ping2.2.2.2,能不能通? 如果不能通怎么解决?
# 分析
不通,
因为本机1.1.1.8与目标主机1.1.1.2 两台机器处于一个LAN中,但虚拟机1的路由表里没有Destination指向2.2.2.0/24网段的路由条目
虚拟机1:1.1.1.8-------》Vmnet1《---------虚拟机2:1.1.1.2
​
# 用route -n查看虚拟机1的路由
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 ens37
[root@egon ~]# ping 2.2.2.2 # 网络不可达,因为压根没有任何的Destination指向2.2.2.2
connect:Network is unreachable
​
# 解决方式: 在虚拟机1上添加到达2.2.2.0/24网段的路由,其实主机路由、默认路由其实都可以,只要Destination能到达1.1.1.2即可
[root@egon ~]# route add -net 2.2.2.0/24 dev ens37
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
[root@egon ~]# ping 2.2.2.2 # 可以ping通
​
虚拟机1发送的包:源ip1.1.1.8 目标ip2.2.2.2
该数据包的目标ip对上了虚拟机1路由表哦的第二条,于是顺着网卡ens37发了出去,发到了交换机Vmnet1里
​
虚拟机1与虚拟机2正是通过Vmnet1交换机连接的,于是虚拟机2会收到该数据包,虽然此时虚拟机2用来收包的网卡是1.1.1.0段的网卡,但是虚拟机2在做内核分析时会发现目标ip:2.2.2.2就是自己机器上的、压根不会搭理是哪个网卡的,所以会正常接收和处理该包
​
虚拟机2回复的包:源ip2.2.2.2 目标ip1.1.1.8
该数据包的目标ip也能对应上虚拟机2路由表的条目,请自行查阅


3.在前面ping通的基础上,继续在vm1上ping2.2.2.3,能不能通? 如果不能通怎么解决?
# 分析
不通,
虚拟机1的数据包需要经过虚拟机2来转发,虽然在实验2我们为虚拟机1添加了到达2.2.2.0/24段的路由,数据包沿着虚拟机的ens33网卡发送到虚拟机2同网段的网卡,但虚拟机2压根不会帮你转发,因为虚拟机1根本没有将网关指向虚拟机2,此时虚拟机2即便开启了路由转发也没用
虚拟机1:1.1.1.8--》Vmnet1《--虚拟机2:1.1.1.2 2.2.2.2--》Vmnet2《--虚拟机3:2.2.2.3
​
# 在虚拟机1上:
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
[root@egon ~]# ping 2.2.2.3 # 无法ping通,但是沿着本机的ens37发给了虚拟机2同网段的网卡
[root@egon ~]# route add -net 2.2.2.0/24 gw 1.1.1.2 # 添加网关指向虚拟机2,这样虚拟机2才有帮我们转发数据包的可能
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
​
# 在虚拟机2上:
[root@egon ~]# route -n # 我们要找的目标是2.2.2.3,在虚拟机2上匹配到Destination:2.2.2.0,要想顺着eth1转发出去,需要开启虚拟机2的转发功能
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
[root@egon ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
​
在虚拟机3上:
[root@egon ~]# route -n # 虚拟机3在收到虚拟机2转发过来的包后,需要回包,回包的目标地址为虚拟机1的地址1.1.1.8,而在虚拟机3上没有任何Destination匹配成功,并且虚拟机3也不跟虚拟机1链接在一个LAN中,所以只能为虚拟机3添加网关指向虚拟机2,也借助虚拟机2帮助转发
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
2.2.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
3.3.3.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37
[root@egon ~]# route add -net 1.1.1.0/24 gw 2.2.2.2 # 只要目标符号即可,可以是网络路由
[root@egon ~]# route del -net 1.1.1.0/24 gw 2.2.2.2
[root@egon ~]# route add -host 1.1.1.8/32 gw 2.2.2.2 # 只要目标符合即可,即也可以是主机路由
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.8 2.2.2.2 255.255.255.255 UGH 0 0 0 ens33
2.2.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
3.3.3.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37
[root@egon ~]#


4.在前面ping通的基础上,继续在vm1上ping3.3.3.3,能不能通? 如果不能通怎么解决?
不能ping通,解决思路略,下述操作已经做过的话就不需要重复做了
​
在虚拟机1上:
[root@egon ~]# route add -net 3.3.3.0/24 gw 1.1.1.2
​
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
3.3.3.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
​
​
在虚拟机2上
[root@egon ~]# echo 1 > /proc/sys/net/ipv4/ip_forward # 实验3中已经做过了,此处不需要再做了
[root@egon ~]# route add -net 3.3.3.0/24 dev eth1
​
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
[root@egon ~]#
​
在虚拟3上:
[root@egon ~]# route add default gw 2.2.2.3 # 实验3中已经做过了,此处不需要再做了
​
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.8 2.2.2.2 255.255.255.255 UGH 0 0 0 ens33
2.2.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
3.3.3.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37
[root@egon ~]#


5.在前面ping通的基础上,继续在vm1上ping3.3.3.4,能不能通? 如果不能通怎么解决?
不同ping通,
解决思路:虚拟机1需要让虚拟机2帮忙转发包,虚拟机2需要虚拟机3帮忙转发包,虚拟机4回包的时候需要指定网关为虚拟机3
​
下述操作已经做过的话就不需要重复做了
​
# 虚拟机1:到达3.3.3.0/24段的网关指向1.1.1.2,让其帮忙转发,已经配置好了
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
3.3.3.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
​
# 虚拟机2:到达3.3.3.0/24段的网关指向2.2.2.3,让其帮忙转发,需要配置
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
[root@egon ~]# route add -net 3.3.3.0/24 gw 2.2.2.3
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
3.3.3.0 2.2.2.3 255.255.255.0 UG 0 0 0 eth1
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
[root@egon ~]# echo 1 > /proc/sys/net/ipv4/ip_forward # 已经开启过了,此处只为提醒读者
​
​
# 在虚拟机3上开启路由转发
[root@egon ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
​
# 在虚拟机4上添加默认网关
[root@egon ~]# route add -net 1.1.1.0/24 gw 3.3.3.3


6.在前面ping通的基础上,继续在vm1上ping4.4.4.4,能不能通? 如果不能通怎么解决?
不同ping通,
解决思路:略
​
# 虚拟机1:到达4.4.4.0/24段的网关指向1.1.1.2,让其帮忙转发,需要配置
route add -net 4.4.4.0/24 gw 1.1.1.2
​
# 虚拟机2:到达4.4.4.0/24段的网关指向2.2.2.3,让其帮忙转发,需要配置
route add -net 4.4.4.0/24 gw 2.2.2.3
echo 1 > /proc/sys/net/ipv4/ip_forward
​
# 虚拟机3:到达4.4.4.0/24段的路由(主机路由、网络路由、默认路由均可)
route add -net 4.4.4.0/24 dev ens37 #设备为3.3.3.0段的网卡,因为该网卡与虚拟机4同链在Vmnet4上
echo 1 > /proc/sys/net/ipv4/ip_forward
​
# 虚拟机4:到达1.1.1.0段的网关指向3.3.3.3,让其帮忙转发,之前已经配置过了
[root@egon ~]# route add -net 1.1.1.0/24 gw 3.3.3.3
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 3.3.3.3 255.255.255.0 UG 0 0 0 ens33
3.3.3.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
4.4.4.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37


7.路由优化
# 以虚拟机1为例,除了第一个路由条目外,其他的路由条目(包括第三条在内)其实都是要送给1.1.1.2的
[root@egon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
3.3.3.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
4.4.4.0 1.1.1.2 255.255.255.0 UG 0 0 0 ens37
[root@egon ~]#
# 所以我们可以统一用一条即可,这就是默认路由的来历
[root@egon ~]# route del -net 2.2.2.0/24
[root@egon ~]# route del -net 2.2.2.0/24 # 我没写错,就是要再删一次
[root@egon ~]# route del -net 3.3.3.0/24
[root@egon ~]# route del -net 4.4.4.0/24
​
[root@egon ~]# route add default gw 1.1.1.2
​
测试:
ping -c 1 1.1.1.2
ping -c 1 2.2.2.2
​
ping -c 1 2.2.2.3
ping -c 1 3.3.3.3
​
ping -c 1 3.3.3.4
ping -c 1 4.4.4.4
​
# 其他虚拟机路由条目优化思路相同,懒得写了

四 arp和arping命令
维护或查看系统arp缓存,该命令已废弃,使用ip neigh代替。

arp为地址解析协议,将给定的ipv4地址在网络中查找其对应的MAC地址。

一般会使用arp协议获取局域网内的主机MAC,所以局域网主机之间也互称为网络邻居。

4.1 arp命令
arp命令语法:

arp -n -v -i           # 查看arp缓存
​
选项说明:
-n:不解析ip地址为名称
-v:详细信息
-i:指定操作的接口
-d:删除一个arp条目

hostname:操作该主机的arp条目,除了删除还有其他动作,如手动添加主机的arp条目,此处就不解释该用法了

例如:

[root@egon ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.100.1            ether   00:50:56:c0:00:08   C                     eth1
192.168.100.254          ether   00:50:56:e7:e1:d4   C                     eth0
192.168.100.70           ether   00:0c:29:71:81:64   C                     eth0
192.168.100.1            ether   00:50:56:c0:00:08   C                     eth0
192.168.100.2            ether   00:50:56:e2:16:04   C                     eth1
192.168.100.254          ether   00:50:56:e7:e1:d4   C                     eth1
192.168.100.2            ether   00:50:56:e2:16:04   C                     eth0

上述命令其实查看的信息是来自于/proc/net/arp文件中的内容。

[root@egon ~]# cat /proc/net/arp
IP address       HW type     Flags       HW address            Mask     Device
192.168.100.1    0x1         0x2         00:50:56:c0:00:08     *        eth1
192.168.100.254  0x1         0x2         00:50:56:e7:e1:d4     *        eth0
192.168.100.70   0x1         0x2         00:0c:29:71:81:64     *        eth0
192.168.100.1    0x1         0x2         00:50:56:c0:00:08     *        eth0
192.168.100.2    0x1         0x2         00:50:56:e2:16:04     *        eth1
192.168.100.254  0x1         0x2         00:50:56:e7:e1:d4     *        eth1
192.168.100.2    0x1         0x2         00:50:56:e2:16:04     *        eth0

删除arp缓存条目

[root@egon ~]# arp -d 192.168.100.70 -i eth0   # 删除arp缓存条目

arp命令一次只能删除一条arp条目,要批量删除或清空整个arp条目,使用ip neigh flush命令。如:

[root@egon ~]# ip neigh flush all            # 清空所有
[root@egon ~]# ip neigh flush dev eth0     # 删除eth0上缓存的arp条目

4.2 arping命令
arping用于发送arp请求报文,解析并获取目标地址的MAC。默认将先发送广播报文,收到回复后再发送单播报文,局域网内所有主机都能收到广播报文,但只有目标主机才会回复自己的MAC地址。

注意:发送arp请求报文实际上是另类的ping,所以可以探测目标是否存活,也需要和目标通信,通信时目标主机上也会缓存本主机(即源地址)的arp条目。

语法:

arping [-fqbDU] [-c count] [-w timeout] [-I device] [-s source] destination
-f : 收到第一个reply就立即退出
-q : 安静模式,什么都不输出
-b : 只发送广播,不发送单播
-D : 地址冲突检测
-U : 主动更新邻居的arp缓存(Unsolicited ARP mode)
-c count : 发送多少个arp请求包后退出
-w timeout : 等待reply的超时时间
-I device : 使用哪个接口发送请求包。发送arp请求包接口的MAC地址将缓存在目标主机上
-s source : 指定arp请求报文中源地址,若发送的接口和源地址不同,则目标主机将缓存该地址和接口的MAC地址,而非该源地址所在接口的MAC地址
 destination : 向谁发送arp请求报文,即要获取该IP或主机名的MAC地址

例如:

(1).请求解析192.168.100.70主机的MAC地址

[root@egon ~]# arping -I ens33 -f 192.168.100.70

这将会发送广播报文,直到收到192.168.100.70的回复才退出。

同时,192.168.100.70也会缓存本机的IP和MAC对应条目,由于此处没有指定请求报文的发送接口和源地址,所以发送报文时是根据路由表来选择接口和对应该接口地址的。

(2).探测对方主机是否存活

例如发送4个探测报文,有回复就说明对方存活

[root@egon ~]# arping -c 4 -I eth0 192.168.100.2  
ARPING 192.168.100.2 from 192.168.100.54 eth0
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.593ms
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.930ms
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.868ms
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.844ms
Sent 4 probes (1 broadcast(s))
Received 4 response(s)

可见发送了4个探测报文,其中第一个报文是广播报文,并且收到了4个回复。

(3).arp欺骗:不要用xshell链接,直接在真机上操作

# 主机1
[root@egon ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=1.1.1.9
NETMASK=255.255.255.0
​
[root@egon ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=1.1.1.8
NETMASK=255.255.255.0
​
[root@egon ~]# systemctl restart network
[root@egon ~]# 
[root@egon ~]# ifconfig ens33
ens33: flags=67<UP,BROADCAST,RUNNING>  mtu 1500
        inet 1.1.1.9  netmask 255.255.255.0  broadcast 1.1.1.255
        ether 00:0c:29:86:f8:59  txqueuelen 1000  (Ethernet)
        RX packets 42796  bytes 6947452 (6.6 MiB)
        RX errors 0  dropped 925  overruns 0  frame 0
        TX packets 4623  bytes 426525 (416.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
[root@egon ~]# ifconfig ens37
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 1.1.1.8  netmask 255.255.255.0  broadcast 1.1.1.255
        inet6 fe80::20c:29ff:fe86:f863  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:86:f8:63  txqueuelen 1000  (Ethernet)
        RX packets 334  bytes 52292 (51.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 162  bytes 19253 (18.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@egon ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
1.1.1.0         0.0.0.0         255.255.255.0   U     101    0        0 ens37
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@egon ~]# arping -I ens33 -s 1.1.1.8 1.1.1.2  # 
ARPING 1.1.1.2 from 1.1.1.8 ens33
Unicast reply from 1.1.1.2 [00:0C:29:EF:D0:EB]  1.955ms
Unicast reply from 1.1.1.2 [00:0C:29:EF:D0:EB]  1.406ms
Unicast reply from 1.1.1.2 [00:0C:29:EF:D0:EB]  0.860ms
Unicast reply from 1.1.1.2 [00:0C:29:EF:D0:EB]  0.966ms
 
注意:
    1、是从ens33发出的包,也就说mac地址是ens33的mac:00:0c:29:86:f8:59
    2、但是源ip用的却是1.1.1.8,对应着也就是ens37网卡,所以正确的mac其实应该是ens37的mac,但是。。。
    
    
# 主机2:被欺骗了,记录下的arp记录为:1.1.1.8 对应着一个错误的mac地址
[root@egon ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
1.1.1.8                  ether   00:0c:29:86:f8:59   C                     eth0

arping命令仅能实现这种简单的arp欺骗,更多的arp欺骗方法可以使用专门的工具。

五 ip命令
这是一个极其强大的命令,前面所有的网络信息显示和管理的命令,都可以由ip命令来替代完成。它是一个严格模式化的命令。

5.1 获取ip命令的帮助
先简单说明下ip命令的基础和获取帮助的方法。

[root@egon ~]# ip -h
​
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |
                   netns | l2tp | tcp_metrics | token }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } |
                    -o[neline] | -t[imestamp] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] }

可见命令非常复杂,有很多options,还有很多object,每个Object又对应不同的命令。但其实能用到的就几个object:addr/route/neigh/link。

使用ip object help可以获取到该object的语法帮助。例如:

[root@egon ~]# ip addr help
在ip命令行下,任何object都可以写其全名,也可以写其缩写名,例如address这个object,可以简写为addr,也可以简写为一个字母a。
[root@egon ~]# ip a help      # 等价于ip address help和ip addr help

尽管还有一个a开头的object为addrlabel。这时因为ip会从上述语法给出的object顺序从前向后匹配,例如"ip m"将匹配到"ip maddr",如果想匹配别的,如addrlabel,则写长一点即可"ip addrl"。

对于CentOS 6,man ip时会输出整个ip的帮助文档,包括每个object的命令和说明。在CentOS 7中,则要对每个object独立进行man,例如addr这个object。

[root@egon ~]# man ip-address

以下是所有Object的man列表。

[root@egon ~]# rpm -ql iproute | grep "man8/ip-"
/usr/share/man/man8/ip-address.8.gz
/usr/share/man/man8/ip-addrlabel.8.gz
/usr/share/man/man8/ip-l2tp.8.gz
/usr/share/man/man8/ip-link.8.gz
/usr/share/man/man8/ip-maddress.8.gz
/usr/share/man/man8/ip-monitor.8.gz
/usr/share/man/man8/ip-mroute.8.gz
/usr/share/man/man8/ip-neighbour.8.gz
/usr/share/man/man8/ip-netconf.8.gz
/usr/share/man/man8/ip-netns.8.gz
/usr/share/man/man8/ip-ntable.8.gz
/usr/share/man/man8/ip-route.8.gz
/usr/share/man/man8/ip-rule.8.gz
/usr/share/man/man8/ip-tcp_metrics.8.gz
/usr/share/man/man8/ip-token.8.gz
/usr/share/man/man8/ip-tunnel.8.gz
/usr/share/man/man8/ip-xfrm.8.gz

5.2 ip addr
ip addr用于管理网络设备上的ip地址,也可以查看ip地址的属性信息。在老版本的Linux中,一块网卡上设置多个IP,这些IP称为别名IP,但是从CentOS 6开始,这些IP称为secondary IP或slave IP,因为这些IP自身也可以附带属性。

(1).ip addr add/del

ip address { add | del } IFADDR dev STRING
IFADDR := PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label STRING ]
​
以add为例:
dev NAME:指定要设置IP地址的网卡
local ADDRESS (default):接口的IP地址。IP地址的格式依赖于是ipv4还是ipv6。对于ipv4而言,给定地址,可能还需要给定cidr的掩码位长度
broadcast ADDRESS:接口的广播地址
label NAME:为该接口的IP地址设置label名,label名称必须以网络接口名开头后接冒号,如eth0:X
​
del和add的参数相同,且dev是必须要给定的,其余的参数可选,因为del的时候是通配del,如果删除时有多个满足条件的条目,则删除第一个条目。

例如:

`[root@xuexi ~]``# ip addr add 192.168.100.45 dev eth0``[root@xuexi ~]``# ip addr add 192.168.100.35/24 dev eth1

此方式添加的地址不会在ifconfg命令中显示,ifconfg能捕捉到的是别名,所以可以为地址加上label,以让secondary被ifconfig查看到。例如:

[root@egon ~]# ip addr add 192.168.100.45 dev eth0 label eth0:0

要删除ip,则简单的多,但必须指定dev,且最好也指定cidr的掩码长度。

[root@egon ~]# ip addr del 192.168.100.45 dev eth0
[root@egon ~]# ip addr del 192.168.100.35/24 dev eth1

(2).ip addr show

虽然也有几个选项,但是感觉没什么用,直接ip addr show就够了。因为ip命令可以缩写,所以可以写为

[root@egon ~]# ip a show
[root@egon ~]# ip a s
[root@egon ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:71:81:64 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.70/24 brd 192.168.100.255 scope global eth0
    inet6 fe80::20c:29ff:fe71:8164/64 scope link
       valid_lft forever preferred_lft forever

(3).ip addr flush

用于批量删除地址,该命令其实非常危险,一个不小心就会误伤无辜,所幸的是flush的时候不给定任何参数或者没有任何条目可以匹配上的时候将不执行flush动作,总之该命令要小心使用。同样也必须给定dev参数。

例如删除eth1上所有地址。

[root@egon ~]# ip a flush dev eth1

删除eth1上所有的secondary地址。

[root@egon ~]# ip a f secondary dev eth1

5.3 ip route
该命令维护和查看内核中的路由表。

(1).ip route add/del/change/append/replace

语法格式为:

ip route { add | del | change | append | replace } dest[/cidr_mask] [ via ADDRESS ] [ dev STRING ]

其中dest为目标地址,可以是主机地址、网段地址,一般在地址后都会带上cidr格式的掩码长度,不带时默认为32位长度。如果dest为"0/0"或者写为"default",则表示默认路由。

例如添加/修改/替换普通路由:

[root@egon ~]# ip route add/change/replace 172.16.10.0/24 via 192.168.10.20

添加/修改/替换默认路由:

[root@egon ~]# ip route add/change/replace default via 192.168.10.20
[root@egon ~]# ip route add/change/replace 0/0 via 192.168.100.2

删除某路由:

[root@egon ~]# ip route del 172.16.10.0/24
[root@egon ~]# ip route del default   # 删除默认路由

(2).ip route show

列出路由表。

语法格式为:

ip route show [to [ root | match | exact ] ADDR_pattern ] [ via ADDR ]

其中to关键字是默认关键字,用来匹配路由的目标地址。其后可以跟上修饰符root/match/exact,exact为默认修饰符,表示精确匹配掩码位长度,root修饰符表示匹配的掩码位长度大于或等于ADDR_pattern给定的掩码位长度,match修饰符匹配短于或等于ADDR_pattern掩码位长度。例如"to match 16.0/16"将能匹配到"16.0/16"、"16/8"和"0/0",但却无法匹配"16.1/16"和"16.0/24"以及"16.0.1/24",而"to root 16.0/16"将能匹配"16.0/24"和"16.0.1/24"。

via是根据下一跳的方式来列出路由条目

(3).ip route flush

批量删除路由表条目。参数和ip route show的参数一样。

例如删除由eth1出去的路由条目。

[root@egon ~]# ip route flush eth1

删除下一跳为192.168.100.70的路由条目。

[root@egon ~]# ip r flush via 192.168.100.70

删除目标为192.168.0.0/16网段的路由

[root@egon ~]# ip route flush 192.168/16

(4).ip route save/restore

用于保存当前的路由表以及恢复路由表。保存路由表时,路由表将以二进制裸数据的格式输出,也就是看不懂的二进制文件。恢复路由表时,要求设备的设置和保存路由表时是一样的,恢复时已存在于路由表中的路由条目将被忽略。

例如当前路由表信息如下:

[root@egon ~]# ip r
default via 192.168.100.2 dev eth0  proto static  metric 100
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.20
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.20  metric 100
192.168.100.0/24 dev eth0  proto kernel  scope link  src 192.168.100.54  metric 100
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.74  metric 101

保存当前路由表。

[root@egon ~]# ip route save > /tmp/route.txt

删除几条路由表。

[root@egon ~]# ip route flush dev eth0
​
[root@egon ~]# ip r
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.74  metric 101

恢复路由表。

[root@egon ~]# ip route restore < /tmp/route.txt

5.4 ip link
link表示link layer的意思,即链路层。该命令用于管理和查看网络接口,甚至可以添加虚拟网络接口,将网络接口分组进行管理。

(1).ip link set

ip link set DEVICE  { up | down | arp { on | off } | name NEWNAME | address LLADDR }  
​
选项说明:
dev DEVICE:指定要操作的设备名
up and down:启动或停用该设备
arp on or arp off:启用或禁用该设备的arp协议
name NAME:修改指定设备的名称,建议不要在该接口处于运行状态或已分配IP地址时重命名
address LLADDRESS:设置指定接口的MAC地址

例如,禁用eth1网卡。

[root@egon ~]# ip link set eth1 down

其实等价于:

[root@egon ~]# ifconfig eth1 down

修改网卡eth1的MAC地址。

[root@egon ~]# ip link set eth1 address 00:0c:29:f3:33:77

(2).ip link show

语法格式:

ip [ -s | -h ] link show [dev DEV]  
​
选项说明:
-s:将显示各网络接口上的流量统计信息
-h:以人类可读的方式显式,即单位转换。注:"-h"在CentOS 7上才支持。

例如:

[root@egon ~]# ip -s -h link show  dev eth0  
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:f7:43:77 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast  
    13.7M      20.0k    0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns
    1.59M      9.97k    0       0       0       0 

六 网络故障排查
1、判断网卡是否能识别,是否接了有效的网线

# mii-tool   eth0
​
有可能明明连接了有效的网线,但是还是看不到link ok,可以先确定网卡配置文件是正确的,并且ONBOOT=yes ,然后重启network服务(systemctl restart network )

2、ping 127.0.0.1

通,代表系统能够支持tcp/ip通信。
不通,原因: 相关驱动损坏或者没有。防火墙iptables拦截了。

3、ping 网卡的ip

假设eth0配置10.1.1.22
ping 10.1.1.22
​
通,说明网卡是能够正常工作
不通,可能是网卡驱动工作不正常,或iptables防火墙问题。
或者是网卡未激活,可以尝试重启网络服务

4、ping 网关

不通
原因: 网关有问题,或者IP冲突
​
解决方法:ping 同一个网段中其他IP,或者用其他计算机也ping网关,如果能通,那就是自己机器的原因了

5、ping 外网(IP或域名)

# ping 外网IP
通,只能说明通信没问题,网关是ok的。
不通,很可能就是网关无法联网
​
# ping 域名
如果连域名对应的IP都无法返回,说明域名解析失败,原因:DNS设定有问题。

6、ethtool eth0 查看网卡的工作模式等信息

# ethtool eth0        --查看网卡的工作模式等信息
    Link partner advertised auto-negotiation: Yes
    Speed: 100Mb/s
    Duplex: Full
​
# ethtool -s eth0 speed 10 duplex half autoneg off    --改成10M/s的速率,半双工,关闭自动协商
​
# ethtool -s eth0 speed 100 duplex full autoneg on    --改成100M/s的速率,全双工,开启自动协商

7、ping的错误类型

network unreachable (网络不可达): 一般没有设定正确的网关 unknow host xxxx : 设定DNS无效

======================>Ping命令返回错误信息说明<======================
# 1.Request timed out
这是大家经常碰到的提示信息,很多文章中说这是对方机器置了过滤ICMP数据包,从上面工作过程来看,这是不完全正确的,至少有下几种情况。
(1) 对方已关机,或者网络上根本没有这个地址:比如在上图中主机A中PING 192.168.0.7 ,或者主机B关机了,在主机A中PING 192.168.0.5 都会得到超时的信息。
(2)对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。
(3)对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。
怎样知道对方是存在,还是不存在呢,可以用带参数 -a 的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是对方不存在或关机,或不在同一网段内。
(4)错误设置IP地址
正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)。但如果一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:
A.主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。
B.主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去Ping其他机器,IP层协议会无法处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其他主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机也就能成功Ping通这台机器了。
​
# 2.Destination host Unreachable
(1) 对方与自己不在同一网段内,而自己又未设置默认的路由,比如上例中A机中不设定默认的路由,运行Ping192.168.0.1.4就会出现“Destination host Unreachable”。
(2)网线出了故障
这里要说明一下“destination host unreachable”和 “time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。
​
# 3.Bad IP address
这个信息表示您可能没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。
​
# 4.Source quench received
这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。
​
# 5.Unknown host——不知名主机
这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
​
# 6.No answer——无响应
这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。
​
# 7.Ping 127.0.0.1
127.0.0.1是本地循环地址.如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。
​
# 8.no rout to host
网卡工作不正常。
​
# 9.transmit failed,error code:10043
网卡驱动不正常。
​
# 10.unknown host name
DNS配置不正确