Linux系统网络管理
一、网络参数配置
1、图形化配置
NetworkManager,Linux7系统中,一般建议停止该管理方式;Linux8以上操作系统统一将网络管理交给NetworkManager管理。
#开启
[root@localhost ~]# systemctl start NetworkManager
#关闭
[root@localhost ~]# systemctl stop NetworkManager
#关闭并开机不自启
[root@localhost ~]# systemctl disable --now NetworkManager
#开启并开机自启
[root@localhost ~]# systemctl enable --now NetworkManager
2、命令行配置
2.1、ifconfig命令
查看及配置网卡参数(临时配置),不能查看基于配置文件的多IP地址的网络参数,默认不能查看到未启用的网卡列表
root用户可以使用该命令更改网卡参数,普通用户只能用户查看
语法:
ifconfig [接口]
ifconfig 接口 [aftype] options | address ...
选项:
选项 | 作用 |
---|---|
-a | 查看所有网卡的配置信息,包括未启用网卡 |
up | 启用网卡,ifconfig ens33 up,不会重新读取配置文件 |
down | 停用网卡,ifconfig ens33 down |
案例:
临时配置网卡参数
ifconfig enss 192.168.115.136/24
注意:临时配置,重启网络服务、网卡启停、主机重启都将失效
2.2、ifup和ifdown
ifup ens33
#启用网卡,并读取配置文件
ifdown ens33
#停用网卡
子接口配置
基于物理网卡的逻辑接口
可以使系统基于一块网卡配置多个IP地址
ifconfig 网卡名:编号(上限999999999) IP地址/子网掩码的网络位长度 【临时配置】
生成子接口配置文件【永久配置】,不能使用DHCP获得地址
cd /etc/sysconfig/network-scripts
cp ifcfg-ens37 ifcfg-ens37:0
cat ifcfg-ens37:0
TYPE=Ethernet
BOOTPROTO=static
NAME=ens37:0
DEVICE=ens37:0
ONBOOT=yes
IPADDR=192.168.115.214
PREFIX=24
ifdown ens37:0 && ifup ens37:0
2.3、ip a[ddress]命令
查看网络参数,可以查看到未启用的网卡列表,能够查看基于配置文件实现的多IP地址配置后的网络参数
语法:
ip [ OPTIONS ] OBJECT { COMMAND | help }
选项:
选项 | 作用 |
---|---|
address | 查看设备IP地址 |
案例:
ip a
2.2、配置文件配置
/etc/sysconfig/network-scripts/ifcfg-网卡名
永久配置,需要网卡重新读取配置文件
网卡启停操作
#启动服务
systemctl start network
#停止服务
systemctl stop network
#重启服务
systemctl restart network
#使用命令行重新加载配置文件
ifup 网卡名
ifdown 网卡名
#使用命令行启停网卡,但是不加载配置文件
ifconfig 网卡名 up | down
2.2.1、单一IP地址配置
自动获得,必须在当前网络中存在DHCP服务器。
TYPE=Ethernet
#网卡参数的类型,Ethernet:以太网
BOOTPROTO=dhcp
#获得IP地址的方式,dhcp|static|none
NAME=ens33
#网卡描述名称,可有可无
DEVICE=ens33
#网卡设备名称,必须与ifconfig看到的网卡名保持一致。不能书写不存在的网卡名
ONBOOT=yes
#是否启用配置文件,yes|no
手动配置
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.115.150
#IP地址
PREFIX=24
#子网掩码长度
#或者使用
NETMASK=255.255.255.0
GATEWAY=192.168.115.2
#默认网关,在同一系统下,不管几块网卡,建议配置一个默认网关。
DNS1=192.168.115.2
#域名解析服务器地址,不建议在多网卡的情况下书写DNS,因为后启动的网卡会覆盖原有的DNS服务器地址。
2.2.2、多IP地址配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR1=192.168.115.150
PREFIX1=24
GATEWAY=192.168.115.2
DNS1=192.168.115.2
IPADDR2=192.168.115.151
PREFIX2=24
DNS2=192.168.115.3
DNS3=192.168.115.4
加载配置文件
systemctl restart network
#或者
ifdown ens33 && ifup ens33
验证参数
#IP地址
ifconfig | ip a
#网关地址查看
route -n
#DNS地址
cat /etc/resolv.conf
3、路由配置
route命令
route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。
语法:
route [选项] [参数]
选项:
选项 | 描述 |
---|---|
-A | 设置地址类型; |
-C | 打印将Linux核心的路由缓存; |
-v | 详细信息模式; |
-n | 直接显示数字形式的IP地址; |
-e | netstat格式显示路由表; |
-net | 到一个网络的路由表; |
-host | 到一个主机的路由表。 |
参数:
参数 | 描述 |
---|---|
add | 增加指定的路由记录; |
del | 删除指定的路由记录; |
target | 目的网络或目的主机; |
gw | 设置默认网关; |
mss | 设置TCP的最大区块长度(MSS),单位MB; |
window | 指定通过路由表的TCP连接的TCP窗口大小; |
dev | 路由记录所表示的网络接口。 |
route add -net 0/0 gw 192.168.100.254 dev ens34
实验:
1、单一路由直连
#进入R1
[root@localhost ~]# systemctl disable --now NetworkManager
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.115.113
PREFIX=24[root@localhost network-scripts]# ifdown ens33 ; ifup ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.116.113
PREFIX=24[root@localhost network-scripts]# ifdown ens34 ; ifup ens34
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# vim /etc/sysctl.conf
插入:net.ipv4.ip_forward = 1
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
#将ens33设置为VMnet1(仅主机模式)、ens34设置为VMnet2(仅主机模式)#进入虚拟机1
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.115.112
PREFIX=24
GATEWAY=192.168.115.113
DNS1=192.168.115.2[root@localhost network-scripts]# ifdown ens33 ; ifup ens33
#将ens33设置为VMnet1(仅主机模式)
#进入虚拟机2
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.112
PREFIX=24
GATEWAY=192.168.116.113
DNS1=192.168.116.2[root@localhost network-scripts]# ifdown ens33 ; ifup ens33
#将ens33设置为VMnet2(仅主机模式)
2、两个路由连接
#进入R1
[root@localhost ~]# systemctl disable --now NetworkManager
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.115.114
PREFIX=24[root@localhost network-scripts]# ifdown ens33 ; ifup ens33
[root@localhost network-scripts]# vim ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.116.117
PREFIX=24[root@localhost network-scripts]# ifdown ens34 ; ifup ens34
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# vim /etc/sysctl.conf
插入:net.ipv4.ip_forward = 1
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
#将ens33设置为VMnet1(仅主机模式)、ens34设置为VMnet2(仅主机模式)
[root@localhost network-scripts]# route add -net 192.168.117.0/24 gw 192.168.116.114#进入R2
[root@localhost ~]# systemctl disable --now NetworkManager
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.114
PREFIX=24[root@localhost network-scripts]# ifdown ens33 ; ifup ens33
[root@localhost network-scripts]# vim ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.117.114
PREFIX=24[root@localhost network-scripts]# ifdown ens34 ; ifup ens34
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# vim /etc/sysctl.conf
插入:net.ipv4.ip_forward = 1
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
#将ens33设置为VMnet2(仅主机模式)、ens34设置为VMnet3(仅主机模式)
[root@localhost network-scripts]# route add -net 192.168.115.0/24 gw 192.168.116.117#进入虚拟机1
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.115.112
PREFIX=24
GATEWAY=192.168.115.114
DNS1=192.168.115.2#进入虚拟机2
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.113
PREFIX=24
GATEWAY=192.168.117.114
DNS1=192.168.117.2[root@localhost network-scripts]# ifdown ens33 ; ifup ens33
#将ens33设置为VMnet3(仅主机模式)
二、网络连接查看
1、netstat
作用
查看本地服务的网络监听状态
查看客户端连接到本地服务的连接状态
语法
netstat 选项 (-anptu)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 797/rpcbind
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1481/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1224/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1220/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1498/master
tcp 0 0 192.168.115.112:48884 202.202.1.140:80 ESTABLISHED 2462/python
tcp 0 0 192.168.115.112:46794 210.28.130.3:80 TIME_WAIT -
tcp 0 0 192.168.115.112:34178 210.44.151.62:80 TIME_WAIT -
tcp 0 0 192.168.115.112:60438 124.70.125.153:80 TIME_WAIT -
tcp 0 0 192.168.115.112:34186 210.44.151.62:80 TIME_WAIT -
tcp 0 0 192.168.115.112:34688 59.72.66.10:80 TIME_WAIT -
tcp 0 0 192.168.115.112:51620 39.155.141.16:80 TIME_WAIT -
tcp 0 0 192.168.115.112:46796 210.28.130.3:80 TIME_WAIT -
tcp 0 0 192.168.115.112:53846 44.238.81.22:443 ESTABLISHED 2092/geoclue
tcp 1 0 192.168.115.112:49812 35.180.43.213:80 CLOSE_WAIT 2462/python
tcp 0 0 192.168.115.112:46930 211.68.71.121:80 TIME_WAIT -
tcp 0 0 192.168.115.112:34716 59.72.66.10:80 TIME_WAIT -
tcp 0 0 192.168.115.112:49614 120.201.228.227:80 TIME_WAIT -
tcp 0 0 192.168.115.112:56660 202.141.176.110:80 TIME_WAIT -
tcp 0 0 192.168.115.112:49134 117.147.202.12:80 TIME_WAIT -
tcp 0 0 192.168.115.112:56664 202.141.176.110:80 TIME_WAIT -
tcp 0 0 192.168.115.112:51628 39.155.141.16:80 TIME_WAIT -
tcp 0 0 192.168.115.112:53992 101.6.15.130:80 TIME_WAIT -
tcp 0 0 192.168.115.112:54004 101.6.15.130:80 TIME_WAIT -
tcp 0 0 192.168.115.112:49136 117.147.202.12:80 TIME_WAIT -
tcp 0 0 192.168.115.112:48886 202.202.1.140:80 TIME_WAIT -
tcp6 0 0 :::111 :::* LISTEN 797/rpcbind
tcp6 0 0 :::22 :::* LISTEN 1224/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1220/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1498/master
udp 0 0 0.0.0.0:966 0.0.0.0:* 797/rpcbind
udp 0 0 192.168.122.1:53 0.0.0.0:* 1481/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1481/dnsmasq
udp 0 0 0.0.0.0:111 0.0.0.0:* 797/rpcbind
udp 0 0 0.0.0.0:5353 0.0.0.0:* 795/avahi-daemon: r
udp 0 0 0.0.0.0:55584 0.0.0.0:* 795/avahi-daemon: r
udp 0 0 127.0.0.1:323 0.0.0.0:* 852/chronyd
udp6 0 0 :::966 :::* 797/rpcbind
udp6 0 0 :::111 :::* 797/rpcbind
udp6 0 0 ::1:323 :::* 852/chronyd
选项
-n, --numeric
显示数字形式地址而不是去解析主机、端口或用户名。
-a, --all
显示所有的监听或连接状态
-p, --program
显示连接所属进程的PID和名称。
-t,--tcp
显示TCP连接
-u,--udp
显示UDP连接
-l
查看监听
开启Linux服务的路由功能
vim /etc/sysctl.conf
内核参数修改配置文件
添加
net.ipv4.ip_forward = 1
sysctl -p
加载配置
3、bond绑定
将多个物理网卡进行排列组合,形成逻辑网卡,网卡的高可用
3.1、绑定模式
mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地 网卡相连的交换机设备上进行端口聚合来支持绑定技术。
mode1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。
mode6(平衡负载模式):平时两块网卡均工作,且自动备援,无须交换机设备提供辅助支持。
3.2、绑定案例
服务器有两块网卡 ens33和ens36
ens34操作
TYPE=ethernetBOOTPROTO=noneNAME=ens34DEVICE=ens34ONBOOT=yesMASTER=bond0SLAVE=yes
ens37操作
TYPE=ethernetBOOTPROTO=noneNAME=ens37DEVICE=ens37ONBOOT=yesMASTER=bond0SLAVE=yes
bond0操作
TYPE=ethernetBOOTPROTO=noneNAME=bond0DEVICE=bond0ONBOOT=yesIPADDR=192.168.1.1PREFIX=24GATEWAY=192.168.1.254DNS1=192.168.1.254
添加bond配置文件
vim /etc/modprobe.d/bond.confalias bond0 bondingoptions bonding mode=6 miimon=200
关闭网络图形化服务
systemctl stop NetworkManager
重启网络服务
ifup ens34 && ifup ens37 && ifup bond0systemctl restart network #重启会出现启动失败,但是bond绑定是OK的!!!
4、Linux下的抓包工具
tcpdump
语法
tcpdump -i 网卡名
选项
-c
当 收到多少个报文后退出
-i
监听 interface. 如果 不指定 接口, tcpdump 在 系统 的 接口 清单 中,寻找 号码最小, 已经 配置好的 接口 (loopback 除外). 选中的时候会中断连接.
-n
不要把地址转换成 名字 (指的是 主机地址, 端口号等)
-t
禁止 显示 时戳标志.
-v
(稍微多一点) 繁琐的输出. 例如, 显示 IP 数据报 中的 生存周期 和服务类型.
-e
显示 链路层报头
额外参数
dst port portNumber抓取目标端口为portNumber的报文port portNumber抓取端口为portNumber的报文src port portNumber抓取源端口为portNumber的报文
案例
抓取客户端访问本机80号端口的1000个报文
tcpdump -tn dst port 80 -c 1000 -i bond0
5、web压力测试工具
ab -c 100 -n 2000 http://192.168.1.254/
6、路由追踪命令
traceroute 目标地址或域名
附录:
Linux kernel 3.10 常见的内核参数如下:
系统资源管理相关:
- fs.file-max
:表示系统级别的能够打开的文件句柄的数量,直接限制最大并发连接数,是对整个系统的限制,而不是针对单个用户。其默认值在系统启动时会根据内存计算得出,一般建议根据内存大小(KB)的 10%来设置。例如,如果内存是 1GB(1024MB,即 1024 * 1024KB),那么 fs.file-max
的值可以设置为 1024 * 1024 / 10
。
- fs.nr_open
:单进程能够打开的最大文件句柄数。默认值通常是 1048576(1024 * 1024),如果有高并发连接需求,可根据实际情况修改。
- vm.swappiness
:控制页面交换器(swapper)使用系统内存的程度,取值范围是 0 到 100。0 表示完全禁用页面交换器,只有当系统出现内存不足(OOM)时才允许使用;100 表示尽可能多地使用页面交换器。如果系统内存充足,希望减少对磁盘交换空间的使用,提高性能,可以将此值设置得较低,比如 10 或 20。
- vm.overcommit_memory
:控制内存过度分配的策略,取值范围是 0 到 2。0 表示启用内存过度分配检查;1 表示总是允许内存过度分配;2 表示允许过度分配,但在内存不足时进行检查。建议根据应用场景选择,例如对于内存需求较为明确且不希望出现内存申请失败的场景,可以设置为 1。
网络相关:
- net.ipv4.ip_forward
:其值为 0 时表示禁止进行 IP 转发;如果是 1,则表示 IP 转发功能已经打开。如果你的系统需要作为路由器或网关,需要开启此功能。
- net.ipv4.tcp_keepalive_time
:TCP 发送 keepalive 探测消息的间隔时间(秒),用于确认 TCP 连接是否有效,防止两边建立连接但不发送数据的攻击。默认值通常较高,可以根据实际网络情况适当调整。
- net.ipv4.tcp_keepalive_intvl
:TCP 检查间隔时间(keepalive 探测包的发送间隔)。
- net.ipv4.tcp_keepalive_probes
:TCP 检查次数(如果对方不予应答,探测包的发送次数)。
- net.ipv4.tcp_max_syn_backlog
:对于那些还未获得客户端确认的连接请求,需要保存在队列中的最大数目。对于内存较大的系统,默认值可能无法满足高并发需求,可以适当增加此值。
- net.ipv4.neigh.default.gc_stale_time
:ARP 缓存条目超时时间,即 ARP 缓存表中条目的存活时间,超过该时间未使用的条目将被删除,以节省内存和网络资源。
- net.core.netdev_max_backlog
:当每个网络接口接收数据包的速率比内核处理速率快时,允许发送到队列的数据包的最大数。每个 CPU 核都有一个 backlog 队列,当协议栈处理速度满足不了接收包速率时可能会发生丢包,可以根据网络流量和 CPU 处理能力调整此值。
套接字相关:
- net.core.rmem_max
:内核接收套接字缓冲区大小的最大值(以字节为单位),用于设置接收数据的缓冲区大小上限,对于需要处理大量数据接收的应用程序,适当调大此值可以提高性能。
- net.core.wmem_max
:内核发送套接字缓冲区大小的最大值(以字节为单位),设置发送数据的缓冲区大小上限,根据实际的网络应用场景调整此值可以优化数据发送性能。
- net.core.somaxconn
:调节系统同时发起的 TCP 连接数。在高并发情况下,该值过小容易出现连接超时等问题,一般建议根据实际并发量进行调整。
安全相关:
- kernel.panic_on_oom
:内核发生内存不足(OOM)时,控制系统的行为。0 表示系统继续运行;1 表示系统恐慌(panic)。
- net.ipv4.conf.all.rp_filter
:默认为 1,系统会严格校验数据包的反向路径,可能导致丢包。在某些特殊网络环境下,如存在网络地址转换(NAT)等情况,可能需要将其设置为 0 以避免数据包被误过滤。
其他:
- kernel.randomize_va_space
:启用内核空间随机化,可以增加攻击者猜测内存地址的难度,提高系统的安全性。
- kernel.sysrq
:用于控制系统的调试和故障恢复功能,通过特定的键盘组合(如 Alt + SysRq + 特定字符)可以执行一些紧急操作,如内存转储、立即重启等。默认情况下可能是开启的,但在某些生产环境中可能需要根据安全策略进行调整。
这些内核参数可以在 /proc/sys/
目录下对应的文件中进行查看和修改。需要注意的是,修改内核参数可能会对系统的稳定性和性能产生影响,因此在修改之前应该充分了解其含义和作用,并根据实际情况进行调整。
网络通信性能指标:
在网络通信中,除了常见的带宽(Bandwidth)、时延(Latency)、抖动(Jitter)和丢包率(Packet Loss Rate)之外,还有一些其他重要的性能指标,用于更全面地评估网络通信的质量和效率。以下是一些常见的网络通信性能指标:
1. 吞吐量(Throughput)
定义:吞吐量是指在单位时间内网络成功传输的数据量,通常以比特每秒(bps)或字节每秒(B/s)为单位。它反映了网络的实际传输效率。
应用场景:用于评估网络在实际负载下的传输能力,特别是在高负载或拥塞情况下。
2. 往返时间(RTT, Round-Trip Time)
定义:RTT 是指一个数据包从发送端到接收端并返回的时间。通常以毫秒(ms)为单位。
应用场景:通过
ping
命令可以测量 RTT,用于评估网络的延迟性能。
3. 最大传输单元(MTU, Maximum Transmission Unit)
定义:MTU 是网络层协议允许的最大数据包大小,通常以字节为单位。
应用场景:如果数据包大小超过 MTU,数据包会被分片,可能导致传输效率降低。
4. 最大接收长度(MRL, Maximum Receive Length)
定义:MRL 是网络设备或协议能够接收的最大数据包长度限制。
应用场景:用于防止接收端因数据包过大而出现处理错误或性能下降。
5. 路径最大传输单元(PMTU, Path MTU)
定义:PMTU 是从源到目的地路径上允许的最大数据包大小。
应用场景:通过 PMTU 发现机制,可以避免数据包在传输过程中被分片,从而提高传输效率。
6. 网络利用率(Network Utilization)
定义:网络利用率是指网络带宽的实际使用率,通常以百分比表示。
应用场景:用于评估网络资源的使用情况,帮助优化网络配置。
7. 错误率(Error Rate)
定义:错误率是指在传输过程中出现错误的数据包数量与总数据包数量的比率。
应用场景:用于评估网络的可靠性,特别是在噪声或干扰较大的环境中。
8. 重传率(Retransmission Rate)
定义:重传率是指因丢包或错误而重新发送的数据包数量与总发送数据包数量的比率。
应用场景:用于评估网络的稳定性和传输效率,特别是在高延迟或高丢包率的环境中。
9. 带宽利用率(Bandwidth Utilization)
定义:带宽利用率是指实际使用的带宽与可用带宽的比例。
应用场景:用于评估网络的负载情况,帮助优化带宽分配。
这些指标共同构成了网络通信性能的全面评估体系,帮助网络工程师优化网络配置,提升用户体验。