网络管理3

一、知识整理

1、跨网络通信:路由

路由的分类:主机路由;网络路由;默认路由。

将主机接入网络,需要配置网络相关设置。一般包括如下内容:主机名;IP/MASK;路由:默认网关;DNS服务器:主、次、第三DNS服务器。

2、网络配置文件:IPMASKGWDNS相关配置文件

/etc/sysconfig/network-scripts/ifcfg-IFACE

路由相关配置文件:

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

3、dmesg查看开机信息

[root@localhost ~]# dmesg | grep SELinux
[    0.000137] SELinux:  Initializing.
[    0.000153] SELinux:  Starting in permissive mode
[    1.642242] SELinux:  Registering netfilter hooks
[    9.496131] SELinux: 2048 avtab hash slots, 105321 rules.
[    9.506233] SELinux: 2048 avtab hash slots, 105321 rules.
[    9.531455] SELinux:  8 users, 105 roles, 4952 types, 302 bools, 1 sens, 1024 cats
[    9.531458] SELinux:  83 classes, 105321 rules
[    9.535006] SELinux:  Completing initialization.

4、lsmod查看绑定模块:

[root@localhost ~]# lsmod | grep tcp
tcp_diag               12591  0 
inet_diag              18543  3 tcp_diag,dccp_diag,udp_diag

rmmod删除模块

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

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

udev:udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载固件时Linux 2.6.13内核。

卸载网卡驱动:modprobe  -r  e1000

modprobe e1000启动网卡模块

e1000是使用ethtool -i eth0命令查看,找到driver

[root@localhost ~]# ethtool -i eno16777736
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version: 
bus-info: 0000:02:01.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

5、临时别名:ifconfig eno16777736:1 ####/#

删除别名 ifconfig eno16777736:1 down

启用和禁用网卡:ifconfig eth0 up/down

6、本地解析器:解析器执行正向和逆向查询,联网时先查询本地解析再通过DNS解析。

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析),也可反向解析。DNS协议运行在UDP协议之上,使用端口号53。

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

getent hosts 查看/etc/hosts内容

[root@localhost ~]# getent hosts
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1       localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

cat /etc/resolve.conf 查看配置DNS

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com

cat /etc/nsswitch.conf 可以更改优先级,默认hosts优先于DNS

hosts:      files dns一行filesdns互换,用于改变优先级。

7、route配置文件/etc/sysconfig/network-scripts/route-IFACE

两种格式:第一种  #### via GW

第二种:每三行定义一条路由

ADDRESS1=TARGET

NETMASK1=mask

GATEWAY1=GW

格式是:ADDRESS#=TARGET

NETMASK#=mask

GATEWAY#=GW

8、在网卡配置文件中添加一行DOMAIN=magedu.com。在/etc/hosts文件中添加一行

#.#.#.#     www.magedu.com

重启网络服务后,在/etc/resolv.conf会多出一行search  magedu.com。此时用ping命令直接ping www. 会自动识别本地解析,ping #.#.#.#

9、centos7网络属性配置:rhel7基于硬件,设备拓扑和设置类型命名:

systemd对网络设备的命名方式:

①如果FirmwareBIOS为主板上集成的设备提供的索引信息可用,且可预测,根据此索引进行命名,例如eno1

②如果FirmwareBIOSPCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1

③如果硬件接口的物理信息可用,则根据此信息进行命名,例如enp2s0

④如果用户显式启动,也可根据MAC地址进行命名,例如enx2387a1dc56

⑤上述均不可用时,则使用传统命名机制。

网卡名称:基于BIOS支持biosdevname中,内置网卡em1em2pci卡:pYpXyslot插槽,Xport端口)。

PCI定义局部总线的标准,支持10台外设,64位寻址:pci插槽,基于局部总线的扩展插槽。

网卡名称含义:

enEthernet 有线局域网

wlwlan 无线局域网

wwwwan无线广域网

o <> 集成设备的设备索引号

s<> 扩展槽的索引号

x<MAC> 基于MAC地址的命名

p<bus>s<slot>  enp2s1

网卡命名过程:

第一步:udev,辅助工具程序/lib/udev/rename_device/usr/lib/udev/rules.d/60-net.rules

第二步:biosdevname 会根据/usr/lib/udev/rules.d/71-biosdevname.rules

[root@localhost ~]# cat /usr/lib/udev/rules.d/60-net.rules 
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device"
, RESULT=="?*", NAME="$result"

第三步:通过检测网络接口设备,根据/usr/lib/udev/rules.d/75-net-description.rules

二、命令详解及事例

1、route命令:查看路由route -n;添加路由route -add

route add -net #.#.#.# gw #.#.#.# dev eth#

route del -net #.#.#.# netmask #.#.#.#

route del -host #.#.#.#

2、ip命令:ip [opt] OBJECT {help|COMMAND}

OBJECT:link|addr|route

ip link network device configuration

[root@localhost ~]# ip link set  dev  eno16777736 up
[root@localhost ~]# ip link set  dev  eno16777736 down
[root@localhost ~]# ifup eno16777736
RTNETLINK answers: File exists
[root@localhost ~]# ifdown eno16777736
[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT 
qlen 1000    link/ether 00:0c:29:51:36:20 brd ff:ff:ff:ff:ff:ff

ip link show [dev IFACE] 指定接口

[up] 仅显示处于激活状态的接口

ip addr {add|del} ADDR dev STRING

[LABEL] 添加地址时指明网卡别名

[scope {global|link|host}] :指明作用域

global 全局可用,默认。

当三块网卡,两块网络组挂掉之后,第三块继承了IP,也可以继续用。因为IP是写入内核中的,并不是写在网卡上,当定义为global后,全局可用。

link 仅链接可用

host 本机可用

[broadcast ADDRESS] 指明广播地址

ip address show look at protocol addresses

[root@localhost ~]# ip addr add 172.16.100.13/16 dev eno16777736 label eno16777736:1
[root@localhost ~]# ifconfig 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.54.250  netmask 255.255.0.0  broadcast 10.1.255.255
        inet6 fe80::20c:29ff:fe51:3620  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:51:36:20  txqueuelen 1000  (Ethernet)
        RX packets 14445  bytes 1328780 (1.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 841  bytes 98076 (95.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.100.13  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 00:0c:29:51:36:20  txqueuelen 1000  (Ethernet)
[root@localhost ~]# ip addr flush dev eno16777736 label eno16777736:1

清空一个网卡上的所有地址:ip addr flush

[root@localhost ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.54.250  netmask 255.255.0.0  broadcast 10.1.255.255
        inet6 fe80::20c:29ff:fe51:3620  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:51:36:20  txqueuelen 1000  (Ethernet)
        RX packets 16177  bytes 1442437 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 925  bytes 107932 (105.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ip route add 添加路由

ip route default via 172.16.0.1

ip route add 192.168.0.0/16 via172.16.0.1

ip route add 192.168.1.22  via172.16.0.1

ip route delete

ip route del 192.168.1.22

显示路由 ip route show|list

清空路由表 ip route flush [devv IFACE] [via PREFIX]

ip route flush dev eth0

3、ss命令:netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。

-t  tcp协议相关

-u udp协议相关

-w 裸套接字相关

-l listen状态的连接

-x unix sock相关

-a 所有

-n 数字格式

-p 相关的程序及PID

-e 扩展的信息

-m 内存用量

-o 计时器信息

TCP常见的状态:tcp finite(有限的) state machine

LISTEN 监听

ESTABLESHED 已建立的连接

FIN_WAIT_1 

FIN_WAIT_2 四次断开信号

SYN_SENT

SYN_RECV 三次握手信号

CLOSED 关闭状态,数据传输完毕,暂时性

[root@localhost ~]# ss sport = :ssh
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port              
  tcp    ESTAB      0      0      10.1.54.250:ssh                  10.1.250.66:50129                
[root@localhost ~]# ss dport = :ssh
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port   
ss -n dport = :ssh 目标端口destination
ss -n sport = :ssh 源端口source

常用组合:

数字格式显示tcp连接的所有信息

[root@localhost ~]# ss -tan 
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN     0      128                  *:22                                *:*                  
LISTEN     0      100        127.0.0.1:25套接字,代表一个主机               *:*                  
ESTAB     0      52          10.1.54.250:22              10.1.250.66:50129              
LISTEN     0      128                  :::22                               :::*                  
LISTEN     0      100                 ::1:25                               :::*

[root@localhost ~]# ss -tanl 数字格式显示tcp连接的listen状态的所有信息
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN     0      128                   *:22                              *:*                  
LISTEN     0      100           127.0.0.1:25                                *:*                  
LISTEN     0      128                  :::22                               :::*                  
LISTEN     0      100                 ::1:25                               :::*                  
[root@localhost ~]# ss -tanlp 数字格式包括PID和命令显示tcp连接的listen状态的所有信息
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN     0      128      *:22            *:*   
users:(("sshd",pid=1211,fd=3))LISTEN0   100   127.0.0.1   :25       *:*
users:(("master",pid=2350,fd=13))LISTEN 0      128         :::22    :::* 
users:(("sshd",pid=1211,fd=4))LISTEN  0      100     ::1:25      :::*     
users:(("master",pid=2350,fd=14))[root@localhost ~]# ss -uan 显示PID,udp连接的所有信息
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
UNCONN     0      0             127.0.0.1:323                *:*                  
UNCONN     0      0              ::1:323                    :::*

显示所有已经建立的HTTP连接

[root@localhost ~]# ss -o state established '( dport = :http or sport = :http )'
Netid  Recv-Q Send-Q    Local Address:Port                     Peer Address:Port

找出所有连接X服务器的进程

[root@localhost ~]# ss -x src /tmp/.X11-unix/*
Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port

列出当前的socket详细信息:

[root@localhost ~]# ss -s
Total: 548 (kernel 714)
TCP:   5 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total     IP        IPv6
*   714       -         -        
RAW   0         0         0        
UDP   2         1         1        
TCP   5         3         2        
INET   7         4         3        
FRAG  0         0         0

4、RHEL7Centos 7中默认的网络服务有NetworkManager提供,这是动态控制及配置网络的守护进程,在centos6中并不稳定,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的ifcfg类型的配置文件,支持bond to team。可以用命令工具nmcli来控制NetworkManager,此命令需要NetworkManager是运行状态,在7中还支持补全,使用起来功能更加强大。nmcli命令相当于直接修改文件,重启网络即生效。

网络组:是将多个网卡聚合在一起的方法,从而实现冗余和提高吞吐量。网络组不同于bonding技术,它能提供更好的性能和扩展性,网络组由内核驱动和teamd守护进程实现。

网络组的方式:runnerbroadcastroundrobinactivebackuploadbalancelacpimplements the 802.3ad Link Aggregation Control Protocol)。

5、网络组team#和接口port#之间的关系:

启动网络组接口或port都不会启动另一个;当禁止team#port一定禁止,反之不然;没有portteam#可以启动静态IP;启用DHCP连接时,没有Portteam会等待port#的加入。

blob.png

一、课后练习

1、配置模拟路由

步骤一用两个系统添加网卡,分别为eth0eth1,添加新网卡的配置文件。若为centos7系统,为方便可更改文件使网卡使用普通命名方式。方法如下:

方法一:编辑/etc/default/grub配置文件,将其中GRUB_CMDLINE_LINUX的内容删除并改为GRUB_CMDLINE_LINUX=net.ifnames=0 rhgb quiet;为grub2生成其配置文件,使用命令grub2-mkconfig -o /etc/grub2.cfg;重启系统,但并没有生效,需要再更改网卡的配置文件device新名字,重启网络服务。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 10.1.54.250  netmask 255.255.0.0  broadcast 10.1.255.255

        inet6 fe80::20c:29ff:fe51:3620  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:51:36:20  txqueuelen 1000  (Ethernet)

方法二:直接修改/boot/grub2/grub.cfg;将linux16开头的一行最后添加,如下:

linux16 /vmlinuz-0-rescue-b2197fdfc4d146048b4934eb2a563b8c

root=/dev/mapper/centos-root ro    net.ifnames=0 rhgb quiet

重启,更改文件生效。

步骤二编辑配置文件,模拟为两个路由器,因此只需要写如下几行即可,

blob.png

更改四个网卡的配置文件,组成如下方式:

blob.png

关闭两台路由器的NetworkManager服务,关闭防火墙,重启网络生效。

blob.png

步骤三:添加路由

查看路由:路由器两个端口的路由在配置完成后重启网络的时候就会自动生成,如果无意清空所有路由,则会出现无法添加路由或网络不可达的状况。使用routeroute -n查看:

blob.png

配置路由,使用命令或者直接编辑修改配置文件。此处使用命令:

blob.png

注意:路由器本机的两个接口不需要配置,默认就可以直接到达,因为默认路由自动生成,要想到达130的网络直接使右侧路由器的eth1口经过左侧路由器的eth1口即可

blob.png

步骤四:开通路由功能

默认是无法作为路由器工作的,需要更改一个文件启用路由功能:

blob.png

步骤五:添加主机并测试

添加两个主机,此处使用一个windows和一个centos7作为主机,形成如下关系:

blob.png

配置完成后,使用ping -I IPACE ####命令测试。其中windowsIP可以在高级设置里面添加一个新的IP

blob.png

使用ping命令进行测试,先用右侧的路由器对130.1网段检测:

blob.png

再用主机对左侧的centos7进行测试:

blob.png

问题:在实验的过程中,使用左侧的eth0windows主机进行ping不能通,实验了多种方法包括重启网络,关闭防火墙,关闭NetworkManager服务和SELinux服务,重新配置路由皆不能成功,最后重启并重新配置解决。证明虚拟机的此主机还是有一定的不稳定性。

2、nmcli命令配置网络组

步骤一:添加一块网卡,使用ifconfig -a查看名字,此处在7中改了文件,因此是普通命名方式。手动生成新网卡的配置文件。

步骤二:使用命令创建网络组

首先启动服务

[root@localhost network-scripts]# service NetworkManager start
Redirecting to /bin/systemctl start  NetworkManager.service

设定名称和模式为loadbalance

[root@localhost network-scripts]# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"loadbalance"}}'

成功添加的连接 'team0'c5d804b2-825c-40df-858f-08e15df45a66)。

[root@localhost network-scripts]# nmcli connection modify team0 ipv4.addresses 10.1.54.250/16

给定网络为静态,manual

[root@localhost network-scripts]# nmcli connection modify team0 ipv4.method manual

连接网卡,con-name默认为team-slave-eth0,可以自行添加

[root@localhost network-scripts]# nmcli connection add type team-slave con-name team-slave-eth0 ifname eth0 master 
team0 成功添加的连接 'team-slave-eth0'(91b061f6-57b2-41eb-a004-ec89fabebd0b)。
[root@localhost network-scripts]# nmcli connection add type team-slave con-name team-slave-eth1 ifname eth1 master 
team0 成功添加的连接 'team-slave-eth1'(b2fa5eeb-e564-4571-a218-be821d1e1770)。
[root@localhost network-scripts]# nmcli connection up team0
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@localhost network-scripts]# nmcli device disconnect eth1
Device 'eth1' successfully disconnected.
[root@localhost network-scripts]# nmcli device connect eth1
Device 'eth1' successfully activated with '093c0f9c-2401-402d-b9cc-f97921e5c33c'.
[root@localhost ~]# nmcli connection up team-slave-eth1
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
[root@localhost ~]# teamdctl team0 state
setup:
  runner: loadbalance
ports:
  eth1
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  eth0
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0

步骤三:测试网络组

经过测试,主备模式的网络组在虚拟机模拟情况下依然有缺陷,像bondingmode0模式,次断开主能用,主断开次不能使用。其他模式相对稳定。

删除网络组时,将生成的所有文件删除,重启网络服务即可。

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/44761

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-10 09:51

    文章分类得当,结构清晰,对于tcp的三次握手,四次断开各个状态之间的转换是需要熟练掌握的,这也是面试中常会遇到的问题。