运维人员也需要具备一定的网络基础知识,才能更好的对服务器网络管理层面进行配置、排查和维护。经由几个星期的对网络基础知识的补充,大概了解了以下些许关于网络的基本认知:

  1. 网络的结构:硬件+软件;这一点倒是跟计算机系统的组成相像;

  2. 网络的功能:资源共享+数据通信;前者是后者的目的所在,后者是前者的实现手段;

  3. 网络通信模型:ISO/OSI七层参考模型 和 TCP/IP四层参考模型

  4. IP地址部分:逻辑地址,子网掩码,端口的作用,网关作业等等

具备以上内容的知识后,就能对linux系统进行详细的网络配置了;


首先就是进行网卡属性的设置,包括:

  自动获取:在主机所在网络中,至少有一台DHCP服务器

  手动配置:

   a.用命令:有以下几个‘命令家族’:

    net-tools家族(ifcfg家族)

1.ifconfig(Windows:ipconfig):

查看网络接口的配置信息

配置网络属性

管理接口状态

2.route:

查看路由信息

配置路由信息(网关,静态路由,静态默认路由)

3.netstat:

状态及统计数据的查看

    iproute家族:

ip OBJECT(类似子命令)

  OBJECT可以是:

addr:IP地址和掩码

link:物理接口的管理

route:路由的管理

ss:

  状态及统计数据查看;

  相较于netstat来说,ss几乎和它的使用方法一样;但是性能却要高很多;



    nm家族(Network Manager)

 nmcli:命令行工具

 nmtui:text-window的工具

 nm家族只在CentOS7中使用

        在CentOS6里,用的是setup的子命令:

        system-config-network

        system-config-network-cmd

         system-config-network-tui

    b.配置文件:同样,使用命令的方法可以使配置信息立即生效,但是系统重启或者注销后会失效。因此,就需要对配置文件进行修改,使得配置的网卡的网络属性永久生效;


在解除具体CentOS系列中网络配置步骤之前,我们还需要了解其中的网络接口;

 接口命名的方式有:

a.传统的命名方式:

 根据网络的类型和特点;

以太网接口:eth#,#是从0开始的整数。

PPP网络   :ppp#,#也是从0开始的整数;

        环回接口:lo(loopback interface)

      A类网络127就是为环回接口预留的 。根据惯例,大多数系统把IP地址127.0.0.1分配给这        个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现。实际        上,访问127.x.x.x的所有IP都是访问环回接口(lo)。 

     b.可预测的命名方案:(Centos7开始):

  这种方案可以支持很多种命名机制

1.根据Firmware固件进行命名:

即每一台计算机的网卡在其计算机的硬件固件中都有唯一的标识符,比如:MAC地址,厂商标识,电器编号等;

2.根据物理拓扑结构:

每一台计算机的主板上都有固定数量的插槽或接口,如主板上第二个插槽连接的网卡的第一个物理接口等;

    根据不同的命名机制可以有如下的命名标准

 1) 如果Firmware或BIOS是主板上集成的设备提供的索引信息并且该信息可用,则根据此索引信息进行设备命名,如:enoX, eno1,eno167777736,...

 2) 如果Firmware或BIOS是主板上扩展插槽所提供的索引信息并且该信息可用,则根据此索引信息进行设备命名,如:ensX, ens0,ens2,...

 3) 如果硬件接口的物理拓扑的位置信息存在并可用,则可以根据此信息进行设备命名,如:enp1s0

 4) 如果用户显式的定义,可以根据诸如MAC地址进行命名;如:enx000c290045b3

 5) 如果上述可预测命名皆不可用,则延用传统命名方式对网络设备进行命名;


好,了解了网络接口的命名,接着就是命令的详细具体使用了;


-------------------------------------------------------------------------------------------

net-tools家族(ifcfg家族)

1.ifconfig命令:

 描述:ifconfig - configure a network interface

ifconfig [interface]:用于查看网络接口的配置信息

如果不带任何参数,则显示所有处于激活状态的网络接口信息;

如果执行带有参数,则无论接口是否激活,都显示出来


ifconfig interfere address 配置网络信息

ifconfig interface IP/PREFIX_LEN [up/down]

ifconfig interface IP netmask SUBNET_MASK [up/down]


常用选项:

-a:显示所有的网络接口,无论是否处于激活状态

    2.route

 显示路由表的路由条目 可能包括以下几种类型

a.主机路由:目标地址是特定的单个ip地址

b.网络路由:子网路由;主网路由,超网路由(CIDR);分别例如:

10.10.10.0/24

192.168.1.0/24

192.168.0.0/16

c.默认路由:目标地址是0.0.0.0/0的条目


选项:-n

设置路由信息:

route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

route del [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

设置默认网关:

route add default gw 192.168.100.1

default == -net 0.0.0.0 netmask 0.0.0.0

     删除默认网关:

   route del default



    3.netstat:

 a.Print network connections

[--tcp|-t]                         只显示与TCP协议相关的网络连接

    [--udp|-u]    只显示与UDP协议相关的网络连接

    [--udplite|-U]                     只显示udolite协议相关的网络连接

[--sctp|-S]                        只显示与sctp协议相关的连接

[--raw|-w]                         显示与裸套接字相关的网络连接()  

[--listening|-l]                     显示处于监听状态的TCP连接;

[--all|-a]    查看所有状态的任意连接

     [--numeric|-n]                 数字化显示结果中的主机名,端口号,用户id等等信息

        [--numeric-hosts]  

        [--numeric-ports]   

        [--numeric-users]  

     [--extend|-e[--extend|-e]]      扩展格式显示结果

     [--program|-p]              显示


常用选项的组合有  -tan  -uan  -tnl  -unl  -tnlp  -unlp  -tunlp



iproute家族

ip 命令 :

描述 -- show / manipulate routing, devices, policy routing and tunnels(查看 配置路由 设备 策略路由 和 通道)

用法:ip [ OPTIONS ] OBJECT { COMMAND | help }


      OBJECT 可以是:{ link | addr | route | netns }


      OPTION 有 { -V[ersion] | -s[tatistics] | -r[esolve] | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] }


    1.ip link COMMAND  (COMMAND--add delete set show help)

    ip link set DEVICE { up | down } 修改网络设备的配置参数

     ip link set [dev] IFACE_NAME { up | down }:激活或者禁用网络接口


    2.ip netns COMMAND -- 设置内核中的网络名称空间

    list 

    add NS_NAME

    exec NS_NAME cmd

    delete NS_NAME

    3.ip addr COMMAND -- 

      add IFADDR dev IFACE_NAME 为指定的网络接口添加IP地址

      del

      flush  清空IP地址

      { show | list }


     为网络接口增加多个IP地址,并且能够使用ifconfig查看

     ip addr add IPADDR dev IFACE_NAME label LABEL_NAME


     ip route COMMAND -- 查看和设置路由表信息

      ip route { add | del } TARGET/PREFIX via NETX_HOP [dev IFACE_NAME]

      ip route list

ss:   

another uniity to investigate sockets


    1.ss [opt] [ FILTER ]

-t:TCP相关

-u:udp相关

-w  raw socket相关

-l 处于监听状态的连接

-a 所有状态的套接字连接

-n 数字化显示结果

-p 显示相关的应用程序和PID

-e 扩展的信息

        以上与netstat命令的选项基本类似,不一样的有:

-m 内存使用量

-o:计时器信息


[FILTER] = [ state TCP-STATE ] [ EXPRESSION ]

TCP-STATE:TCP协议有限状态机中所有可用状态


EXPRESSION 

dport= :port

sport= :port


示例:

'( dport = :22 or sport = :22 )'


除了命令配置使得网络属性立即生效,还需要配置文件:

CentOS6中与ip mask gateway DNS相关的配置文件

/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME

    文件内容格式:

DEVICE    网络接口的名称

TYPE      网络接口的类型  常见的:Ethernet、Bridge、Token Ring ...

HWADDR    物理地址

ONBOOT    在系统引导的过程中,是否激活此设备

NETBOOT   是否可以使用此设备进行网络引导

BOOTPROTO 激活此接口时使用何种协议来配置此接口的属性

动态配置:dhcp、bootp

静态配置:static、none

IPV6INIT  是否在此接口上初始化IPV6协议;

USERCTL   是否允许普通用户管理此接口

IPADDR    指定此接口的固定IP地址,前提是BOOTPROTO为static或者none

NETMASK   设置ip地址的子网掩码

PREFIX    设置ip地址的网络前缀的位数

GATEWAY   设置默认网关

DNS1      首选dns服务器的地址指向

DNS2  备选DNS服务器的地址指向

DNS3  第三DNS服务器的地址指向

PEERDNS 是否允许从dhcp服务器获取dns服务器的地址指向替代此文件里的dns服务器指向,默认值为允许,即没有此行信息 默认开启

注意:NM_CONTROLLED 是否允许NetworkManager服务管理网络接口;此服务在CentOS6中非常不完善,所以建议不使用此服务进行网络接口的管理;而且最好永久关闭此服务。

主机名的配置文件 /etc/sysconfig/network

HOSTNAME 当前linux系统使用的主机名称

命令 hostname 查看当前系统的FQDN  (Fully Qualified Domain Name)完全合格域名/全称域名

hostname NEW_HOSTNAME


CentOS7中:

与ip mask gateway DNS相关的配置文件

/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME

多数参数与CentOS6相同


UUID 全局唯一标识符,唯一标识此网络接口

DEFROUTE 

NAME

主机名称的配置文件:/etc/sysconfig/network

# hostnamectl set-hostname NEW_NAME


本地解析配置文件:/etc/hosts

格式: IP地址   主机名(多个主机名空白字符格隔开)


解析器文件:/etc/resolv.conf



静态路由的配置文件  /etc/sysconfig/network-scripts/route-IFACE_NAME


两种风格的写法

1.每条路由信息占一行

TARGET via NETX_HOP [dev IFACE_NAME]


10.0.0.0/8 via 192.168.100.254

2.每条路由信息占多行

ADDRESS#=TARGET

NETMASK#=MASK

GATEWAY#=NEXT_HOP

#表示编号数字



Bonding -- 绑定

就是将多块网卡(网络接口设备)绑定到同一ip地址,对外提供网络服务;这些网卡之间可以实现负载均衡或高可用技术;

通过Bonding,虚拟一个网卡对外提供服务及网络连接,所有的物理网卡都被修改为相同的MAC地址


Bonding的工作模式:

Mode 0 -- 负载均衡解决方案,其负载均衡的算法为balance-rr(round robin,轮询)

轮询策略意味着从头到尾顺序的在没一个slave接口上发送数据包;该模式可以提供负载均衡以及容错的能力;


Mode 1 -- 主备解决方案,(active-backup  master-backup).

在此模式中,只有一个slave接口被激活 用于正常数据传输;而其他的接口都监视此接口的工作状态;当且仅当活动的slave接口失败的时候,才会

从其他备份的接口中选择一个用于激活;该模式只能实现容错,无法进行负载均衡

Mode 3 -- 全广播解决方案。在所有的slave接口上传送全部报文,


miimon  用来链路监测。如果miimon=100,则系统每100ms监测一次链路连接的状态。


使用Bonding的时候,需要配置:

1.创建虚拟接口

2.选择miimon的监测时间和Bonding的工作模式

3.选择用于此次Bonding的物理接口


在/etc/sysconfig/network-scripts/ifcfg-bond0文件里指定Bonding的特性即可:

DEVICE=bond0

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

BONDING_OPTS="miimon=100 mode=0"

IPADDR=172.16.111.11

PREFIX=16

物理网卡配置:

/etc/sysconfig/network-scripts/ifcfg-eth1


DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

USERCTL=no

...

注意不要配置ip地址


Bonding最好在CentOS6里去实现。在7里使用网络组的方式


CentOS7里的nmcli:


nmcli  [ OPTIONS ] OBJECT { COMMAND | help }

OBJECT:connection | device 


device - show and manage network interfaces

COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }


connection - start, stop, and manage network connections

COMMAND := { show | up | down | add | edit | modify | delete | reload | load

              }


          show:显示所有网络连接的属性信息;


          up|down:启用或禁用指定的网络连接;


          add:添加新的网络连接的;

          autoconnect yes|no:是否自动启动此连接,在配置文件中添加ONBOOT=yes|no;

          ifname IF_NAME:指定要创建连接的目标网络接口设备名称;

          con-name CON_NAME:为指定的网络接口设备创建一个连接名称;

          type TYPE:指定网络设备的接口类型


          示例:

          # nmcli connection add autoconnect yes ifname eno67109432 con-name eno666 type ethernet


          delete:删除指定的网络连接

          # nmcli connection delete CON_NAME


          示例:

          # nmcli connection delete eno666



          reload:不重启网络接口,但重新加载其配置文件中的配置信息;


          modify:

          modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>

          <setting>:

          802-3-ethernet.mtu

          connection.autoconnect

          ipv4.addresses

          ipv4.dns

          ipv4.gateway

          ipv4.method

示例:

          # nmcli connection modify "系统\ eno50332208" ipv4.addresses 1.2.3.4/8 ipv4.dns 202.202.222.222 ipv4.gateway 1.1.1.1


 nmtui: Text User Interface for controlling NetManager

  CentOS6 : system-config-network[-tui]或者 setup 中选择网络配置

  这两种虽然可以使用简单的图形界面,但都是修改了配置文件,并不能立即生效,所以要重启网络接口;

  .  


网络组(Network Teaming)

是将多个网络接口设备聚合在一起的方法,目的是实现冗余容错以及提高可用性和吞吐量;

  与Bonding技术相比具有更好的性能以及更好的扩展性;


  在CentOS 7中,网络组是由内核当中的一个内核驱动和一个名为teamd的守护进程来实现的;

  网络组可以实现多个工作模式,被称为运行器(runner);

  包括 broadcast、roundrobin、activebackup、loadbanlance、lacp--IEEE 802.3ad 的标准,全称link aggregation control protocol,链路聚合控制协议


  网络组接口特点:

  1.启动网络组接口并不会自动启动网络组中其他port接口

  2.启动网络组终端port接口,也不会自动启动网络组接口;

  3.禁用网络组接口,则会立即随之禁用网络组中的port接口

  4.对于没有port接口的网络组接口而言,只能配置静态IP地址,不能设置从DHCP获取;如果设置了DHCP,网络组接口就会一直等待port接口的加入;

  创建网络组接口的方法:

  # nmcli connection add type team con-name TEAM_CONF_NAME [ifname IF_NAME] config JSON

  JSON是用来指定runner的方式,格式为:

   '{"runner": {"name": "METHOD"}}'


  示例:


  创建port接口:

  nmcli connection add type team-slave [con-name TEAM_CONF_NAME] 


  注意:如果不指定con-name,则默认的con-name为team-slave-IF_NAME


  # nmcli connection add type team-slave con-name