本篇记录Linux 的网卡配置以及网络服务的相关配置,期望在了解的网卡的配置内容的基础上,对网络问题能进行配置文件的排查。网络问题是非常复杂的,本篇不涉及抓包和网络的其他问题排查。
网络配置文件有很多,常见的有网口配置文件,DNS 配置,网关配置,主机地址解析配置等。
先从简单的开始入手,最简单就是我们最常见但是容易忽略的主机名了,默认都是localhost
/etc/hostname
localhost
[root@localhost ~]#
root 用户 登录的 localhost 主机名的机器,当前工作目录在root 用户家目录
[user@localhost ~]$
普通用户 user 登录的 localhost 主机名的机器,当前工作目录在 user 用户家目录
主机名写入 /etc/hostname 文件中,可以只写一段,也可以用 '.' 分割,一般不会在上面花太多功夫。主要是用来区分服务器的一个名字。如果有更新主机名,记得顺带更新一下/etc/hosts
# 更新主机名,更新HOSTNAME 以及hostname 返回值,但不会修改/etc/hostname
hostname your_hostname
# 更新主机名,更新HOSTNAME 以及hostname 返回值,会修改/etc/hostname 推荐方式
hostnamectl set-hostname your_hostname
man /etc/resolv.conf
nameserver Name server IP address
search Search list for host-name lookup.
The domain directive is an obsolete name for the search directive that handles one search list entry only.
案例:
nameserver 8.8.8.8
/etc/hosts 解析优先级比DNS高
案例: 加上解析后,ping baidu.com 会解析成ping localhost
localhost baidu.com
主机名、网关也可能在这里配置,这里的网关配置优先级比网口配置的低,影响默认路由;这个文件可以为空,但是不能删除。
/etc/sysconfig/network
GATEWAY=10.0.0.1
如下两个文件可以通过IP 限制访问,貌似8版本上面没有了
man 5 hosts_access
/etc/hosts.allow
/etc/hosts.deny
一些 IANA 记录的服务名称和传输协议端口号注册表,可以看看端口一般对应的是什么服务,或者服务的默认端口是什么
/etc/services
网口配置文件很大程度上决定了服务器网络是否正常,值得仔细了解一下;网口配置文件都在/etc/sysconfig/network-scripts 目录下,网口的命名规范可以看看如下博客
/etc/sysconfig/network-scritps 目录下,所有ifcfg-开头的文件都会被识别成网口文件,备份网口文件请注意文件名前缀要修改。另外?# 号注释 。配置文件可以自己建,但是具体到网口的设备名,写错了无法生效的。ip a 可以看到所有的网口。
常见配置解释:
DEVICE=eth0 网卡的名字
HWADDR=00:00:00:00:12:d9 HWADDR HardWare Address 硬件地址 MAC地址
TYPE=Ethernet 网络类型 以太网
UUID=ae779ae6-044d-43d5-a33b-48c89e8de10e UUID 做到系统中独一无二
ONBOOT=yes BOOT ON ? 在开机或重启网卡的时候是否启动网卡
NM_CONTROLLED=yes 是否受network程序管理
BOOTPROTO=none 网卡是如何获取到ip地址 网卡获取ip地址的方式
a. dhcp 自动获取ip地址
b. none 固定的ip地址
c. static 固定的ip地址
IPADDR=10.0.0.100 IPADDR ip地址
NETMASK=255.255.255.0 子网掩码
GATEWAY=10.0.0.2 网关
DEFROUTE=yes 使用默认路由
VLAN=yes trunk 模式的网络,需要启用VLAN
极简配置(如下配置网络服务就能跑起来,但是建议加上MAC和BOOTPROTO):
DEVICE=ens3
ONBOOT=yes
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
有时候需要在网卡上绑定多个IP(不太建议使用),有两种办法:
方式一:
在网口配置文件上加一行,IPADDR=XXX.XXX.XXX.XXX 适合同网段IP
方式二:
复制一份网口文件,命名ifcfg-xxx:0 区分,修改DEVICE 和 相关的网络配置重启网络服务即可
注意:
1、如果要配置其他网段的IP,需要主机交换机端口是否支持,虚拟机得注意是否有支持对应网段
2、配置其他网段,还需要注意路由配置,很容易因为路由错误导致访问不通
如果控制台不方便访问,修改网口配置请注意留定时任务来恢复到可以访问的状态,修改网络配置是很容易断网,导致访问不了服务器的情况。
为了保障服务器的高可用,一般物理机会接入多条网线来减少网络中断的概率。此时需要做网口的汇聚或者主备,目前工作中见到的主要分两类,6版本系统上面在运行的bond 绑定以及7及7以上的team 绑定。都支持多种模式,这里主要用到主备模式。
目前6版本上貌似不支持team的配置,所以还是用的bond 绑定。主要分两类配置,一个是bond 的配置文件,另外就是绑定网口配置的配置文件
在6版本上面配置bond 有很多奇奇怪怪的问题,尽量保证控制台可以访问到再操作吧
1、创建网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=#IP地址
NETMASK=#子网掩码
GATEWAY=#网关IP
ONBOOT=yes
BOOTPROTO=static
#下面的mode=1是表示主备模式,primary=em1中的em1是主网卡名称(根据自己网卡名称变动)
BONDING_OPTS="mode=1 miimon=100 updelay=600000 primary=em1"
2、配置slave 节点
从网卡一: 注意MATSTER 别用bond0的UUID,踩过坑,可能对不上,直接用bond的设备名就行
vi /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=em1
NAME=em1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
从网卡二 就是设备名不一样,其他内容都一样
vi /etc/sysconfig/network-scripts/ifcfg-em2
DEVICE=em2
NAME=em2
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
3、生效和检查
service network restart # 重启网络服务 有的是NetworkManager
ip a # 查看IP 是否在bond0 上
cat /proc/net/bonding/bond0|grep -A3 "Interface" # 查看bond0 状态
team 绑定会更常见,大致流程都是一样的。不过team 有管理命令,维护更便捷
whereis teamdctl
teamdctl: /usr/bin/teamdctl /usr/share/man/man8/teamdctl.8.gz
rpm -qf /usr/bin/teamdctl
teamd-1.31-4.el8.x86_64
# 查看模板文件 (版本不同可能存在不同的位置,如果没有,请检查是否有安装teamd软件)
ls -l /usr/share/doc/teamd*/example_ifcfgs/
1 目录下是 roundrobin 模板
2 目录下是 lacp 模板
3 目录下是 activebackup 模板
roundrobin模式是一种简单的轮询方式,适用于负载均衡,但不够灵活
当某个物理网卡出现故障时,流量不会立即切换到其他网卡
lacp模式支持动态负载均衡,具有更好的性能和可靠性,但需要团队成员都支持LACP协议
成员之间动态地分配流量,并在链路出现故障时立即将流量切换到其他可用链路
active-backup模式在性能和可靠性方面表现出色,适用于高可用性场景,主备模式
活动连接和备份连接之间实时监控,当活动连接出现故障时,备份连接立即接管流量
1、编辑网卡配置文件 (这里记录主备模式)
vi /etc/sysconfig/network-scripts/ifcfg-team0
DEVICE="team0"
DEVICETYPE="Team"
ONBOOT="yes"
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=10.0.0.100
GATEWAY=10.0.0.1
TEAM_CONFIG='{"runner":{"name":"activebackup"},"link_watch":{"name":"ethtool"}}'
2、编辑从网卡配置文件
DEVICE="em1"
DEVICETYPE="TeamPort"
ONBOOT="yes"
TEAM_MASTER="team0"
DEVICE="em2"
DEVICETYPE="TeamPort"
ONBOOT="yes"
TEAM_MASTER="team0"
3、生效和查看状态
systemctl restart NetworkManager # 如果有关闭NetworkManager的会用network
teamdctl team0 state
setup:
runner: activebackup
ports:
em1
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
em2
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
runner:
active port: em1
docker 的网桥模式,kvm 主机的网桥模式,需要将流量转发到虚拟的网桥处理,最后从绑定的实际网口出入。可以用 brctl 或者 ip?命令配置也可以自己编辑配置文件,这里介绍编辑配置文件的方式。
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-br_10_0_8
TYPE=Bridge
NAME=br_10_0_8
DEVICE=br_10_0_8
ONBOOT=yes
BOOTPROTO=static
EOF
然后在口配置文件上面添加BRIDGE=br_10_0_8 ,来将网桥绑定到网口上。也可以通过命令操作
brctl addif <bridge> <device> add interface to bridge
brctl show [ <bridge> ] show a list of bridges
交换机端口一般配置access 模式和trunk模式,一般服务器常见的都是access模式。
access 模式属于一个VLAN,可以简单理解为只能在同一个VLAN中通信(不走路由的情况下);
trunk 模式可以携带多个VLAN ,简单理解就是支持多个VLAN 间通信(不走路由的情况下);
一个VLAN 可以简单理解为一个网段;
如果我们需要在网卡或者聚合链路上面支持多个网段,例如在KVM主机上需要支持多个网段的虚拟机网络通信,或者docker 需要支持多个网段的容器实例网络通信时,我们需要在交换机开启trunk 模式,并修改操作系统上的网口配置;注意,如果从access切换到trunk 网口配置未更新,网络是会断开的。
这里用team 聚合的方式演示,直接用网口也是一样的:
我们需要一个网口,这里用team0 聚合代替单个网口,配置team 的salve节点这里省略
cat > ifcfg-team0 << EOF
DEVICE=team0
DEVICETYPE=Team
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
TEAM_CONFIG='{"runner":{"name":"activebackup"},"link_watch":{"name":"ethtool"}}'
EOF
这个配置的意思是,是启用VLAN模式,设备名写什么不重要,重要的是绑定到team上,后续从这个设备出去的网络包,就会带上VLAN标签。trunk 模式配置主机 IP 也必须如此。
cat > ifcfg-team0.11 << EOF
DEVICE=team0.11
DEVICETYPE=Team
VLAN=yes
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
USERCTL=no
EOF
这个是指将网桥绑定到这个team0.162 网口上,网桥流量给到网口,并启用VLAN模式
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-team0.10
DEVICE=team0.10
VLAN=yes
DEVICETYPE=Team
ONBOOT=yes
BOOTPROTO=none
BRIDGE=br_10_0_8
EOF
早些时候,Centos 系列都是用的 network 服务通过脚本来管理和维护网络的,后来有了NetworkManager 服务,这个能做的事情更多。目前8版本 network 剥离出来,不是必须安装的软件了
# 查看文件属于哪个软件包
rpm -qf /etc/sysconfig/network-scripts/
如果你发现网口配置文件没问题,网络服务怎么重启也不生效,而且你正在控制台而不是远程,那么建议试试如下方式:
ll /sys/class/net/ # 查看当前网络设备
ip a flush dev em1 # 清除 em1 网卡信息 慎重操作,会断网
逐个清除网口配置后,再重启网络,此时一般就能按照配置文件加载网络信息了
这里简单记录一些有点关系,但不多的东西
平时服务器上有连接存储的需要或者对网速要求比较高的情况,比如用SAN存储的得用HBA卡,而用NAS存储的得用万兆网卡。然而,放眼望去,都是光口啊,这哪分得清?
光纤网卡多是1G和10G,HBA卡多是4G和8G的16G,这个够明显了吧。一般在网卡上会有写速率
交换机上面能看到链路是否正常,通信是否正常
链路 UP:(无法在交换机上面单独看到交换机端口或者网卡是否UP,)
通信 UP:
注意:检查链路是否正常,需要开启网卡后再找交换机查看链路情况,ethtool devicename 可以查看网口的链路状态,如果是物理网口,会有详细信息(链路、速率、网口类型)。
后续,整理整理目前工作中有遇到过的网络问题排查,另外写一篇,可能会很长,写了就把链接加到后面。