IP地址
IP地址分类
A类:
0 000 0000 - 0 111 1111: 1-127
网络数:126, 127
每个网络中的主机数:2^24-2
默认子网掩码:255.0.0.0
私网地址:10.0.0.0
B类:
10 00 0000 - 10 11 1111:128-191
网络数:2^14
每个网络中的主机数:2^16-2
默认子网掩码:255.255.0.0
私网地址:172.16.0.0-172.31.0.0
C类:
110 0 0000 - 110 1 1111: 192-223
网络数:2^21
每个网络中的主机数:2^8-2
默认子网掩码:255.255.255.0
私网地址:192.168.0.0-192.168.255.0
D类:组播
1110 0000 - 1110 1111: 224-239
E类:保留未使用
240-255
公共IP地址
私有IP地址
特殊地址
- 0.0.0.0
0.0.0.0不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络 - 255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机 - 127.0.0.1~127.255.255.254
本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1”的 数据包 - 224.0.0.0到239.255.255.255
组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF路由器,地址多用于一些特定的程序以及多媒体程序 - 169.254.x.x
如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址
子网掩码的八位
可变长度子网掩码
Subnet地址
优化IP地址分配
跨网络通信
跨网络通信:路由
- 路由分类:
主机路由
网络路由
默认路由 - 优先级:精度越高,优先级越高
抓包工具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
指定抓取某个端口的数据包
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
- up and down:激活或禁用指定接口
-
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 )’
- TCP的常见状态:
常用组合:
-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详细信息
网络配置文件
-
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
- /etc/sysconfig/network-scripts/ifcfg-
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.cfgsed -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个命令最为常用:
-
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不生效
-
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