liunx系统网络

跨网络通信

跨网络通信:路由

  • 路由分类:
    主机路由
    网络路由
    默认路由
  • 优先级:精度越高,优先级越高

抓包工具tcpdump

安装

yum install tcpdump -y

语法格式

tcpdump [-AennqX] [-i 接口] [-w 保存的文件名] [-c 次数] [-r 已经保存好的tcpdump文档] [想抓取到的数据包的具体格式或者说是协议]

选项和参数:

  • -A :数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。

  • -e :使用资料连接层 (OSI 第二层) 的 MAC 数据包资料来显示;

  • -nn:直接以 IP 及 port number 显示,而非主机名与服务名称

  • -q :仅列出较为简短的数据包资讯,每一行的内容比较精简

  • -X :可以列出十六进位 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用

  • -i :后面接要『监听』的网卡接口,例如 eth0, lo, ppp0 等接口;

  • -w :如果你要将监听所得的数据包资料储存下来,用这个参数就对了!后面接文件名

  • -r :从后面接的文件中读出来。这个文件必须是已经存在的文件,并且这个『文件』是由 -w 所制作出来的。

  • -c :监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听, 直到使用者输入 [ctrl]-c 为止。

    所欲抓取的数据包格式:我们可以专门针对某些通讯协议或者是 IP 来源进行数据包的抓取,那就可以简化输出的结果,并取得最有用的资讯。

常见的表示方法有:

  • 'host foo', 'host 127.0.0.1' :针对单部主机来进行数据包撷取
  • 'net 192.168' :针对某个网域来进行数据包的撷取;
  • 'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制
  • 'tcp port 21':还可以针对通讯协定侦测,如 tcp, udp, arp, ether 等

还可以利用 and 与 or 来进行数据包资料的整合显示呢!

使用案例

# 抓取网卡 eth0 上的数据包,并以 ip 与端口号的方式展示
$ tcpdump -i eth0 -nn
17:04:27.784377 IP 172.16.153.160.22 > 172.16.153.1.58933: Flags [P.], seq 1700472:1700836, ack 1117, win 313, options [nop,nop,TS val 59343227 ecr 1067292474], length 364
17:04:27.784599 IP 172.16.153.1.58933 > 172.16.153.160.22: Flags [.], ack 1700836, win 4084, options [nop,nop,TS val 1067292474 ecr 59343227], length 0
17:04:27.784611 IP 172.16.153.1.58933 > 172.16.153.160.22: Flags [P.], seq 1117:1153, ack 1700836, win 4096, options [nop,nop,TS val 1067292474 ecr 59343227], length 36
^C   # 按下 Ctrl + c 结束
9472 packets captured              # 抓取到的所有数据包的数量
9472 packets received by filter    # 过滤后的数据包数量
0 packets dropped by kernel        # 被内核丢弃的数据包数量

# 我们来拿其中的一条来简单的说明以一下
17:04:27.784611 IP 172.16.153.1.58933 > 172.16.153.160.22: Flags [P.], seq 1117:1153, ack 1700836, win 4096, options [nop,nop,TS val 1067292474 ecr 59343227], length 36

17:04:27.784611       # 此数据包的抓取时间
IP                    # 通信的协议
172.16.153.1.58933    # 源地址 172.16.153.1 和 源端口 58933
>                     # 数据包的传输方向
172.16.153.160.22     # 目的地址 172.16.153.160 和 目标端口 22
Flags [P.], seq 1117:1153 这个数据包带有 PUSH 的资料传输标志, 且传输的资料为整体资料的 1117~1153 byte

抓取指定接口从指定ip发来的指定协议的包

$ tcpdump -i eth0 -nn src 192.168.2.3 and icmp

指定抓取某个端口的数据包

tcpdump -i eth0 -nn port 22

观察 tcp 三次握手过程

先监听本地回环接口

$ tcpdump -i lo -nn -c 5

$ 在打开另一个终端,以 ssh 的方式连接 127.0.0.1
$ ssh 127.0.0.1

# 返回到另一个终端观察返回的结果
# 第一步 客户端主动连接,发送带有 SYN 标识的 数据包 Flags [S], seq 3515943501
17:41:12.156587 IP 127.0.0.1.44056 > 127.0.0.1.10051: Flags [S], seq 3515943501, win 43690, options [mss 65495,sackOK,TS val 61459018 ecr 0,nop,wscale 7], length 0


# 第二步 服务端也向客户端发送含有 SYN 标识的数据包 Flags [S.], seq 6548797
# 同时回应 客户端的相应客户端的请求 ack 3515943502 (可以看出这是 加 1 的)
11:27:56.201138 IP 127.0.0.1.10051 > 127.0.0.1.44056: Flags [S.], seq 6548797, ack 3515943502, win 43690, options [mss 65495,sackOK,TS val 61459018 ecr 61459018,nop,wscale 7], length 0

# 第三步 客户端回应确认包
17:41:12.156626 IP 127.0.0.1.44056 > 127.0.0.1.10051: Flags [.], ack 1, win 342, options [nop,nop,TS val 61459018 ecr 61459018], length 0

# 开始传输数据
17:41:12.157131 IP 127.0.0.1.44056 > 127.0.0.1.10051: Flags [P.], seq 1:64, ack 1, win 342, options [nop,nop,TS val 61459018 ecr 61459018], length 63

基本网络配置

  • 将Linux主机接入到网络,需要配置网络相关设置

  • 一般包括如下内容:
    主机名
    IP/netmask
    路由:默认网关
    DNS服务器
    主DNS服务器
    次DNS服务器
    第三DNS服务器

CentOS 6 网卡名称

接口命名方式:CentOS 6
以太网:eth[0,1,2,...]
ppp:ppp[0,1,2,...]

  • 网络接口识别并命名相关的udev配置文件:
    /etc/udev/rules.d/70-persistent-net.rules

    也需要修改这个目录下的网卡配置文件和文件名

    /etc/sysconfig/networking/devices/

  • 查看网卡:
    dmesg |grep –i eth
    ethtool -i eth0

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

  • 装载网卡驱动:
    modprobe e1000

网络配置方式

静态指定:

临时生效命令

ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc

长久生效命令

system-config-network-tui,setup
配置文件
动态分配:
DHCP: Dynamic Host Configuration Protocol

setup命令

通过界面设置

system-config-network-tui

直接进入配置页面

ifconfig命令

ifconfig [interface]
ifconfig -a
ifconfig interface [up|down] 打开或关闭网卡
ifconfig interface [aftype] options | address ...
ifconfig interface IP/netmask [up] 设置IP地址
ifconfig interface IP netmask NETMASK 设置IP地址
注意:立即生效
启用混杂模式:[-]promisc

ifdown eth0 关闭网卡

ifup eth0 打开网卡

ifconfig eth0 1.1.1.1/24 设置IP地址

ifconfig eth0 0.0.0.0 清理地址

ifconfig eth0:2 1.1.1.1/24 给网口设置子接口

删除 直接down ifconfig eth0:2 down

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

    也可以不设置网关

    route add -net 192.168.0.0/24 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

    route del -net 192.168.0.0/24

设置的路由希望重启也有效,就将命令写入/etc/rc.local

查看

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0

配置动态路由

  • 通过守护进程获取动态路由
  • 安装quagga包
  • 支持多种路由协议:RIP、OSPF和BGP
  • 命令vtysh配置

安装yum install quagga -y

找到/etc/quagga下的配置文件模板,去掉后面的sample

然后当作服务启动

然后通过vtysh执行交互命令

netstat命令

显示网络连接

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
ifconfig -s eth0

ip命令

配置Linux网络属性:ip 命令

  • ip - show / manipulate routing, devices, policy routing and tunnels

    ip [ OPTIONS ] OBJECT { COMMAND | help }

    OBJECT := { link | addr | route }

    ip link网络链路的配置

    • set dev IFACE

      可设置属性:

      • up and down:激活或禁用指定接口
        ifup/ifdown
    • show [dev IFACE]:指定接口

      • [up]:仅显示处于激活状态的接口
  • ip addr { add | del } IFADDR dev STRING

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

    ​ [scope {global|link|host}]:指明作用域
    ​ global: 全局可用 一般是这个
    ​ link: 仅链接可用
    ​ host: 本机可用
    ​ [broadcast ADDRESS]:指明广播地址

  • ip address show查看ip地址

    ​ [dev DEVICE]
    ​ [label PATTERN]
    ​ [primary and secondary]

  • ip addr flush 使用格式同show 清除所有地址
    ​ 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

  • ip route 路由的管理
    ​ 添加路由: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

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的常见状态:
      • 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连接
  • ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
  • ss -s 列出当前socket详细信息

查看物理链路是否正常

mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok

网络配置文件

  • IP、MASK、GW、DNS相关配置文件:/etc/sysconfig/network-
    scripts/ifcfg-IFACE

  • 路由相关的配置文件:

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

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

    说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt

    • DEVICE:此配置文件应用到的设备
    • HWADDR:对应的设备的MAC地址
    • BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static,none, bootp
    • NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
    • ONBOOT:在系统引导时是否激活此设备
    • TYPE:接口类型;常见有的Ethernet, Bridge
    • UUID:设备的惟一标识
    • IPADDR:指明IP地址
    • NETMASK:子网掩码
    • GATEWAY: 默认网关
    • DNS1:第一个DNS服务器指向
    • DNS2:第二个DNS服务器指向
    • USERCTL:普通用户是否可控制此设备
    • PEERDNS:如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
  • 设备配置被保存在文本文件中

    • /etc/sysconfig/network-scripts/ifcfg-
    • 帮助文档列出完整选项列表:/usr/share/doc/initcripts-*/sysconfig.txt

dns解析

  • /etc/resolv.conf

    • nameserver DNS_SERVER_IP1
    • nameserver DNS_SERVER_IP2
    • nameserver DNS_SERVER_IP3
    • search magedu.com
  • /etc/nsswitch.conf

    与/etc/hosts相比优先于DNS

  • 正向解析:FQDN-->IP

    dig -t A FQDN

    host -t A FQDN

  • 反向解析:IP-->FQDN

    dig -x IP

    host -t PTR IP

路由配置文件

/etc/sysconfig/network-scripts/route-IFACE 要以网卡名结尾

  • 注意:需service network restart生效

  • 两种风格:

    • (1) TARGET via GW

      如:10.0.0.0/8 via 172.16.0.1

    • (2) 每三行定义一条路由

    • ADDRESS#=TARGET

    • NETMASK#=mask

    • GATEWAY#=GW

网卡别名

对虚拟主机有用

  • 将多个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 清空

设备别名

为每个设备别名生成独立的接口配置文件

  • 关闭NetworkManager服务

  • ifcfg-ethX:xxx

  • 必须使用静态联网
    DEVICE=eth0:0
    IPADDR=10.10.10.10
    NETMASK=255.0.0.0
    ONPARENT=yes

  • 注意:service network restart 生效

  • 参考:/usr/share/doc/initscripts-*/sysconfig.txt

网络接口配置-bonding

Bonding

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

Bonding工作模式

  • Mode 0 (balance-rr)
    轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力

  • Mode 1 (active-backup)

    活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见

  • Mode 3 (broadcast)
    广播策略:在所有的slave接口上传送所有的报文,提供容错能力

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

Bonding配置

创建bonding设备的配置文件

/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0”

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

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

miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路

删除bond0

ifconfig bond0 down
rmmod bonding

详细帮助:

/usr/share/doc/kernel-doc- version/Documentation/networking/bonding.txt

https://www.kernel.org/doc/Documentation/networking/bonding.txt

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) 上述均不可用时,则使用传统命名机制
  • (2) 名称组成格式

    • en: Ethernet 有线局域网
    • wl: wlan 无线局域网
    • ww: wwan无线广域网
  • 名称类型:

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

    s<slot>: 扩展槽的索引号

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

    p<bus>s<slot>: enp2s1

采用传统命名方式

使用传统命名方式:

  • (1) 编辑/etc/default/grub配置文件

    GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
    或:修改/boot/grub2/grub.cfg

    sed -ri.bak 's/(GRUB_CMDLINE_LINUX.* quiet)/\1 net.ifnames=0/' /etc/default/grub

  • (2) 为grub2生成其配置文件

    grub2-mkconfig -o /etc/grub2.cfg

  • (3) 重启系统

CentOS 7网络配置工具

CentOS7主机名

  • 配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
  • 显示主机名信息
    hostname
    hostnamectl status
  • 设置主机名
    hostnamectl set-hostname centos7.magedu.com
  • 删除文件/etc/hostname,恢复主机名localhost.localdomain

CentOS 7网络配置工具

  • 图形工具:nm-connection-editor
  • 字符配置tui工具:nmtui
  • 命令行工具:nmcli

nmcli命令

地址配置工具:nmcli

nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device 查看和管理的网络接口
nmcli device help
connection 查看和管理的网络链接
nmcli connection help
修改IP地址等属性:
nmcli connection modify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto

修改配置文件执行生效:systemctl restart network
nmcli con reload
nmcli命令生效: nmcli con down eth0
nmcli con up eth0

使用nmcli配置网络

NeworkManager是管理和监控网络设置的守护进程

设备即网络接口,连接是对网络接口的配置,一个网络接口可有多个连接配置,但同时只有一个连接配置生效

显示所有包括不活动连接
nmcli con show

显示所有活动连接
nmcli con show --active

显示网络连接配置
nmcli con show "System eth0"

显示设备状态
nmcli dev status

显示网络接口属性
nmcli dev show eth0

创建新连接eth123,IP自动通过dhcp获取 从eth0出口
nmcli c add con-name eth123 type Ethernet ifname eth0

删除连接
nmcli c del eth123

创建新连接eth123 ,指定静态IP,不自动连接
nmcli c add con-name eth123 ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254

或者

先创建链接,再修改

nmcli c add con-name eth123 ifname eth0 type Ethernet

修改

nmcli c edit eth123通过交互界面修改其他配置

启用eth123连接配置
nmcli con up eth123
查看帮助
nmcli con add help

修改连接设置

nmcli con mod eth123 connection.autoconnect no 设置不自动连接
nmcli con mod eth123 ipv4.dns 172.25.X.254 设置dns
nmcli con mod eth123 +ipv4.dns 8.8.8.8 添加dns
nmcli con mod eth123 -ipv4.dns 8.8.8.8 删除dns
nmcli con mod eth123 ipv4.addresses “172.16.X.10/24 172.16.X.254” 设置ip和网关
nmcli con mod eth123 +ipv4.addresses 10.10.10.10/16 添加ip

DNS设置,存放在/etc/resolv.conf文件中
PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取
等价于下面命令:
nmcli con mod eth123 ipv4.ignore-auto-dns yes

nmcli常用命令

命令 含义
nmcli d status 查看所有网络设备状态
nmcli c show 查看所有连接
nmcli c up eth123 激活连接
nmcli c down eth123 关闭连接
nmcli d disconnect ens33 关闭设备
nmcli n off 关闭所有管理的接口
nmcli c add ... 添加新连接
nmcli c mod eth123 ... 修改连接
nmcli c edit eth123 交互界面修改连接
nmcli c del eth123 删除连接

命令对应配置文件中的字段

修改连接配置后,需要重新加载配置

nmcli con reload
nmcli con down eth123 可被自动激活
nmcli con up eth123
nmcli dev dis eth0 禁用网卡,访止被自动激活

图形交互工具

nm-connection-editor

字符交互工具

nmtui
nmtui-connect
nmtui-edit
nmtui-hostname

nmcli实现bonding

添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup

添加从属接口
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

网络组Network Teaming

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量

网络组不同于旧版中bonding技术,提供更好的性能和扩展性

网络组由内核驱动和teamd守护进程实现.

多种方式runner
broadcast
roundrobin
activebackup
loadbalance
lacp (implements the 802.3ad Link Aggregation Control Protocol)

启动网络组接口不会自动启动网络组中的port接口

启动网络组接口中的port接口总会自动启动网络组接口

禁用网络组接口会自动禁用网络组中的port接口

没有port接口的网络组接口可以启动静态IP连接

启用DHCP连接时,没有port接口的网络组会等待port接口的加入

创建网络组接口

nmcli con add type team con-name CNAME ifname INAME [config JSON] CNAME 连接名,INAME 接口名
JSON 指定runner方式
格式:'{"runner": {"name": "METHOD"}}'
METHOD 可以是broadcast, roundrobin,activebackup, loadbalance, lacp

创建port接口

nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
CNAME 连接名
INAME 网络接口名
TEAM 网络组接口名

连接名若不指定,默认为team-slave-IFACE

nmcli dev dis INAME

nmcli con up CNAME
INAME 设备名

​ CNAME 网络组接口名或port接口

网络组示例

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

nmcli con up team0-eth1

nmcli con up team0-eth2

teamdctl team0 state

nmcli dev dis eth1

实验:创建网络组

ip link

nmcli con add type team con-name myteam0 ifname team0 config '{"runner": {"name": "activebackup"}}'

nmcli con mod team0 ipv4.addresses '192.168.0.100/24'

nmcli con mod team0 ipv4.method manual

nmcli con add con-name team0-port1 type team-slave ifname eth1 master team0

nmcli con add con-name team0-port2 type team-slave ifname eth2 master team0

teamdctl team0 state

实验:创建网络组

ping -I team0 192.168.0.254

nmcli dev dis eno1

teamdctl team0 state

nmcli con up team0-port1

nmcli dev dis eno2

teamdctl team0 state

nmcli con up team0-port2

teamdctl team0 state

管理网络组配置文件

/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

/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 show

nmcli connectioni delete team0-eth0

nmcli connectioni delete team0-eth1

nmcli connection show

网桥

桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。

主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D

配置实现网桥

创建软件网桥

永久生效

创建连接名为mybr0的br0网桥

nmcli con add con-name mybr0 type bridge con-name br0 ifname br0

给网桥配置IP地址,方便管理

nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual

将端口加入到网桥中

nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0

查看配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0

仅当时生效的

创建网桥

brctl addbr br0

将端口eth0加入网桥br0

brctl addif br0 eth0

打开stp

brctl stp br0 on

打开网桥

ifconfig br0 up


工具包 yum install bridge-utils
查看网桥 brctl show
查看CAM表 brctl showmacs br0
添加和删除网桥 brctl addbr | delbr br0
添加和删除网桥中网卡 brctl addif | delif br0 eth0

注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口

测试网络工具

在命令行下测试网络的连通性
显示主机名
hostname
测试网络连通性
ping
显示正确的路由表
ip route

跟踪路由
traceroute
tracepath
mtr

确定名称服务器使用
nslookup
host

RHEL8/Centos8.x下的网络管理

网络管理(nmcli)

1、NetworkManager管理

在rhel8(含centos8)上,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,没有传统的network.service。因此只能通过其它方法进行网络配置,包括NM命令工具集。换言之,在rhel8上,必须开启NM,否则无法使用网络。

查看NM纳管状态

nmcli n

$ nmcli n
enabled

开启NM接管

nmcli n on

关闭NM纳管(谨慎执行)

nmcli n off

2、网络管理命令行工具nmcli

在nmcli中有2个命令最为常用:

  1. nmcli connection

    表示连接,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c

    $ nmcli connection 
    NAME    UUID                                  TYPE      DEVICE 
    enp0s3  d2e9c3bf-6440-4d0d-abe7-0431b69341de  ethernet  enp0s3 
    virbr0  fd4e79a8-e0c2-4cbe-b9af-c47c83c3a7fa  bridge    virbr0 
    

    connection有2种状态:

    ▷ 活跃(带颜色字体):表示当前该connection生效

    ▷ 非活跃(正常字体):表示当前该connection不生效

  2. nmcli device

    表示设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d

    在NM里,有2个维度:连接(connection)和设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过nmcli c up切换连接。

    $ nmcli device 
    DEVICE      TYPE      STATE         CONNECTION 
    enp0s3      ethernet  已连接        enp0s3     
    virbr0      bridge    连接(外部)  virbr0     
    lo          loopback  未托管        --         
    virbr0-nic  tun       未托管        -- 
    

    device有4种常见状态:

    ▷ connected:已被NM纳管,并且当前有活跃的connection

    ▷ disconnected:已被NM纳管,但是当前没有活跃的connection

    ▷ unmanaged:未被NM纳管

    ▷ unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set enp0s3 down)

3、nmcli connection配置

nmcli c show命令

输出中:

▪ 第一列是connection名字,简称con-name(注意con-name不是网卡名)

▪ 第二列是connection的UUID

▪ 最后一列才是网卡名(标准说法叫device名),可通过nmcil d查看device


对connection做操作时需要指定标识,标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-enp0s3

nmcli c show enp0s3

nmcli c show d2e9c3bf-6440-4d0d-abe7-0431b69341de

nmcli c show /etc/sysconfig/network-scripts/ifcfg-enp0s3

以上三种方式是同一个效果


下面命令是常见的一些操作:

  • 启用connection(相当于ifup)

    nmcli c up enp0s3

  • 停止connection(相当于ifdown)

    nmcli c down enp0s3

  • 删除connection(类似于ifdown并删除ifcfg)

    nmcli c delete enp0s3

  • 查看connection列表

    nmcli c show

  • 查看connection详细信息

    nmcli c show enp0s3

  • 重载配置文件(不会马上生效)

    nmcli c reload

  • 立即生效connection,有3种方法:

    nmcli c up ens32

    nmcli d reapply enp0s3 #专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错。

    nmcli d connect enp0s3 #刷新该网卡对应的活跃connection

通过命令行来修改connection的配置

# 查看所有连接
$ nmcli c
NAME    UUID                                  TYPE      DEVICE 
enp0s3  d2e9c3bf-6440-4d0d-abe7-0431b69341de  ethernet  enp0s3 


# 修改某个连接的配置  后面接的是连接名,并不是设备名
$ nmcli c edit enp0s3 


# 进入编辑界面
===| nmcli 交互式连接编辑器 |===

正在编辑已有的连接 "802-3-ethernet":"enp0s3"

输入 "help" 或 "?" 查看可用的命令。
输入 "print" 来显示所有的连接属性。
输入 "describe [<设置>.<属性>]" 来获得详细的属性描述。

您可编辑下列设置:connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, hostname, tc, proxy



# 输入print可以打印当前界面的所有配置
nmcli> print
===============================================================================
                            连接配置集详情 (enp0s3)
===============================================================================
connection.id:                          enp0s3
connection.uuid:                        d2e9c3bf-6440-4d0d-abe7-0431b69341de
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp0s3
connection.autoconnect:                 是
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0(default)
........
proxy.browser-only:                     否
proxy.pac-url:                          --
proxy.pac-script:                       --
-------------------------------------------------------------------------------


# 问好可以查看当前可使用的命令
nmcli> ?
------------------------------------------------------------------------------
---[ 主菜单 ]---
goto     [<设置> | <属性>]        :: 转到设置或属性
remove   <设置>[.<属性>] | <属性> :: 移除设置或重置属性值
set      [<设置>.<属性> <值>]     :: 设置属性值
describe [<设置>.<属性>]          :: 描述属性
print    [all | <设置>[.<属性>]]  :: 输出连接
verify   [all | fix]              :: 验证连接
save     [persistent|temporary]   :: 保存连接
activate [<接口名>] [/<ap>|<nsp>] :: 激活连接
back                              :: 转到上层(返回)
help/?   [<命令>]                 :: 输出此帮助
nmcli    <配置选项> <值>          :: nmcli configuration
quit                              :: 退出 nmcli
------------------------------------------------------------------------------


# goto可以转单下一级                 
nmcli> goto 
有效设置:connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, hostname, tc, proxy
# 转到ipv4相关设置
设置名称? ipv4
您可以编辑下列属性:method, dns, dns-search, dns-options, dns-priority, addresses, gateway, routes, route-metric, route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, dad-timeout, dhcp-vendor-class-identifier, dhcp-reject-servers


# 转到ipv4的dns设置
nmcli ipv4> goto dns

# 修改
nmcli ipv4.dns> change 
编辑 "dns" 值: 8.8.8.8,114.114.114.114

# 保存配置
nmcli> save 
成功地更新了连接 "enp0s3" (d2e9c3bf-6440-4d0d-abe7-0431b69341de)。

# 激活配置
nmcli> activate 
正在监视连接激活(按任意键继续)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

# 退出
nmcli> quit

通过修改配置文件来修改

vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

然后生效配置

nmcli c reload

如果没有立即生效,需要执行up一下

nmcli c up enp0s3

posted @ 2023-01-04 06:20  厚礼蝎  阅读(62)  评论(0编辑  收藏  举报