1. 一些必要知识点

1. 一些必要知识点

1.1. 主机名:

  • 注意:linux中的主机名只是给用户一个提示信息,并不具备网络访问的功能(除非定义DNS服务进行解析)。而windows中的计算机名就可以当做一个标识地址来进行访问,注意它俩的区分。

1.1.1. Centos6主机名

  • 配置当前主机的主机名:
命令行: hostname [HOSTNAME] 文件: /etc/sysconfig/network HOSTNAME= /etc/hosts

1.1.2. CentOS7主机名

  • 配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
  • 显示主机名信息
    hostname
    hostnamectl status
  • 设置主机名
    hostnamectl set-hostname centos7.zhang.com :立即生效,重启也会生效不会丢失,ubuntu也可用
  • 删除文件/etc/hostname,恢复主机名为localhost.localdomain

1.1.3. 修改主机名:

  • Centos6中主机名修改(永久)可以在 /etc/sysconfig/network 中,重启生效,想要立即生效则直接hostname命令后面加新名字改一下即可。

    • 不过修改之后需要更改一下/etc/hosts里面的回环域名解析行,把新修改的这个主机名加到后面去
    • hosts文件内格式参考原先的,也可以自己增加更多的地址和名字对应关系,此名字解析服务的hosts文件中如果被篡改有访问到假网站的风险。
  • Centos7(以及ubuntu)中用命令 hostnamectl set-hostname NEW_NAME 的方式,立即生效并且重启生效

    • 或者也可以修改/etc/hostname中的名字,但是必须得是重启之后生效(注意这里的重启不是重启shell,而是重启系统)。
    • 同样修改完名字之后别忘了需要在 /etc/hosts中新增加回环网址的新名字.

1.1.4. 注意点

  1. Centos6(/etc/sysconfig/network)Centos7(/etc/hostname)两个文件中的主机名格式是不一样的,一个需要写HOSTNAME=一个不需要,更加详细的关于主机名的信息可以查看官方文档关于network的解释(6和7的不同之处)。

看下面的格式中的差异:

****** Centos6 network文件 ****** # cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=localhost.centos6 ****** Centos7 hostname文件 ****** # cat /etc/hostname centos7.localdomain
  1. 同时注意,官方文档已经说明,在Centos7中,/etc/sysconfig/network文件已经不再使用,在这里面写入主机名无效;经过测试也确实如此

1.2. 主机名和IP地址对应解析方式

1.2.1. 解析器执行正向和逆向查询主机名

/etc/hosts文件

  • 本地主机名数据库和IP地址的映像
  • 对小型独立网络有用
  • 通常,在使用DNS前检查
  • getent hosts 查看/etc/hosts 内容

1.2.2. dns名字解析

1.2.2.1. 相关文件

  1. /etc/resolv.conf
search localdomain nameserver DNS_SERVER_IP1 nameserver DNS_SERVER_IP2 nameserver DNS_SERVER_IP3
  1. /etc/nsswitch.conf
  • /etc/hosts相比优先于DNS

1.2.2.2. 正向解析:FQDN–>IP

dig -t A FQDN host -t A FQDN

1.2.2.3. 反向解析:IP–>FQDN

dig -x IP host -t PTR IP

1.3. CentOS 6 网卡名称和驱动相关—{dmesg,ethtool,modprobe,rmmod}

1.3.1. 接口命名方式:CentOS 6

以太网:eth[0,1,2,...] ppp:ppp[0,1,2,...]

1.3.2. 网络接口识别并命名相关的udev配置文件:

/etc/udev/rules.d/70-persistent-net.rules

1.3.3. 查看网卡:

dmesg |grep –i eth ethtool -i eth0

1.3.4. 卸载网卡驱动:

modprobe -r e1000 rmmod e1000

1.3.5. 装载网卡驱动:

modprobe e1000

1.3.6. Vmware附加知识点:

 在Vmware(centos)中,如果想要新添加一个虚拟机,使用直接复制一个已经存在虚拟机的所有文件然后打开这个虚拟机的方式,则有些配置会和以前的被复制的虚拟机重复,尤其是有固定ID的设备。

 比如说网卡的MAC地址就会和网卡名绑定在一起,导致新复制的这个虚拟机网卡名不会从0开始。原因就是新复制的虚拟机使用新的网卡(它的MAC地址不能和原有的被复制的虚拟机相同),但是由于新复制的虚拟机中的文件和被复制的虚拟机相同,因此文件中写的有之前被复制的虚拟机MAC地址和网卡名的绑定关系,这样就导致了新的网卡不会使用之前使用过的网卡名,所以也就不会从0开始了

 这时候要删除掉这个绑定的信息,它在 /etc/udev/rule.d/这个文件夹中,其中网卡对应的就是70-persistent-net.rules ,删除掉或者修改对应的网卡名和mac地址即可(Centos6中有这个文件,7中貌似没有)。

 之后想要让自己的配置生效,只能重启这个设备,也就是需要用模块控制命令卸载掉网卡驱动,然后再重新启动即可:

ethtool -i eth0 :查看网卡驱动 rmmod e1000 :卸载网卡驱动模块 modprobe e1000:重新加载驱动模块 这样就可以把网卡名字和MAC的对应关系重新修改了。

2. 路由详细介绍

跨网络通信:路由

路由分类(这里指的是路由表内的每一条信息,不是路由器):

  • 主机路由 :子网掩码全为1,会造成路由表很庞大,不常用
  • 网络路由 :网段路由,最常用的路由表方式,到达网段内之后进行ARP广播查找某个IP对应主机
  • 默认路由 :找不到目标网络时便会向默认路由记录的网关转发,通常用来指定局域网上的主机的网关(主机上也有路由表),注意不能配置在有多条线路上的路由器上面。

优先级:精度越高,优先级越高(主机->网段->默认)

  • 注意:不仅仅是路由器有路由表,每个主机都有路由表,路由表非常重要,它决定了数据包经过网络要发出去时所走的路径,如果缺失路由表,则与它相关的数据包将直接无法发送出去。

3. 基本网络配置:

将Linux主机接入到网络,需要配置网络相关设置,一般包括如下内容:

  1. 主机名

  2. IP/netmask

  3. 路由:默认网关

  4. DNS服务器:
     主DNS服务器
     次DNS服务器
     第三DNS服务器

  5. IP、 MASK、 GW、DNS相关配置文件

/etc/sysconfig/networkscripts/ifcfg-IFACE

  • 说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt
    DEVICE=eth0 :设备名,真正的设备名字 NAME="Wired connection 1" :连接名,设备在主机上显示的连接名字以及nmcli中显示的连接名(id) IPADDR1=192.168.36.102 :网卡IP地址1 PREFIX1=24 或者 NETMASK=255.255.255.0 IPADDR2=192.168.36.200 :网卡IP地址2 PREFIX2=24 或者 NETMASK=255.255.255.0 ... IPADDRn=XXX.XXX.XXX.XXX :网卡IP地址N PREFIXn=XX 或者 NETMASK=XXX.XXX.XXX.XXX BOOTPROTO=dhcp |static |none :IP地址分配方式 ONBOOT=yes :开机是否启动 GATEWAY=192.168.36.1 :默认网关 ,网关必须和IP地址在同一网段,(或者说全为0,那就是另外的故事了,网关也可以暂时不写) DNS1=114.114.114.114 DNS2=8.8.8.8 DOMAIN=baidu.com :用于icmp ping命令中ping后面的后缀补全信息,比如命令ping www,它会在www后面补上DOMAIN中所写的内容(会自动前面加一个.,因此DOMAIN中最前面不用写.) ------------------ :下面的可以不写,上面的均为常用的,某些也可以不写 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no DEFROUTE=yes NM_CONTROLLED=yes :NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no” USERCTL=no :普通用户是否可控制此设备 PEERDNS=yes :如果BOOTPROTO的值为“dhcp” ,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy UUID=218ac8bc-95f0-33ee-845f-27c3a473d629 HWADDR=00:0C:29:DA:3B:31 :设备mac地址,出厂固定不能改 AUTOCONNECT_PRIORITY=-999 MACADDR=66:66:66:66:66:66 :系统上虚拟修改mac地址,防止真实MAC地址泄露隐私等信息(wifi探针)
  1. 路由相关的配置文件:

/etc/sysconfig/network-scripts/route-IFACE

  • 注意这个配置文件只有DHCP没有配置默认网关,以及没有在/etc/sysconfig/network文件中全局设置网关(路由表)的情况下才会有必要配置
  • 如果上面所说的内容(DHCP内默认网关,文件中全局设置了路由信息)进行了设置,则这个文件并不需要进行配置网卡也能够获得默认的路由信息
    注意生效需要: service network restart (Centos6) systemctl restart network (Centos7) 两种风格: (1) TARGET via GW 如:10.0.0.0/8 via 172.16.0.1 (2) 每三行定义一条路由 ADDRESS#=TARGET NETMASK#=mask GATEWAY#=GW ****** 例如 ****** 格式: default via 192.168.1.1 dev interface 实例: 10.10.10.0/24 via 192.168.1.1 [dev interface] ```

3.1. 网卡别名(只是暂时生效,重启服务丢失)

对虚拟主机有用
将多个IP地址绑定到一个NIC网卡设备上

  • 表现形式:
eth0:1 、 eth0:2、 eth0:3
  • ifconfig命令实现:
ifconfig eth0:0 192.168.1.100/24 up ifconfig eth0:0 down
  • ip命令实现:
ip addr add 172.16.1.2/16 dev eth0 ip addr add 172.16.1.1/16 dev eth0 label eth0:0 ip addr add 172.16.1.2/16 dev eth0 label eth0:0 ip addr del 172.16.1.1/16 dev eth0 label eth0:0 ip addr flush dev eth0 label eth0:0

3.2. 设备别名(永久生效)

  • 为每个设备别名生成独立的接口配置文件
    1. 关闭NetworkManager服务
    2. 创建文件ifcfg-ethX:xxx
    3. 别名中的,必须使用静态联网
      DEVICE=eth0:0 IPADDR=10.10.10.10 NETMASK=255.0.0.0 ONPARENT=yes
  • 注意:service network restart 生效(centos6)
  • 参考:/usr/share/doc/initscripts-*/sysconfig.txt

3.3. ifcfg配置文件相关注意和知识点1

  1. 配置文件地址在 /etc/sysconfig/network-scripts/ 文件夹中,其中配置文件都是以ifcfg-开头的,开头必须为ifcfg-,而后面的内容写什么都可以,不过最好和网卡名(设备名)改为一致。修改它就可以永久修改网卡配置,重启网络服务就是按照里面所写的内容来进行网卡设置的。
  2. 注意配置的时候centos6中最好把 service NetworkManager stop (就是图形界面任务栏的网络设置功能和那个图标显示),它和network有时会有冲突。
  3. cat /etc/resolv.conf 可以查看DNS服务是否真正生效,DNS的配置写入的位置仍然在ifcfg文件中。注意想要用外网的DNS服务,必须路由网关先配置好能连接到外网才可以。
  4. 配置完成之后用 service network restartsystemctl restart network 重启一下网络服务使其生效
  5. 经测试得知,配置文件最好把DEVICE=eth0:2等等写在第一行,这样载入的时候才会加载此配置。
  6. 配置文件只要有多余的,重启网络服务时找不到的设备,就会报错(centos7中),因此删除网卡后最好用bakifcfg的方式重命名它。
  7. 虚拟机中的配置文件中UUIDHWADDR可以尽量不要写,(物理机可以写上HWADDR)因为有时候会冲突报错,上面的两个一般情况下都是固定的不会改变,但可以用MACADDR= 的方式系统中虚拟修改MAC地址。
  8. **重要注意点:**同时配置动态和静态地址一种是分成两个配置文件,以别名的方式。还有一种方法就是在一个ifcfg文件中,把bootproto写为dhcp,但是同时指定给它一个静态的地址,也能同时配置两个地址。
  9. 注意默认的DEFROUTE就是yes状态(就算不写上这一项也是yes,只有写为no才是关掉它),如果不写上GATEWAY这一项的话它会把网卡(或者路由)端口相连的网段的第一个IP作为默认路由地址的网关(经过测试得知,networkmanager服务会首选让它配置成从DHCP服务器获得的默认网关的地址。
    • DHCP服务器一般都会配置一个默认网关,当主机从DHCP获得IP之后,同时会下载DHCP服务器中配置的默认网关设置
    • 注意整个路由表只会自动生成一个默认网关,即使在多个ifcfg文件中配置了默认网关也只会生成一个
    • 注意默认网关就是目标网段0.0.0.0的网关,它会根据所有的网卡DEFROUTE配置来看,但是整个route表中,它只会自动生成一个默认网关,也就是默认是DHCP服务器的中配置的默认网关。
  10. 从DHCP服务器下载覆盖DNS域名解析服务的网址到本机上,默认也是开启状态(不写的话)。可以用cat /etc/resolv.conf 中查看生效的配置。 10.重要注意:经过测试发现,默认网关的首选项就是DHCP服务器给的默认网关,如果它没有配默认网关指向它,然后才是ifcfg文件中的gateway生效(先不考虑全局的/etc/sysconfig/network文件中写的)。但是如果按照那个在一个ifcfg文件里即写入dchp获取,又写入静态地址的方式的话,此时在这个文件里加上默认网关GATEWAY的地址,则会以这个文件中的手写的gateway为首选默认网关项(就是重启网络服务时候的0.0.0.0的指向)。用这种方式来避免网络中各种DHCP服务时导致的默认网关错误问题。
  • 经过更加详细的测试和个人分析得知,在上面的过程中其实是NetworkManager服务的控制,它会首选获得的DHCP网段的默认网关(如果这个配置文件没有其他IP,如上,则就算写了GATEWAY它也会从DHCP服务器获取的GATEWAY作为首选)然后就是上面的情况作为次选(个人分析它应该是为了保持网关和IP的网段对应,所以写了静态IP的情况下就会把默认网关指向手写的GATEWAY,但是如果此时不写GATEWAY,还是会将DHCP的网关作为默认网关)。
  • 如果关闭这个服务,则手写的GATEWAY将会直接生效,变为首选项了。同时经过测试得知,关闭这个服务之后,如果有多个ifcfg都是DEFROUTE为yes状态(虽然此项为yes,但没有写GATEWAY的ifcfg文件就会忽略了)它会根据写了GATEWAY的最后一个ifcfg文件(ls排序的顺序)来作为最后生效的默认网关
  • 同时如果关了它之后,多个针对同一个网卡eth配置文件将会按照ls顺序逐个生效(没关闭之前如果有多个针对同一个网卡也就是DEVICE相同的配置文件,只会有一个生效,可用nmcli更换配置。详细查看nmcli中解释。而关了它之后在这里都会生效,相当于直接ip addr add了很多IP和配置在一个网卡上而且没有用别名的方式,ifconfig看不到这个IP地址的配置)
  1. 经过测试,/etc/sysconfig/network中的GATEWAY=行,会直接在路由表中加上一行默认网关项。详情查看官方解释(包括DHCP,Networkmanager等)。

4. 路由表相关详细介绍和配置

路由管理命令route ---------------------- 查看: route -n ---------------------- 添加:route add route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] 例如主机目标:192.168.1.3 网关:172.16.0.1 route add -host 192.168.1.3 gw 172.16.0.1 dev eth0 例如网段目标:192.168.0.0 网关:172.16.0.1 route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0 route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0 默认路由,网关:172.16.0.1 route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1 route add default gw 172.16.0.1 ------------------------ 删除:route del route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] 目标:192.168.1.3 网关:172.16.0.1 route del -host 192.168.1.3 目标:192.168.0.0 网关:172.16.0.1 route del -net 192.168.0.0 netmask 255.255.255.0

4.1. 路由表:

  1. 目标网络(网段) :目标网络IP
  2. 子网掩码:注意子网掩码对应的是目标网络IP的,不要当做是网关的子网掩码了
  3. 接口:指明了从本设备的哪一个接口转发出这条数据包,就能到达目标网络(接口用IP地址表示,不过如果是一个主机则接口就是它的网卡这个设备和它获得的IP,接口直接指向这个网卡设备即可不用写IP,除非这个网卡有多个接口则需要指明IP。如果是路由器的话则就直接指向接口的IP了)
  4. 网关:指明了将数据包转发到**下一个设备(或路由)**哪个接口(ip),能到达目标网络(网关口用IP地址表示)

4.2. 关于路由表的知识点:

  1. 注意路由表中只有IP(包括子网掩码等),不含有mac地址,因为它工作在第三层网络层。

  2. 路由器(或者主机)直接相连的网段无需配置,每个直接相连网段的此路由表项:

    • 目标网络:就是这个网段的网络地址
    • 接口:就是在这个网段分配的IP(主机的话直接指向网卡设备)
    • 网关:为0.0.0.0(为何全为0详细更多分析看上面ARP中)
  3. linux中配置路由以及网络服务的时候注意防火墙和selinux的设置,简单来说可以直接关闭,复习点:

    • 关闭防火墙
      **centos7:** systemctl disable firewalld(.service) systemctl stop firewalld(.service) **centos6(和7相互对应):** chkconfig iptables off service iptables stop
    • 关闭selinux
      vim /etc/selinux/config SELINUX=enforcing 改为disabled 或者 sed -r -i "s/^(SELINUX=).*/\\1disabled/" /etc/selinux/config - 注意之后必须重新启动reboot ,才能关掉selinux,getenforce可以查看selinux是否真的关闭 - 如果不想重启,可以先把selinux改为中间的模式(有错误提醒但实际上selinux已经关闭了),利用setenforce 设置即可,但是别忘了把配置文件中仍旧改为disabled,下次重启就会完全关闭了,这个是runtime的折中设置。
  4. linux机器当做路由其使用需要开启路由转发功能,默认是关闭,修改/proc/sys/net/ipv4/ip_forward1即可

    • 使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
      • 方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
      • 方法二:sysctl -w net.ipv4.ip_forward=1
    • 使用如下方法开启核心转发功能,重启网络服务后永久生效。
      • Centos6配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将net.ipv4.ip_forward设置为1
  5. traceroute 目标IP 命令 可以查看路由经过的路由器信息,或者用mtr 目标 命令更加详细和高速。

  6. 注意了局域网内的主机的路由表可以添加默认路由(相当于它只有一个接口连接了一个网段,默认路由添加到这一网段的路由器网关上即可)

    • 并且处于边缘网段(一端连接一个局域网,另一端连接外网)的路由器也可以添加默认路由到链接外网的次路由器接口和下一个路由器的网关(与这个路由直接相连的这两个网段的路由表信息会自动添加,相当于这个路由器已知这两个直连的网段,除了这两个直连网段其他任何IP都往下一个路由器网关转发到外网,路由表中有3条信息)
    • 但是只要是路由器(有两个线路以上)最好不要添加默认路由。不然所有的未知目的IP地址都只能走这条默认路由线路了。
  7. 路由器添加路由表的时候,即使不指定下一个路由的网关的端口,它也能自己判断是从哪个端口转发出去,因为下一个路由的网关必然和要转出去的端口在一个网段里面。

  8. 路由表目标网段可以写成包含的关系,也就是路由表中的目标网段包含了许多子网,它既可以写成路由表中的目标网段和实际上要寻找的目标网段写一模一样,也可以路由表上写的的目标网段(网络ID少,主机多)
     包含着真正要寻找的目标网段(网络ID多,主机少),这样的话这个路由器下面还可以再接路由器,由路由器再分子网。

  9. Centos7中network重启失败经常出现,有多种原因,其中常见LSB启动失败的原因中,即使所有配置文件没有错误,还有一种可能是网卡没有插上线,也就是说vmware中的线没有插上 或者 说用命令将ip link set 网卡 down了。
     centos7中只要有一个网卡没有启用,重启网络服务就可能会失败(一定要检查所有配置文件的HDADDR和UUID 以及DEVICE是否写错)。
     注意没插网线和ip link set 网卡 down它俩还是有区别的,前者是物理上直接没有连接,后者是物理上连接了但是网卡禁用了。
     但无论这两种哪一种,只要有网卡处于down状态,则所有配置正确用network start也可能会无法重启网络服务显示错误。
     但centos6中即使某些网卡关闭了,重启network也不会报错,不过要注意关闭NetworkManager

  10. 配置路由表的接口一定是本机或者本路由的能转发到目标网段的出口,而网关一定是与这个接口相连网段的下一个路由器的接口(在同一个网段),而不是下下一个路由器(下下一个路由器则由下一个路由器来进行转发判断)。

4.3. 重要注意点

  1. 路由表中如果把直接相连的网段的这条路由信息(表现为网关全为0,目标网段和本机IP在同一个网段内的这条)删掉,则这个主机在这个网段内除了本机之外的其他IP地址也将无法连通了,可见路由表的重要(也可见ARP广播在路由判断之后,先判断网段,再判断转发还是直接ARP广播)。
    • 这里的无法联通指的是别的主机能发送数据给本机(比如APR广播),本机也能收到,但是本机无法将数据发送出去(比如无法回复ARP广播请求)(因为不知道应该怎么发,这条路由删掉之后,虽然是直连的网段)
  2. 回环网段的配置文件为ifcfg-lo,网段默认为127.0.0.0/8,可以更改。注意只要在回环网段之内的IP,都会被认为是本机IP,都可以连通。

5. 网络配置相关命令用法—{nmcli,ifconfig,ip,route,netstat,ss,watch}

5.1. nmcli命令

  • Centos7常用,Centos6一般不用
  • 注意它是使用的NetworkManager服务中的命令

此命令在7中可以对网卡进行各种操作,其中比较常用的有:

nmcli connection [show]: 显示网卡的采用的配置以及网卡的UUID nmcli connection reload: 重新载入配置文件,可以让新写的ifcfg配置文件在上一命令中显示出来,用下一命令载入更换网卡的配置 nmcli connetcion up NAME:更换网卡的配置,注意这个NAME不是DEVICE名,而是ifcfg配置文件中的NAME项写的名字

5.1.1. 7和6对应注意点:

  1. 7中重新添加一项ifcfg配置文件名指定设备名之后,保存退出它并不会直接生效,需要用NetworkManager服务启动后提供的nmcli命令载入此配置才会生效。
  2. 6中重新添加一项ifcfg配置文件名指定设备名之后,保存退出它变直接生效了,因为NetworkManager服务启动后会直接让这个新创建的ifcfg配置文件生效。可用service NetworkManager status 查看它的运行状态。 如果6中没有装这个服务,则必须用service network restart命令重启网络服务才能生效新写的配置文件。一般6中会把manager服务关闭或者直接不安装它,因为会和network服务冲突
# cd /etc/sysconfig/network-scripts # ip link set eth1 down # ping 1.1.1.1 connect: Network is unreachable # ping www.baidu.com ping: www.baidu.com: Name or service not known # ping 192.168.36.200 PING 192.168.36.200 (192.168.36.200) 56(84) bytes of data. From 192.168.36.102 icmp_seq=1 Destination Host Unreachable From 192.168.36.102 icmp_seq=2 Destination Host Unreachable From 192.168.36.102 icmp_seq=3 Destination Host Unreachable From 192.168.36.102 icmp_seq=4 Destination Host Unreachable # ping 192.168.36.200 PING 192.168.36.200 (192.168.36.200) 56(84) bytes of data. From 192.168.36.102 icmp_seq=1 Destination Port Unreachable From 192.168.36.102 icmp_seq=2 Destination Port Unreachable From 192.168.36.102 icmp_seq=3 Destination Port Unreachable From 192.168.36.102 icmp_seq=4 Destination Port Unreachable

5.2. ifconfig命令

  • 比较老的命令,没有维护,过时的命令(默认显示没被禁用的网卡)
ifconfig [interface] :显示某个特定网卡信息 ifconfig -a :显示所有网卡,包括启用的和禁用的 ifconfig IFACE [up|down] :禁用网卡 ifconfig interface [aftype] options | address ... ifconfig IFACE IP/netmask [up] :临时修改IFACE网卡的IP地址,重启网络服务会丢失,下同 ifconfig IFACE IP netmask NETMASK ifconfig IFACE:name IP/netmask :临时增加别名和网路IP地址(一个网卡多地址)
  • 注意:上面的配置操作立即生效,重启网络服务失效,想要永久生效,写入文件中(配置一个网卡的多个地址,可以直接cp 原配置文件改名然后写入信息即可,其中DEVICE要和网卡别名一样)
  • 启用混杂模式:[-]promisc :抓包用,不过抓包工具会自动启用此功能
ifconfigj命令举例: ifconfig -a ifconfig eth1 up|down ifup eth1 | ifdown eth1 ifconfig eth1 172.22.66.66/16 :修改 ifconfig eth1:2 10.10.10.10/24 :增添 ifconfig eth1:3 10.10.10.10/24 ifconfig eth1:aa 20.20.20.20/16 ip link set eth0 up | down ip addr add 2.2.2.2/24 dev eth0 :此方法增加IP,用ifconfig命令无法查看 ip addr add 3.3.3.3/16 dev eth0 lable eth0:2 :就是之前的别名方式 ip addr del 2.2.2.2/24 dev eth0 ip addr flush dev eth0 : eth0 的IP地址全部清空 (netstat | ss) -nta -ntl -ntp -ntupa

5.3. ip 命令

  • 现在比较常用的命令
1. ip - show / manipulate routing, devices, policy routing and tunnels ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | route } 2. ip link - network device configuration set dev|IFACE 可设置属性: up and down:激活或禁用指定接口 - 也可直接用 ifup/ifdown IFACE 的形式禁用启用网卡 show [dev|IFACE]:指定接口 [up]:仅显示处于激活状态的接口 3. ip addr { add | del } IFADDR dev STRING [label LABEL]:添加地址时指明网卡别名 [scope {global|link|host}]:指明作用域 global: 全局可用 link: 仅链接可用 host: 本机可用 [broadcast ADDRESS]:指明广播地址 4. ip address show - look at protocol addresses [dev DEVICE] [label PATTERN] [primary and secondary] 5. ip addr flush 使用格式同show 6. ip route - routing table management

5.3.1. 一些常用例子:

- 添加路由:ip route add ip route add TARGET via GW dev IFACE src SOURCE_IP **TARGET:** 主机路由:IP 网络路由:NETWORK/MASK ip route add 192.168.0.0/24 via 172.16.0.1 ip route add 192.168.1.13 via 172.16.0.1 - 添加网关:ip route add default via GW dev IFACE ip route add default via 172.16.0.1 - 删除路由:ip route del TARGET - 显示路由:ip route show|list - 清空路由表:ip route flush [dev IFACE] [via PREFIX] ip route flush dev eth0 - **配合网卡别名**: ip addr add 172.16.100.100/16 dev eth0 label eth0:0 ip addr del 172.16.100.100/16 dev eth0 label eth0:0 ip addr flush dev eth0 label eth0:0

5.4. route命令

  • 上面已经介绍过,这里重复写一遍
查看:route -n 添加:route add route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] 目标:192.168.1.3 网关:172.16.0.1 接口(可不写,会自动判断,标准还是写上) eth0 route add -host 192.168.1.3 gw 172.16.0.1 dev eth0 目标:192.168.0.0 网关:172.16.0.1 接口 eth0 route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0 route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0 默认路由,网关:172.16.0.1 route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1 route add default gw 172.16.0.1 删除:route del route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] 目标:192.168.1.3 网关:172.16.0.1 route del -host 192.168.1.3 目标:192.168.0.0 网关:172.16.0.1 route del -net 192.168.0.0 netmask 255.255.255.0

5.4.1. 配置动态路由—{quagga包,vtysh}

其通过各种算法自动获取路由信息,大型网络用

实现方式是通过守护进程获取动态路由

  • 安装quagga包
    • 支持多种路由协议:RIP、 OSPF和BGP ,简单来说就是各种路由相互学习路由表信息
  • 命令vtysh配置

5.5. netstat命令

  • 过时命令,用ss效率更高,很多选项通用
  • 显示网络连接(默认显示建立连接的连接,可用-a -l选项选择其它)
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p] -t: tcp协议相关 -u: udp协议相关 -w: raw socket相关 -l: 处于监听状态 -a: 所有状态 -n: 以数字显示IP和端口 -e:扩展格式 -p: 显示相关进程(应用程序)及PID - 常用组合: -tan, -uan, -tnl, -unl - 显示路由表: netstat {--route|-r} [--numeric|-n] -r: 显示内核路由表 -n: 数字格式
  • 显示接口统计数据:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n] netstat -i netstat –I=IFACE 或者 netstat -IIFACE (注意后面的写法要写在一起中间没有空格) ifconfig -s eth0 :等价于上面命令
  • 例子:
watch -n 0.5 netstat -i :每0.5秒刷新显示统计信息来进行观测

5.6. ss命令

- 格式:ss [OPTION]... [FILTER] - netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息 - 选项: -t: tcp协议相关 -u: udp协议相关 -w: 裸套接字相关 -x:unix sock相关 -l: listen状态的连接 -a: 所有 -n: 数字格式 -p: 相关的程序及PID -e: 扩展的信息 -m:内存用量 -o:计时器信息 - FILTER : [ state TCP-STATE ] [ EXPRESSION ] - TCP的常见状态: tcp finite state machine: LISTEN: 监听 ESTABLISHED:已建立的连接 FIN_WAIT_1 FIN_WAIT_2 SYN_SENT SYN_RECV CLOSED - EXPRESSION: dport = (目标端口) sport = (源端口) 示例:'( dport = :ssh or sport = :ssh )' - 常用组合: -tan, -tanl, -tanlp, -uan - 常见用法 ss -l 显示本地打开的所有端口 ss -pl 显示每个进程具体打开的socket ss -t -a 显示所有tcp socket ss -u -a 显示所有的UDP Socekt ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的ssh连接 ,其中ssh写成22也可,选项还可再加一个-n,下同 ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接 ss -s 列出当前socket详细信息

5.7. watch

  • 每多少秒刷新观察一下后面命令的结果
# ping -s 65507 -f IP # watch -n 0.5 netstat -i [-Ieth0]

5.8. 各命令注意点

  1. ifconfig的来源和信息 rpm -qi net-tools ,从这里和man帮助中可见命令已经过时,用ip命令代替

    # rpm -qf /sbin/ifconfig net-tools-2.0-0.24.20131004git.el7.x86_64
  2. 配置一个网卡的多个地址,得用别名的方式,直接配置可用ifconfig命令,永久配置可以直接cp 原配置文件改名然后写入信息即可, 比如 cp ifcfg-eth0 ifcfg-eth0:2 ,(可以有多个,名字也可以不是数字)
    最关键的就是注意配置文件中的DEVICE中后面的名字要和文件名中后面的名字一样,这里面就是DEVICE=eth0:2 , 此时IP就可以自己改了,其他的某些配置也可以改了。配置完之后重启网络服务即可。

    • 注意linux中如果想要即有静态IP又有动态IP配置在一个网卡上,那么只有原始的主配置文件可以配置动态DHCP服务的设置,其它的别名配置文件中不能够配置动态IP,只能静态IP。不论动态还是静态,这些网址都可以同时生效。
    • windows中也可以同时配置动态和静态,比如家中动态(家中路由器带有DHCP服务器)和工作中静态(注意必须是没有DHCP服务的情况下,不然动态地址会起作用),但这两个只能同时生效一个,可自行查看如何配置。
  3. 多个交换机分别用一根网线(每一个都分配一个中等规模的网段)连接到一个总交换机上,然后这个总交换机用一根网线连接到一台服务器上的一个网卡上(支持ftp等服务),给这一个网卡设置多个不同的IP地址(分别属于多个交换机的各个网段),那么这样这些不同网段的主机都能访问到这个ftp服务器,不同网段之间也能相互连接(前提是总交换机上没有做限制)。这样就构成了一个简单的没有外网链接的局域网

    • 此时可以在服务器上添加更多的物理网卡,比如连接到外网,链接到财务办公网络。同时也可以做安全策略让财务办公网络无法与上面的局域网通信,但是上面局域网可以与外网通信(开启网卡之间的数据转发功能)。
    • 当然更多情况下是在主交换机上直接再接上一个路由器连接外网,在这个路由器上做配置,而不是把服务器当做路由器来使用。
    • 不过在最初的局域网中,可以看到服务器网卡(可以看做路由一个接口)用一根网线配置了多个网段的IP地址,并配置了路由表(网关为0,多个目标网段各不相同,但是用同一接口),这样的路由设置被称为单臂路由(只有一个接口)。
  4. 紧接着3中情况分析,不同交换机之间的VLAN之前知道可以用一个TRUNK接口和802.1Q协议来设置相互连接成为一个VLAN(4096个VLAN编号),那么两个交换机的VLAN便可以相互通讯。但是如果想要把一个交换机上的两个不同的VLAN链接在一起,常识中我们知道必须通过路由:要么是三层交换机直接配置路由,要么是二层交换机再单买一个路由器。

    • 这个路由器要么直接连接这个交换机的多个口,分别属于不同vlan不同网段,然后设置路由表让他们之间相互通讯。要么就是可以配置的二层交换机利用trunk接口,只链接一跟网线到这个路由器上,然后将这个路由器连接的接口的IP设置为多个,属于这多个不同的VLAN,然后路由表内信息设置一下(类似上面的局域网服务器的网卡,其实不用添加,因为设置完多个IP后会自动配置每个IP,除非像下面那样只设置一个IP,然后手动配多个路由表项),目标网段就是这些VLAN的网段,网关为0,接口全为路由器的这个接口。当然这些每个VLAN的主机内的路由表也得配置一下网关的信息,指向这个路由表的这个接口(不同VLAN的网关就是这个接口在不同VLAN之间设置的IP地址)。这样就把它作为一个单臂路由来使用了,还能配置安全策略。
    • 但是经过分析得知虽然不同vlan,但是它们是物理连接在一起的,因此只需要配置不同VLAN内的主机上的路由表,添加对方Vlan的网段的路由信息(网段为对方网段,网关为0,接口是这个接口,详细分析看ARP那部分),看起来是路由表有错误(因为网关为0的时候代表直连,但是目标网段却不是接口IP所处的网段),但这种做法只是为了强行让本机进行ARP广播,然后找到目标IP的MAC进行通讯。当然这个目标IP的主机也得设置路由表,不然只能收到广播却无法回复,不知道往哪里回复。
    • 还可以直接在主机上添加目标网段和网关均为0,不过这样就能和所有的VLAN通讯了,不推荐,那VLAN设置的意义就没了,同时还无法进行外网的路由转发了(如果有外网的网关,但这种写法会让它判断为任何目标地址直接ARP广播)不推荐这种添加方式。
    • 只有一种情况会用到上面的方式,就是一台交换机没有DHCP服务,想把他下面连接的所有主机之间相连,每台IP地址随便配置(除了那些特殊的不能配置的之外比如127开头的),但只要配置了这种路由表项(目标网段0,网关0),他们之间仍然可以相互通讯。
  5. ip link命令网卡中的scope {global|link|host}

    • 其中global代表全局通用,其代表从这块网卡连接到来的数据包,或者从其他网卡连接到的数据包,均可访问到这个网卡设置的IP地址,因为global模式将会把此网卡的IP地址存入内核中,则其他网卡访问IP时也能查询到
    • link 代表只有从这个网卡到的数据包才能访问这个网卡设置的IP地址,其他的网卡到的数据包,就算目标IP是这个网卡的IP,也不能访问这个IP地址
    • host表示回环网卡,没有网络功能,就是本机给本机使用(本机即当客户端又当服务器时使用)
  6. 显式路由 route -n ; ip route ; netstat -nr

6. 网络不通错误简单分析:

  1. 网络不可到达:没有路由无法连接到未知的网段的网关,会显示如此
  2. 名字或者服务未知(6中为未知的主机):因为连接不到外网,DNS服务无法使用,无法解析域名IP地址,会显示如此;或者是没有配置DNS服务器地址(可以通过查看/etc/resolv.conf来看是否配置了DNS服务器)
  3. 同网段内的IP 目标主机不可到达:说明同网段内没有这个IP地址的主机(ARP广播没有回应)或者说对方收到了但是没有回复(或者说回复了没有传回来);总之就是包发送出去了但没有接收回来。
  4. 不同网段IP 目标主机不可到达:经过路由器转发之后,如果转发到目标网段内则变成,第3项相同的结果,如果没有转发到目标网段内,说明路由器中的路由表无法找到目标网段,信息不完整。
  5. (此处不再区分是否处于相同网段,参考3和4) 目标端口(注意这里的端口指的是dev网卡端口,不是TCP协议里的端口,icmp协议没有port这个概念)不可达:说明对方的防火墙拒绝了本机的ping命令请求(REJECT) {iptables -A INPUT -s IP地址 -j REJECT}
  6. ping了之后没反应 : 可能是对方收到了但是不回应(防火墙DROP),也可能是对方根本没收到,这两种情况都是一样的显示这种情况 {iptables -A INPUT -s IP地址 -j DROP}
    • 可用tcpdump -i INTERFACE(端口) -nn(数字形式) icmp(只抓ping命令包) 命令查看一下包裹信息来判断
    • 附加,其中icmp处可以写各种协议来只查看此协议的包括信息,比如arp tcp ip udp icmp等等,但是不能查看应用服务如sshd

7. CentOS 7网络属性配置

CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化

CentOS 7使用基于硬件,设备拓扑和设置类型命名:

(1) 网卡命名机制 systemd对网络设备的命名方式 (a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1 (b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1 (c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0 (d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56 (e) 上述均不可用时,则使用传统命名机制

7.1. 网卡名称

  1. 基于BIOS支持启用biosdevname软件
- 内置网卡:em1,em2 - pci卡:pYpX Y:slot ,X:port
  1. 名称组成格式
- en: Ethernet 有线局域网 - wl: wlan 无线局域网 - ww: wwan无线广域网
  1. 名称类型:
- o<index>: 集成设备的设备索引号 - s<slot>: 扩展槽的索引号 - x<MAC>: 基于MAC地址的命名 - p<bus>s<slot>: enp2s1

7.2. 采用传统命名方式

  1. 编辑/etc/default/grub配置文件
    GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0 biosdevname=0" 或:修改/boot/grub2/grub.cfg

  2. 为grub2生成其配置文件 grub2-mkconfig -o /boot/grub2/grub.cfg

    • -o 换成 >重定向也可以
  3. 重启系统

    # ll /etc/grub2.cfg lrwxrwxrwx. 1 root root 22 Mar 5 21:16 /etc/grub2.cfg -> ../boot/grub2/grub.cfg

7.3. 额外知识点:删除虚拟网卡

yum remove libvirt-daemon

8. CentOS 7网络配置工具—{nm-connection-editor,nmtui,nmcli}

  1. 图形工具:nm-connection-editor
  2. 字符配置tui工具:nmtui (centos6里面 setup命令的第4项也可以,7中没有了)
  3. 命令行工具:nmcli :NetworkManager client (7中自带bash_completion包,可以用它来补全命令)

8.1. nmcli可用来准备多套配置来进行装载

  1. 一种方法就是用nmcli命来修改和创建ifcfg文件,然后用nmcli connection up |down 连接名 的方式装载
  2. 另一种就是自己先创建一个ifcfg文件,然后用nmcli connection reload 刷新载入配置文件,然后再装载修改配置文件即可

8.1.1. nmcli命令注意点:

  1. 多个配置文件针对一个设备的时候,设备DEVICE的内容要写的是一样的,注意它和别名的配置文件的区分:别名的配置文件是让一块网卡同一时间有多个IP地址,DEVICE后面的名字必须是eth0:1这种格式,有主配置别名配置之分;而一块网卡的多个配置文件则是一块网卡有多个不同地址根据环境不同来进行切换装载的,其中DEVICE后面的名字都是一样的比如eth0,没有主配置附加配置之分,全都为主配置。
  2. 多个配置文件针对同一网卡的时候虽然没有主配置附加配置的区别,但经过各种测试(修改文件名字改变ls的排序,修改NAME的顺序,修改文件的a m ctime等)均发现网络服务重启的时候会先默认载入最开始存在的自动生成配置文件。
  3. 但是需要注意,如果删除掉了最开始存在的这个自动生成配置文件(或者说给它改了个名字让它无法识别比如前面加一个bifcfg等等),则经过测试时,重启网络服务后,多个配置文件针对同一个网卡的顺序将会变成ls的排序的那个顺序。

8.1.2. 更详细的nmcli命令以及TEAM设置(比bond更好的功能,只在Centos7中有,6中没有)使用参见另外的博客中所写

9. 测试网络工具—{traceroute,tracepath,mtr,nslookup,host,dig}

  • 在命令行下测试网络的连通性
显示主机名 hostname 测试网络连通性 ping 显示正确的路由表 ip route
  • 跟踪路由
traceroute IP tracepath IP mtr IP
  • 确定名DNS服务器使用
nslookup host dig
最后修改日期: 2021年7月7日

作者

留言

Sprunki Incredibox truly blends creativity and music in a fresh, intuitive way. As a fan of interactive composition, I appreciate how it builds on Incredibox’s foundation while adding unique sonic depth. The visuals are just as engaging as the sound-perfect for both novices and seasoned creators. Check it out at Sprunki Incredibox.

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。