[root@centos8 ~]$ cd /etc/sysconfig/network-scripts/
[root@centos8 /etc/sysconfig/network-scripts]$ ls
ifcfg-ens160
[root@centos8 /etc/sysconfig/network-scripts]$ cat ifcfg-ens160
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp" (#DHCP自动获取IP地址 satatic或none为静态地址,手动设置)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens160"(#相当于这一套配置名称)
UUID="cd885b57-68b0-4d13-8482-91b7a69a481a"
DEVICE="ens160" (#物理网卡的实际名称)
ONBOOT="yes"
(#一个物理网卡可以配置多个地址----一个网卡多套配置)
[root@centos8 ~]$ route -n (#查看网关)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.50.2 0.0.0.0 UG 100 0 0 ens160
192.168.50.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@centos8 ~]$ cat /etc/resolv.conf (#查看指定DNS地址解析服务器地址)
# Generated by NetworkManager
search localdomain
nameserver 192.168.50.2
将Linux主机接入到网络,需要配置网络相关设置,一般包括:
- 主机名
- IP/netmask
- 路由:默认网关
- DNS服务器
一、主机名(改文件/命令)
主机名是本地标识区分,不具备网络通讯功能(经DNS解析后可以)
CentOS6
①修改文件:/etc/sysconfig/network
②当下设置或查看主机命令:hostname
CentOS7~Ubuntu
①修改文件:/etc/hostname
(或者用命令可对该文件作出修改hostnamectl set-hostname ~
)
② 显示主机名信息 :hostname
或hostnamectl status
#centos6之前版本
[root@6 ~]$ sed -ri.bak '/^HOSTNAME=/s@(.*=)(.*)@\1centOS6@g' /etc/sysconfig/network
[root@6 ~]$ cat !$
cat /etc/sysconfig/network
HOSTNAME=centOS6
NETWORKING=yes
[root@6 ~]$ hostname centOS6
cantOS7以上版本
[root@centos7 ~]$ hostnamectl set-hostname cent7
[root@centos7 ~]$ hostname
cent7
[root@centos7 ~]$ cat /etc/hostname
cent7
二、网卡名称(改文件/生成配置文件/重启生效)
服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。为解决这类问题,dell开发了biosdevname方案。 systemd v197版本中将dell的方案作了进一步的一般化拓展。目前的Centos既支持dell的biosdevname,也支持systemd的方案。
CentOS 6
接口命名方式:以太网:eth[0,1,2,…]; ppp:ppp[0,1,2,…]
网卡识别并命名相关配置文件:/etc/udev/rules.d/70-persistent-net.rules
[root@cent6 ~]$ vi /etc/udev/rules.d/70-persistent-net.rules (#修改NAME)
[root@cent6 ~]$ reboot (#重启生效)
[root@cent6 ~]$ ethtool -i eth0 (#查看网卡驱动名称等信息)
[root@cent6 ~]$ dmesg |grep -i eth (#从开机信息中通过过滤查看网卡信息)
[root@cent6 ~]$ modprobe -r e1000 (#卸载网卡驱动,或者rm mod e1000)
[root@cent6 ~]$ modprobe e1000 (#安装网卡驱动)
[root@cent6 ~]$ ip link set eth0 down (#禁用指定接口)
[root@cent6 ~]$ ip link set eth0 name zyy (#临时修改网卡名称)
[root@cent6 ~]$ ip link set zyy (#启用指定接口)
CentOS 7~
CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化,CentOS 7以上版使用基于硬件,设备拓扑和设置类型命名。
CentOS 8 中已弃用network.service,采用NetworkManager(NM)为网卡启用命令。CentOS 8 仍可以安装network.service作为网卡服务,只是默认没有安装,具体方法为:dnf install networkscripts
,不过官方已明确在下一个大版本中,将彻底放弃network.service,不建议继续使用network.service管理网络。
systemd对网络设备的命名方式:
1. 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,如:eno1
2. 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如:ens1
3. 如果硬件接口的物理位置信息可用,则根据此信息命名,如:enp2s0
4. 如果用户显式启动,也可根据MAC地址进行命名,如:enx2387a1dc56
5. 上述均不可用时,则使用传统传统的kernel命名方法,例如: eth0,这种命名方法的结果不可预知的,即可能第二块网卡对应eth0,第一块网卡对应eth1。
基于BIOS支持启用biosdevname软件:内置网卡(em1,em2 ) ;pci卡(pYpX );Y(slot);,X(port )——使网卡名相对稳定
网卡组成格式: en: Ethernet 有线局域网
wl: wlan 无线局域网
ww: wwan无线广域网
o
s
x
p
★推荐使用传统命名方式,统一环境实现自动化
(1) 编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="net.ifnames=0" (#Dell服务器时需要添加biosdevname=0)
[root@cent8 ~]$ vim /etc/default/grub
GRUB_TIMEOUT=5(#设置进入默认启动项的等候时间,可改为-1,无限等待)
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"(#获得发行版名称)
GRUB_DEFAULT=saved(#设置默认启动项,按menuentry顺序。比如要默认从第四个菜单项启动,数字改为3,若改为 saved,则默认为上次启动项)
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"(#设置是否使用图形介面)
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=a4340623-d248-48e5-a86c-1b0b1c24bc79 rhgb quiet net.ifnames=0"(#这里可以手动添加内核启动参数)
GRUB_DISABLE_RECOVERY="true"(#设定是否创建修复模式菜单项)
GRUB_ENABLE_BLSCFG=true
(2) 为grub2生成其配置文件(grub.cfg文件是GRUB配置文件。由grub2-mkconfig程序根据用户的配置使用一组主配置文件以及 grub默认文件而生成。)
grub2-mkconfig -o /etc/grub2.cfg
(3) 重启系统
reboot
Ubuntu
网卡名称
(1)修改配置文件/etc/default/grub
vim编辑:GRUB_CMDLINE_LINUX="net.ifnames=0"
或sed修改:sed -i.bak '/^GRUB_CMDLINE_LINUX=/s#"$#net.ifnames=0"#' /etc/default/grub
(2)生效新的grub.cfg文件
grub-mkconfig -o /boot/grub/grub.cfg
或者update-grub (grep net.ifnames /boot/grub/grub.cfg)
(3)重启生效
三、网络配置文件和nmcli ★
图形工具 nm-connection-editor
字符配置 tui工具:nmtui nmtui-connect nmtui-edit nmtui-hostname
命令行工具:nmcli
( 以上工具都依赖NetworkManager服务,此服务是管理和监控网络设置的守护进程 )
网卡相关的配置文件
(1)修改文件: /etc/sysconfig/network-scripts/ifcfg-IFACE
(2)执行生效:nmcli con reload
nmcli con up con-name
nmcli命令:**nmcli connection modify** IFACE [+|-]setting.property value
(setting.property: ipv4.addresses ipv4.gateway ipv4.dns1 ipv4.method manual | auto)
NAME | 本套配置名称 | connection.id eth0 | |
---|---|---|---|
DEVICE | 物理网卡实际名称(指定网卡) | connection.interface-name eth0 | |
TYPE | 接口类型;常见有的Ethernet, Bridge | ||
BOOTPROTO | 激活此设备时使用的地址配置协议, 常用的dhcp(动态分配,适用于windows客户端)/static(静态分配),none, bootp |
ipv4.method auto (dhcp) ipv4.method manual (none) |
|
IPADDR | 指明IP地址 | ipv4.addresses 192.168.2.1/24 | |
NETMASK / PREFIX | 子网掩码,如:255.255.255.0 / 网络ID的位数, 如:24 | ||
GATEWAY | 默认网关 | ipv4.gateway 172.16.0.200 | |
DNS1,2,3 | 甚至DNS服务器地址 ,可以设置多个(一般3个以内) | ipv4.dns 8.8.8.8 | |
ONBOOT | 在系统引导时是否激活此设备 ,默认为yes | connection.autoconnect yes | |
HWADDR | 对应的设备的MAC地址 | 802-3-ethernet.mac-address . . . | |
UUID | 设备的惟一标识 | ||
DOMAIN | 主机不完整时,自动搜索的域名后缀 | ipv4.dns-search example.com | |
USERCTL | 普通用户是否可控制此设备 | ||
NM_CONTROLLED | NM是NetworkManager的简写,此网卡是否接受NM控制 | ||
PEERDNS | 如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf | ipv4.ignore-auto-dns true |
#查看帮助 nmcli con add hel
#使用配置网络 nmcli con show
#显示所有活动连接 nmcli con show --active
#显示网络连接配置 nmcli con show "System eth0“
#显示设备状态 nmcli dev status
#显示网络接口属性 nmcli dev show eth0
#删除连接 nmcli con del default
#创建新连接default,IP自动通过dhcp获取 nmcli con add con-name default type Ethernet ifname eth0
#创建新连接static,指定静态IP不自动连接 nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254
#启用static连接配置 nmcli con up static
#启用default连接配置 nmcli con up default
#修改连接设置
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
路由相关的配置文件
/etc/sysconfig/network-scripts/route-IFACE
永久配置路由
两种风格:(1)TARGET via GW
10.0.0.0/8 via 172.16.0.1
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
本地主机名数据库和IP地址的映射
可以用getent hosts 查看:/etc/hosts
—- the static table lookup for host name(主机名查询静态表),负责ip地址与域名快速解析的文件
hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。在没有域名解析服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用dns服务程序来解决。
hosts文件格式:ip地址 主机名/域名(主机别名)
修改 /etc/hosts和DNS的优先级: /etc/nsswitch.conf
DNS域名解析
DNS客户机配置文件:/etc/resolv.conf
用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序
[root@cent8 ~]$ cat /etc/resolv.conf
generated by /usr/sbin/dhclient-script
search localdomain
nameserver 192.168.50.2
nameserver //定义DNS服务器的IP地址
domain //定义本地域名
search //定义域名的搜索列表
sortlist //对返回的域名进行排序
网络配置命令★
ifconfig
ifconfig [网络设备] [参数]
临时修改
[root@cent6 ~]$ rpm -qi net-tools (此包已经逐渐淘汰用iproute包来代替了)
#显示网络设备信息
[root@cent6 ~]$ ifconfig 只显示已经启用得网卡
[root@cent6 ~]$ ifconfig -a #显示全部网卡信息
#启动关闭指定网卡(网络层禁用)
[root@cent6 ~]$ ifconfig eth0 down
[root@cent6 ~]$ ifconfig eth0 up
#网卡别名,对一个网卡设置多个ip地址(免去到不同地点需要更改IP的烦恼)
[root@cent6 ~]$ ifconfig eth0:1 192.168.0.066/24(也叫子接口,虚拟别名)
[root@cent6 ~]$ ifconfig eth0:1 down(禁用集删除虚拟别名)
#为每个设备别名生成独立的接口配置文件,格式为:ifcfg-ethX:xxx(永久修改)
[root@centos8 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
建议 CentOS6关闭 NetworkManager 服务
网卡别名必须使用静态地址
[root@cent6 ~]$ ifconfig -s eth0 (统计网卡信息,可以观察包流量)
route
路由表主要构成:
- Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低
- Genmask:目标网络对应的netmask
- Iface: 到达对应网络,应该从当前主机哪个网卡发送出来
- Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果是直连网络,gateway是0.0.0.0
- Metric: 开销cost,值越小,路由记录的优先级最高(到达指定网络所需的中转数)
添加:route addroute add [-net|-host|default] **target** [**netmask** Nm] [**gw** GW] [[**dev**] If]
删除:route delroute del [-net|-host] **target** [**netmask** Nm] [**gw** GW] [[**dev**] If]
[root@cent6 ~]$ route -n (#查看路由表)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[root@cent6 ~]$ route add -host 172.16.0.0/16 dev eth0
[root@cent6 ~]$ route del -host 192.168.0.132 dev eth0
[root@cent7 ~]$ ifconfig eth0:1 192.168.1.7/24(#同一网卡可以配置多个ip地址)
[root@cent8 ~]$ ifconfig eth0:1 192.168.1.8/24
[root@cent8 ~]$ route -n(#只要配置ip地址就会自动生成同网段的直连路由)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@cent8 ~]$ route del -net 192.168.1.0/24 dev eth0 #删掉路由,路由表地址一旦被破环就无法通讯
[root@cent8 ~]$ ping 192.168.1.7
connect: Network is unreachable
[root@cent7 ~]$ ifconfig eth0:1 10.0.0.7/24
[root@cent8 ~]$ route add -net 10.0.0.0/24 dev eth0 #添加路由
[root@cent8 ~]$ ping 10.0.0.7
netstat
- 显示网络连接 ( 来自于net-tools包,建议使用 ss 代替 )
-t: tcp协议相关 -a: 所有状态
-u: udp协议相关 -n: 以数字显示IP和端口
-w: raw socket相关 -e:扩展格式
-l: 处于监听状态 -p: 显示相关进程及PID
- 常见组合:
-tan, -uan, -tnl, -unl
- 显示路由表:
-r: 显示内核路由表 -n: 数字格式
- 显示接口统计数据 :
netstat -Ieth0
(相当于 ifconfig -s eth0 )ip
来自于iproute (ip, ss)包,可用于代替ifconfig
OBJECT = { link | addr | route }
ip link - 数据链路层配置**ip link** set 【dev IFACE】up and down
激活或禁用指定接口,相当于 ifup/ifdown)**ip link** show 【dev IFACE】up
仅显示处于激活状态的接口
ip addr -网络层配置**ip addr** { add | del } 【IFADDR dev】 【STRING [label LABEL]】 【scope {global | link | host}】【 broadcast ADDRESS】
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域,global: 全局可用.link: 仅链接可用,host: 本机可用
[broadcast ADDRESS]:指明广播地址**ip address** show
**ip addr** flush
```bash禁用网卡 ip link set eth1 down
网卡改名 ip link set eth1 name zyy
启用网卡 ip link set zyy up
网卡别名 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
ip route-管理路由<br />添加路由 `**ip route add** TARGET via GW dev IFACE src SOURCE_IP`<br /> TARGET: 主机路由:IP<br /> 网络路由:NETWORK/MASK<br />添加网关:`**ip route add** default via GW dev IFACE`<br />删除路由:`**ip route del** TARGET `<br />显示路由:`**ip route** show|list`<br />清空路由表:`**ip route flush** [dev IFACE] [via PREFIX]`
```bash
ip route add 192.168.0.0/24 via 172.16.0.1
ip route add 192.168.1.100 via 172.16.0.1
ip route add default via 172.16.0.1
ip route flush dev eth0
ss
来自于iproute包,代替netstat。netstat通过遍历/proc来获取socket信息,ss 使用netlink与内核tcp_diag模块通信获取socket信息ss [OPTION]... [FILTER]
OPTION
-t: tcp协议相关 -a: 所有 -l: listen状态的连接
-u: udp协议相关 -n: 数字格式 -m:内存用量
-w: 裸套接字相关 -p: 相关的程序及PID -o:计时器信息
-x:unix sock相关 -e: 扩展的信息
FILTER
【state TCP-STATE 】: LISTEN、ESTABLISHED、 FIN_WAIT_1、FIN_WAIT_2、SYN_SENT、SYN_RECV、CLOSED
【EXPRESSION 】:dport = sport =
常见组合:-tan, -tanl, -tanlp, -uan
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -s 列出当前socket详细信息
ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的ssh连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
路由表管理
实现静态路由
四台主机:
A主机:eth0 NAT模式
R1主机:eth0 NAT模式,eth1 仅主机模式
R2主机:eth0 桥接模式,eth1 仅主机模式
B主机:eth0 桥接模式
开启路由的转发功能: echo 1 > /proc/sys/net/ipv4/ip_forward
关闭防火墙:iptables -F
配置动态路由
通过守护进程获取动态路由,安装quagga包,通过命令vtysh配置
支持多种路由协议:
- RIP:Routing Information Protocol,路由信息协议(路由数量越少优先级越高)
- OSPF:Open Shortest Path First,开放式最短路径优先(通过计算宽带选择)—公司内部多用
- BGP:Border Gateway Protocol,边界网关协议
-
bonding多网卡
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。
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)
[root@cent8 /etc/sysconfig/network-scripts]$ vim ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.50.80
PREFIX=24
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
(#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一
条线路不通就转入另一条线路)
[root@cent8 /etc/sysconfig/network-scripts]$ vim ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
[root@cent8 /etc/sysconfig/network-scripts]$ vim ifcfg-eth1
DEVICE=eth1
NAME=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
[root@cent8 /etc/sysconfig/network-scripts]$ nmcli con reload
[root@cent8 /etc/sysconfig/network-scripts]$ nmcli con up bond0
[root@cent8 /etc/sysconfig/network-scripts]$ nmcli con up eth0
[root@cent8 /etc/sysconfig/network-scripts]$ nmcli con up eth1
[root@cent8 /etc/sysconfig/network-scripts]$ cat /proc/net/bonding/bond0 #看bond0状态
[root@cent8 ~]$ route add default gw 192.168.50.2 (#配置默认网关联网)
[root@cent8 ~]$ ping 8.8.8.8
删除bond0
ifconfig bond0 down
rmmod bonding
用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
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 连接名,连接名若不指定,默认为team-slave-IFACE
INAME 网络接口名
TEAM 网络组接口名
断开和启动: **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 #配置team0网卡
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0 #配置eth1网卡
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0 #配置eth2网卡
nmcli con up myteam0
nmcli con up team0-eth1
nmcli con up team0-eth2
teamdctl team0 state #查看team0的网卡信息
nmcli dev dis eth1
teamdctl team0 state
nmcli con up team0-port1
nmcli dev dis eth2
teamdctl team0 state
nmcli con up team0-port2
管理网络组配置文件
/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
bridge网桥
桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、Dbrctl show
#查看网桥brctl showmacs br0
#查看CAM(content addressable memory内容可寻址存储器)表 brctl **addbr**|**delbr** br0
#添加和删除网桥brctl **addif**|**delif** br0 eth0
#添加和删除网桥中网卡ifconfig br0 up
#默认br0是down,必须启用brctl stp br0 on
#启用STP
(NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口)
工具包:bridge-utils,目前 CentOS 8 无此包
yum install bridge-utils
下载此rpm包安装时,出现以下错误----因为dns服务器未配置的原因,我的是缺少/etc/resolv.conf文件
“……Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=stock [Could not resolve host: mirrorlist.centos.org]”
#拷贝cen7的resolv.conf到此处即可
[root@cent7 ~]$ scp /etc/resolv.conf root@192.168.50.80:/etc/resolv.conf
nmcli命令创建软件网桥
nmcli con add con-name mybr0 type bridge ifname br0
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 #1创建网桥
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
nmcli con up br0
nmcli con add type bridge-slave con-name br0-port0 ifname eth0 master br0
nmcli con add type bridge-slave con-name br0-port1 ifname eth1 master br0
nmcli con up br0-port0
nmcli con up br0-port1 #2加入物理网卡
cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
STP=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.100
PREFIX=24
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0 #3查看网桥配置文件
TYPE=Ethernet
NAME=br0-port0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
UUID=23f41d3b-b57c-4e26-9b17-d5f02dafd12d
nmcli con reload
nmcli con down br0
rm /etc/sysconfig/network-scripts/ifcfg-br0* #4删除br0
网络测试诊断工具
- 测试网络连通性:ping
- 显示正确的路由表:ip route
- 跟踪路由:traceroute tracepath mtr
- 确定名称服务器使用:nslookup host dig
- 抓包工具:tcpdump wireshark
- 安全扫描工具:nmap netcat:nc (网络界的瑞士军刀)
- 流量控制工具:tc (详解参考https://blog.csdn.net/liuruiqun/article/details/52129273)
tc qdisc add dev eth0 root netem loss 50% tc qdisc add dev eth0 root netem delay 1000ms tc qdisc show dev eth0 tc qdisc del
tcpdump
网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。tcpdump [-adeflnNOpqStvx][**-c**<数据包数目>][-dd][-ddd][**-F**<表达文件>][**-i**<网络界面>][**-r**<数据包文件>][**-s**<数据包大小>][-tt][-**T**<数据包类型>][-vv][**-w**<数据包文件>][输出数据栏位]
-a 尝试将网络和广播地址转换成名称。 -e 在每列倾倒资料上显示连接层级的文件头。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。 -f 用数字显示网际网络地址。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。 -F<表达文件> 指定内含表达方式的文件。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。 -i<网络界面> 使用指定的网络界面送出数据包。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。 -l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。 -s<数据包大小> 设置每个数据包的大小。
-N 不列出域名。 -S 用绝对而非相对数值列出TCP关联数。
-O 不将数据包编码最佳化。 -t 在每列倾倒资料上不显示时间戳记。
-p 不让网络界面进入混杂模式。 -tt 在每列倾倒资料上显示未经格式化的时间戳记。
-q 快速输出,仅列出少数的传输协议信息。 -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-r<数据包文件> 从指定的文件读取数据包数据。 -v 详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。 -vv 更详细显示指令执行过程。
-w<数据包文件> 把数据包数据写入指定的文件 ```bash tcpdump -D #列出网卡 tcpdump #不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。 tcpdump -i en0 #监听特定网卡 tcpdump host 10.0.0.100 #监听特定主机,监听主机10.0.0.100的通信包,注意:出、入的包都会被监听。 tcpdump src host hostname #特定来源的通信 tcpdump dst host hostname #特定目标地址的通信 tcpdump host hostname #如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
tcpdump port 3000 #特定端口 tcpdump tcp #监听TCP/UDP,服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包 tcpdump tcp port 22 and src host 10.0.0.100 #来源主机+端口+TCP,监听来自主机10.0.0.100在端口22上的TCP数据包 tcpdump ip host 10.0.0.101 and 10.0.0.102 #监听特定主机之间的通信 tcpdump ip host 10.0.0.101 and ! 10.0.0.1 #10.0.0.101和除了10.0.0.1之外的主机之间的通信
面试题
[root@centos8 ~]#tcpdump -i eth0 -nn icmp and src host 10.0.0.6 and dst host 10.0.0.7
详细示例
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 (2)-i eth1 : 只抓经过接口eth1的包 (3)-t : 不显示时间戳 (4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0后可以抓到完整的数据包 (5)-c 100 : 只抓取100个数据包,限制抓包的数量,如下,抓到100个包后,自动退出 (6)dst port ! 22 : 不抓取目标端口是22的数据包 (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24 (8)-w ./target.cap : 保存成cap文件方便用wireshark分析(保存到本地,默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘,可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)
<a name="JleK8"></a>
#### nmap
扫描远程主机工具,功能远超越用世人皆知的 Ping 工具发送简单的 ICMP 回声请求报文<br />官方帮助:[https://nmap.org/book/man.html](https://nmap.org/book/man.html)<br />` nmap [Scan Type(s)] [Options] {target specification}`<br />**-sT ** TCP connect() 扫描,这是最基本的 TCP 扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息 <br />**-sS ** TCP同步扫描 (TCP SYN),不必全打开一个 TCP 连接,所以这项技术通常称为半开扫描(half-open)。这项技术最大好处是很少有系统能够把这记入系统日志 <br />**-sF,-sX,-sN ** 秘密FIN数据包扫描、圣诞树 (Xmas Tree)、空 (Null) 扫描模式。理论是关闭的端口需要对你的探测包回应RST包,打开的端口必需忽略有问题的包 <br />**-sP** ping扫描,用ping方式检查网络上哪些主机正在运行。当主机阻塞ICMP echo请求包是时ping扫描是无效的。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描 <br />**-sU ** UDP 的数据包进行扫描,想知道在某台主机上提供哪些 UDP 服务,可以使用此选项 <br />**-sA** ACK 扫描,这项高级的扫描方法通常可以用来穿过防火墙。 <br />**-sW** 滑动窗口扫描,非常类似于 ACK 的扫描 <br />**-sR ** RPC 扫描,和其它不同的端口扫描方法结合使用。 <br />**-b ** FTP 反弹攻击 (bounce attack),连接到防火墙后面的一台 FTP 服务器做代理,接着进行端口扫描。<br />**-P0** 在扫描之前,不 ping 主机。 **-PT** 扫描之前,使用 TCP ping 确定哪些主机正在运行 <br />**-PS** 对于 root 用户,这个选项让 nmap 使用 SYN 包而不是 ACK 包来对目标主机进行扫描。 <br />**-PI ** 设置这个选项,让 nmap 使用真正的 ping(ICMP echo 请求)来扫描目标主机是否正在运行。 <br />**-PB** 这是默认的 ping 扫描选项。它用 ACK(-PT) 和 ICMP(-PI) 两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。<br />**-O ** 这个选项激活对 TCP/IP 指纹特征 (fingerprinting) 的扫描,获得远程主机的标志,也就是操作系统类型<br />**-I** 打开 nmap 的反向标志扫描功能。 <br />**-f ** 使用碎片 IP 数据包发送 SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图 <br />**-v** 冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。 <br />**-S <IP>** 在一些情况下,nmap 可能无法确定你的源地址 。在这种情况使用这个选项给出指定 IP 地址 <br />**-g port** 设置扫描的源端口<br />**-oN** 把扫描结果重定向到一个可读的文件 logfilename 中 <br />**-oS** 扫描结果输出到标准输出。 <br />**--host_timeout** 设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制 <br />**--max_rtt_timeout** 设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约 9000 毫秒 <br />**--min_rtt_timeout** 设置 nmap 对每次探测至少等待你指定的时间,以毫秒为单位 <br />**-M count ** 置进行 TCP connect() 扫描时,最多使用多少个套接字进行并行的扫描
```bash
nmap -n -PA --min-parallelism 2000 172.16.0.0/16 #Tcp ack 扫描,并发2000,速度快
nmap -sL 10.0.0.0/24 #仅列出指定网段上的每台主机,不发送任何报文到目标主机.
nmap -sP 10.0.0.1-10 #可以指定一个IP地址范围
nmap -sP -v 192.168.1.0/24 #批量扫描一个网段的主机存活数
nmap –v –sn ip/24
nmap -P0 192.168.1.100 #有些主机关闭了ping检测,所以可以使用-P0跳过ping的探测,可以加快扫描速度.
nmap –v –A IP #扫描主机
nmap 10.0.0.6 10.0.0.7 #一次性扫描多台目标主机
cat hosts.txt #从一个文件中导入IP地址,并进行扫描
nmap -iL hosts.txt
nmap -PS22,80,443 10.0.0.1 #探测目标主机开放的端口,可指定一个以逗号分隔的端口列表(如-PS22,443,80)
nmap -sS 10.0.0.1 #使用SYN半开放扫描
nmap -sT 10.0.0.1 #扫描开放了TCP端口的设备
nmap -sU 10.0.0.1 #扫描开放了UDP端口的设备
nmap –e eth1 -sU -O 10.0.0.1 #只扫描UDP端口
nmap -sTU -O 10.0.0.1 #扫描TCP和UDP端口
nmap -sV 10.0.0.7 #用于扫描目标主机服务版本号
nmap localhost #查看主机当前开放的端口
nmap -p 1024-65535 localhost #查看主机端口(1024-65535)中开放的端口
nmap -PS 10.0.0.1 #探测目标主机开放的端口
nmap -PS22,80,3306 10.0.0.1 #探测所列出的目标主机端口
nmap -O 10.0.0.1 #探测目标主机操作系统类型
nmap -A 10.0.0.1 #探测目标主机操作系统类型
四、Ubuntu
文件配置
(1)修改文件:/etc/netplan/01-netcfg.yaml
(yml配置文件遇到“:”或者“-”后面必须留一个空格!)
(2)执行生效 : netplan apply
#配置静态ip
[root@ubuntu1804]$ vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.50.18/24 #(或者[192.168.8.10/24,10.0.0.10/8]的列表格式)
gateway4: 192.168.50.2
nameservers:
search: [zhuyuany.com]
addresses: [1.1.1.1]
[root@ubuntu1804 /etc/netplan]$ netplan apply
#查看DNS
[root@ubuntu1804 /etc/netplan]$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug 28 13:07 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
[root@ubuntu1804 /etc/netplan]$ systemd-resolve --status
配置多网卡静态IP和静态路由
[root@ubuntu1804:~#vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.18/16]
gateway4: 10.0.0.2
nameservers:
addresses: [223.6.6.6]
eth1:
dhcp4: no
dhcp6: no
addresses: [10.20.0.18/16]
routes:
- to: 10.30.0.0/16
via: 10.20.0.1
[root@ubuntu1804:~#netplan apply
[root@ubuntu1804:~#route -n
#或者每个网卡各自一个配置文件
[root@ubuntu1804:/etc/netplan# ls
01-netcfg.yaml 02-eth1.yaml
root@ubuntu1804:/etc/netplan# cat 01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
[root@ubuntu1804:/etc/netplan# cat 02-eth1.yaml
network:
version: 2
renderer: networkd
ethernets:
eth1:
addresses:
- 10.20.0.11/16
- 192.168.0.11/24
gateway4: 10.0.0.2
nameservers:
search: [magedu.com, magedu.org]
addresses: [180.76.76.76, 8.8.8.8, 1.1.1.1]
routes:
- to: 10.30.0.0/16
via: 10.20.0.1
单网卡桥接
[root@ubuntu1804 /etc/netplan]$ apt install -y bridge-utils
[root@ubuntu1804 /etc/netplan]$ dpkg -L bridge-utils
#所有网卡都在一个文件里
[root@ubuntu1804 /etc/netplan]$ cat /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
eth1:
dhcp4: no
dhcp6: no
eth2:
dhcp4: no
bridges:
br0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.18/16]
gateway4: 10.0.0.2
nameservers:
addresses: [223.6.6.6]
interfaces:
- eth1
- eth2
#单独一个文件
[root@ubuntu1804 netplan]#cat br0.yaml
network:
version: 2
renderer: networkd
ethernets:
eth1:
dhcp4: no
dhcp6: no
eth2:
dhcp4: no
bridges:
br0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.18/16]
gateway4: 10.0.0.2
nameservers:
addresses: [223.6.6.6]
interfaces:
- eth1
- eth2
root@ubuntu1804:~# netplan apply
root@ubuntu1804:~# brctl show
双⽹卡绑定
支持多网卡绑定七种模式
- mod=0,即:(balance-rr) Round-robin policy(平衡抡循环策略)特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1…一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力。
- mod=1,即: (active-backup) Active-backup policy(主-备份策略)特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有N 个网络接⼝的情况下,资源利用率为1/N。
- mod=2,即:(balance-xor) XOR policy(平衡策略)特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力。
- mod=3,即:broadcast(广播策略)特点:在每个slave接口上传输每个数据包,此模式提供了容错能力。
- mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE802.3ad 动态链接聚合)特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。必要条件:
条件1:ethtool持获取每个slave的速率和双工设定。
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation。
条件3:多数switch(交换机)需要经过特定配置才能支持802.3ad模式。
- mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。该模式的必要条件:ethtool支持获取每个slave的速率
- mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance,rlb),而且不需要任何switch(交换机)的支持。
[root@ubuntu1804:~]# vim /etc/netplan/01-netcfg.yaml ethernets: eth0: dhcp4: no dhcp6: no eth1: dhcp4: no dhcp6: no bonds: bond0: interfaces: - eth0 - eth1 addresses: [10.0.0.18/16] gateway4: 10.0.0.1 nameservers: addresses: [223.6.6.6,223.5.5.5] parameters: mode: active-backup mii-monitor-interval: 100 [root@ubuntu1804:~]# netplan apply [root@ubuntu1804:~]# cat /proc/net/bonding/bond0