网络管理3

一、知识整理

1、跨网络通信:路由

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

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

2、网络配置文件:IP、MASK、GW、DNS相关配置文件

/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一行files和dns互换,用于改变优先级。

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对网络设备的命名方式:

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

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

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

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

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

网卡名称:基于BIOS支持biosdevname中,内置网卡em1,em2;pci卡:pYpX(y:slot插槽,X:port端口)。

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

网卡名称含义:

en:Ethernet 有线局域网

wl:wlan 无线局域网

ww:wwan无线广域网

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

常用组合:

[root@localhost ~]# ss -tan 数字格式显示tcp连接的所有信息
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、RHEL7和Centos 7中默认的网络服务有NetworkManager提供,这是动态控制及配置网络的守护进程,在centos6中并不稳定,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的ifcfg类型的配置文件,支持bond to team。可以用命令工具nmcli来控制NetworkManager,此命令需要NetworkManager是运行状态,在7中还支持补全,使用起来功能更加强大。

nmcli命令相当于直接修改文件,重启网络即生效。

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

网络组的方式:runner;broadcast;roundrobin;activebackup;loadbalance;lacp(implements the 802.3ad Link Aggregation Control Protocol)。

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

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

blob.png

一、课后练习

1、配置模拟路由

步骤一:用两个系统添加网卡,分别为eth0和eth1,添加新网卡的配置文件。若为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

步骤三:添加路由

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

blob.png

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

blob.png

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

blob.png

步骤四:开通路由功能

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

blob.png

blob.png

步骤五:添加主机并测试

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

blob.png

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

blob.png

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

blob.png

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

blob.png

问题:在实验的过程中,使用左侧的eth0对windows主机进行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

步骤三:测试网络组

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

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

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

赞 (0)
SilencePavilionSilencePavilion
上一篇 2016-09-13 11:17
下一篇 2016-09-13 11:17

相关推荐

  • ansible配置详解

    概述     ansible是一款无需在被管理主机上安装客户端,基于SSH对多台目标主机进行同时操作的轻量级的管理软件,借助各个内部的功能模块,实现了批量系统配置、批量程序部署、批量运行命令等功能。本篇就介绍一些关于ansible的基础配置相关的内容,具体包括:     1、an…

    Linux干货 2016-11-05
  • LVM原理、创建、扩容、缩减、快照详解

    LVM是什么?为什么要使用LVM?     LVM(Logical Volume Manager):逻辑卷管理, 在日常使用或生产环境中, 我们可能会因为在规划存储时未考虑到未来数据增长的速度超乎我们的预计而措手不及,因为增加一块硬盘再将源数据移到新硬盘上很麻烦并且提高了成本还浪费硬盘空间。   &…

    Linux干货 2016-03-09
  • Flex Ant自动构建

    1.  Flex SDK Ant        Flex开发者会遇到很多,比如自动构建,在一个有着N多模块,N处源码,构建过程复杂的Flex项目开发中,依赖人力手工构建项目非常不现实(机械重复且枯燥无味的过程,相信哪位开发人员都会避之唯恐不及,而且对于人力是非常大的浪费),而通过使用Ant,我们可以将这些工作…

    Linux干货 2016-03-22
  • 马哥教育网络班21期+第11周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 单向加密:只能加密,不能解密,提取数据指纹(特征码),来保证数据的完整性,如上图的第二步,单向加密的协议有MD5,SHA等 非对称加密:公钥和私钥成对出现,私钥必须本机器保存,用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然,数字签名是私钥加密特征码,如上图的第三步;实现对称秘钥交换,如上图第五步 对称…

    Linux干货 2016-08-15
  • 心清冷其若冰,志皎洁其若云

    第一篇,当做测试也做开始。 心清冷其若冰,志皎洁其若云。 这闹哄哄的人间啊,仿佛是一堆杂货。无奇不有,无所不能。情感,城市,人际。每天走在这杂乱里,需要有一颗清澈而安静的心,来面对。 会累的。就算是拥有了许多,也是会累的。偶尔,我们也会在深夜里泪流满面吧。偶尔,我们也会心烦意乱的不知所措吧。 太多欲望的人间,热闹的上演着各种剧本。太多空洞的灵魂,喧嚣着各种声…

    Linux干货 2016-11-28
  • Nginx lnmp环境及https的实现

    一、http事务简明  request: <method> <URL> <VERSION> MHADERS <body> response: <version><status><reason phrase> <HEADERS> … <body&…

    2014-09-25