引言
CentOS作为企业级Linux发行版的代表,其网络配置的稳定性和安全性至关重要。无论是搭建服务器、部署应用还是进行网络调试,掌握CentOS的网络配置技能都是运维人员和开发者的必备能力。本指南将从基础概念讲起,逐步深入到高级配置,并针对常见连接问题提供解决方案,最后分享一些网络优化技巧。
一、基础网络配置
1.1 网络配置文件位置
在CentOS 7及更高版本中,网络配置主要存储在以下目录:
/etc/sysconfig/network-scripts/
– 传统网络配置文件(CentOS 7)
/etc/NetworkManager/
– NetworkManager管理的配置(CentOS 8+)
/etc/netplan/
– Ubuntu风格的配置(CentOS Stream 9+)
示例:查看网络接口配置
# 查看所有网络接口
ip addr show
# 查看特定接口(如eth0)
ip addr show eth0
# 使用传统命令(如果可用)
ifconfig eth0
1.2 配置静态IP地址
方法一:使用nmcli(推荐)
# 查看所有连接
nmcli connection show
# 配置静态IP(假设接口为ens33)
nmcli connection modify ens33 ipv4.addresses 192.168.1.100/24
nmcli connection modify ens33 ipv4.gateway 192.168.1.1
nmcli connection modify ens33 ipv4.dns “8.8.8.8 8.8.4.4”
nmcli connection modify ens33 ipv4.method manual
nmcli connection up ens33
方法二:编辑配置文件(CentOS 7)
# 编辑配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 配置内容示例
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
方法三:使用nmtui(图形化工具)
# 启动文本用户界面
nmtui
在nmtui界面中,你可以:
选择”Edit a connection”
选择要配置的接口
设置IPv4配置为Manual
输入IP地址、网关和DNS
保存并激活连接
1.3 配置DHCP客户端
# 使用nmcli配置DHCP
nmcli connection modify ens33 ipv4.method auto
nmcli connection up ens33
# 或者编辑配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 设置 BOOTPROTO=dhcp
1.4 验证网络配置
# 检查IP地址
ip addr show
# 检查路由表
ip route show
# 测试网络连通性
ping -c 4 8.8.8.8
# 测试DNS解析
nslookup google.com
dig google.com
# 检查网络接口状态
ethtool ens33
二、高级网络配置
2.1 配置网络接口别名(多IP)
方法一:使用nmcli
# 添加第二个IP地址
nmcli connection modify ens33 +ipv4.addresses 192.168.1.101/24
nmcli connection up ens33
方法二:创建子接口配置文件
# 创建别名配置文件
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:1
# 编辑别名配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33:1
# 配置内容
DEVICE=ens33:1
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
ONBOOT=yes
2.2 配置VLAN
# 安装VLAN支持
yum install -y vlan
# 加载8021q模块
modprobe 8021q
# 创建VLAN接口
nmcli connection add type vlan con-name vlan100 ifname vlan100 dev ens33 id 100
nmcli connection modify vlan100 ipv4.addresses 192.168.100.10/24
nmcli connection modify vlan100 ipv4.method manual
nmcli connection up vlan100
# 验证VLAN接口
ip link show vlan100
2.3 配置网络绑定(Bonding)
# 安装绑定工具
yum install -y bonding
# 创建绑定接口
nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup
nmcli connection modify bond0 ipv4.addresses 192.168.1.200/24
nmcli connection modify bond0 ipv4.method manual
# 添加物理接口到绑定
nmcli connection add type bond-slave con-name bond0-slave1 ifname ens33 master bond0
nmcli connection add type bond-slave con-name bond0-slave2 ifname ens34 master bond0
# 激活绑定
nmcli connection up bond0
nmcli connection up bond0-slave1
nmcli connection up bond0-slave2
# 查看绑定状态
cat /proc/net/bonding/bond0
2.4 配置网络桥接
# 安装桥接工具
yum install -y bridge-utils
# 创建桥接接口
nmcli connection add type bridge con-name br0 ifname br0
nmcli connection modify br0 ipv4.addresses 192.168.1.200/24
nmcli connection modify br0 ipv4.method manual
# 添加物理接口到桥接
nmcli connection add type bridge-slave con-name br0-slave1 ifname ens33 master br0
# 激活桥接
nmcli connection up br0
nmcli connection up br0-slave1
# 查看桥接状态
brctl show
2.5 配置IPv6
# 启用IPv6
nmcli connection modify ens33 ipv6.method auto
# 配置静态IPv6
nmcli connection modify ens33 ipv6.addresses 2001:db8::1/64
nmcli connection modify ens33 ipv6.gateway 2001:db8::ffff
nmcli connection modify ens33 ipv6.dns “2001:4860:4860::8888 2001:4860:4860::8844”
nmcli connection modify ens33 ipv6.method manual
nmcli connection up ens33
# 验证IPv6配置
ip -6 addr show
ping6 2001:4860:4860::8888
三、常见连接问题与解决方案
3.1 无法获取IP地址(DHCP问题)
症状
:接口显示
state UP
但没有IP地址
解决方案
:
# 1. 检查DHCP服务状态
systemctl status NetworkManager
# 2. 释放并重新获取IP
dhclient -r ens33
dhclient ens33
# 3. 检查DHCP服务器
# 在客户端使用tcpdump抓包
tcpdump -i ens33 port 67 or port 68 -n
# 4. 检查防火墙
firewall-cmd –list-all
firewall-cmd –add-service=dhcp –permanent
firewall-cmd –reload
3.2 无法连接外网
症状
:可以ping通内网网关,但无法ping通外网IP
解决方案
:
# 1. 检查路由表
ip route show
# 2. 检查默认网关
ip route show default
# 3. 检查DNS解析
nslookup google.com
# 如果无法解析,检查/etc/resolv.conf
cat /etc/resolv.conf
# 4. 检查防火墙规则
iptables -L -n -v
# 或者使用firewalld
firewall-cmd –list-all
# 5. 检查NAT配置(如果是虚拟机)
# 在宿主机检查NAT设置
3.3 网络连接时断时续
症状
:网络连接不稳定,时好时坏
解决方案
:
# 1. 检查网络接口状态
ethtool ens33
# 2. 检查双工模式
ethtool -s ens33 speed 1000 duplex full
# 3. 检查MTU设置
ip link show ens33
# 如果MTU不匹配,调整MTU
ip link set ens33 mtu 1500
# 4. 检查ARP表
ip neigh show
# 5. 检查网络设备(交换机/路由器)配置
# 确保端口配置正确
3.4 DNS解析失败
症状
:可以ping通IP地址,但无法解析域名
解决方案
:
# 1. 检查/etc/resolv.conf
cat /etc/resolv.conf
# 2. 检查NetworkManager配置
nmcli connection show ens33 | grep dns
# 3. 检查DNS服务器可达性
ping 8.8.8.8
dig @8.8.8.8 google.com
# 4. 检查/etc/nsswitch.conf
cat /etc/nsswitch.conf | grep hosts
# 5. 检查防火墙DNS端口 # 2. 检查防火墙规则 # 3. 添加端口到防火墙 # 4. 检查SELinux # 2. 检查虚拟机网络模式 # 3. 检查虚拟机网络服务 # 4. 检查虚拟机网络驱动 # 优化TCP缓冲区大小 # 启用TCP快速打开 # 应用配置 # 启用TCP卸载功能 # 调整中断平衡 # 启用多队列(如果支持) # 配置基本规则 # 配置端口转发 # 查看网络相关策略 # 添加端口到SELinux策略 # 查看网络服务的SELinux上下文 # 查看网络接口统计 # 查看连接状态 # 查看网络连接数 # 服务器端 # 客户端 # 测试延迟 # 测试路径MTU – name: Restart network INTERFACE=”ens33″ # 配置静态IP # 验证配置 # 捕获特定端口的流量 # 捕获HTTP流量 # 分析捕获的文件 # 运行Wireshark(需要图形界面) # 或者使用tshark(命令行版本) # 使用TCP traceroute(绕过防火墙) # 使用UDP traceroute # 使用ICMP traceroute # 查看内核网络日志 # 查看系统日志
firewall-cmd –list-ports
firewall-cmd –add-port=53/udp –permanent
firewall-cmd –reload
3.5 端口被阻止
症状
:服务无法访问,提示连接被拒绝
解决方案
:
# 1. 检查服务是否监听
netstat -tuln | grep
firewall-cmd –list-all
firewall-cmd –add-port=80/tcp –permanent
firewall-cmd –add-port=443/tcp –permanent
firewall-cmd –reload
sestatus
# 如果SELinux阻止,查看日志
ausearch -m avc -ts recent
# 临时禁用SELinux(仅测试)
setenforce 0
# 永久禁用(不推荐)
vi /etc/selinux/config
# 设置 SELINUX=disabled
3.6 虚拟机网络问题
症状
:虚拟机无法连接网络或网络配置不生效
解决方案
:
# 1. 检查虚拟机网络适配器设置
# VMware: 编辑虚拟机设置 -> 网络适配器
# VirtualBox: 设置 -> 网络
# NAT模式:检查宿主机NAT设置
# 桥接模式:检查宿主机网络配置
systemctl status NetworkManager
systemctl restart NetworkManager
# VMware: 检查vmtools是否安装
# VirtualBox: 检查Guest Additions是否安装
四、网络优化技巧
4.1 性能优化
4.1.1 调整TCP参数
# 查看当前TCP参数
sysctl -a | grep net.ipv4.tcp
echo ‘net.core.rmem_max = 16777216’ >> /etc/sysctl.conf
echo ‘net.core.wmem_max = 16777216’ >> /etc/sysctl.conf
echo ‘net.ipv4.tcp_rmem = 4096 87380 16777216’ >> /etc/sysctl.conf
echo ‘net.ipv4.tcp_wmem = 4096 65536 16777216’ >> /etc/sysctl.conf
echo ‘net.ipv4.tcp_fastopen = 3’ >> /etc/sysctl.conf
sysctl -p
4.1.2 调整网络接口参数
# 查看当前参数
ethtool -k ens33
ethtool -K ens33 tso on gso on gro on lro on
echo ‘IRQBALANCE_ARGS=”–powerthresh=1 –banirq=24,25″‘ >> /etc/sysconfig/irqbalance
ethtool -L ens33 combined 8
4.2 安全优化
4.2.1 配置防火墙规则
# 安装firewalld
yum install -y firewalld
systemctl enable firewalld
systemctl start firewalld
firewall-cmd –set-default-zone=public
firewall-cmd –add-service=ssh –permanent
firewall-cmd –add-service=http –permanent
firewall-cmd –add-service=https –permanent
firewall-cmd –reload
firewall-cmd –add-forward-port=port=80:proto=tcp:toport=8080 –permanent
firewall-cmd –reload
4.2.2 配置SELinux网络策略
# 查看SELinux状态
sestatus
semanage port -l | grep http
semanage port -l | grep ssh
semanage port -a -t http_port_t -p tcp 8080
ls -Z /etc/httpd/conf/httpd.conf
4.3 监控与诊断
4.3.1 网络流量监控
# 实时监控网络流量
iftop
nload
ss -tunap
netstat -an | grep ESTABLISHED | wc -l
4.3.2 网络性能测试
# 测试网络带宽
# 安装iperf3
yum install -y iperf3
iperf3 -s
iperf3 -c
ping -c 10
ping -M do -s 1472
4.4 自动化配置
4.4.1 使用Ansible配置网络
# network-config.yml
—
– hosts: all
become: yes
tasks:
– name: Configure static IP
nmcli:
conn_name: “{{ ansible_default_ipv4.interface }}”
type: ethernet
ip4: “{{ network_ip }}/{{ network_mask }}”
gw4: “{{ network_gateway }}”
dns4: “{{ network_dns }}”
state: present
autoconnect: yes
service:
name: NetworkManager
state: restarted
4.4.2 使用脚本批量配置
#!/bin/bash
# network-config.sh
IP=”192.168.1.100″
NETMASK=”255.255.255.0″
GATEWAY=”192.168.1.1″
DNS=”8.8.8.8″
nmcli connection modify $INTERFACE ipv4.addresses $IP/$NETMASK
nmcli connection modify $INTERFACE ipv4.gateway $GATEWAY
nmcli connection modify $INTERFACE ipv4.dns $DNS
nmcli connection modify $INTERFACE ipv4.method manual
nmcli connection up $INTERFACE
echo “IP地址: $(ip addr show $INTERFACE | grep ‘inet ‘ | awk ‘{print $2}’)”
echo “网关: $(ip route | grep default | awk ‘{print $3}’)”
echo “DNS: $(cat /etc/resolv.conf | grep nameserver | awk ‘{print $2}’)”
五、高级故障排除技巧
5.1 使用tcpdump进行网络分析
# 捕获所有网络流量
tcpdump -i any -w capture.pcap
tcpdump -i ens33 port 80 -n
tcpdump -i ens33 ‘tcp port 80 and (((ip[2:2] – ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)’ -n
tcpdump -r capture.pcap -n
5.2 使用Wireshark进行图形化分析
# 安装Wireshark
yum install -y wireshark
wireshark
tshark -i ens33 -f “tcp port 80” -w http.pcap
5.3 使用traceroute分析路径
# 基本traceroute
traceroute 8.8.8.8
traceroute -T 8.8.8.8
traceroute -U 8.8.8.8
traceroute -I 8.8.8.8
5.4 检查系统日志
# 查看网络相关日志
journalctl -u NetworkManager
journalctl -u network
dmesg | grep -i network
dmesg | grep -i eth
tail -f /var/log/messages
六、最佳实践
6.1 配置管理
使用版本控制
:将网络配置文件纳入Git管理
文档化
:记录所有网络配置变更
备份配置
:定期备份网络配置文件
6.2 安全考虑
最小权限原则
:只开放必要的端口
定期更新
:保持系统和网络工具更新
监控日志
:定期检查网络相关日志
6.3 性能考虑
根据负载调整参数
:根据实际网络负载调整TCP参数
监控性能
:定期进行网络性能测试
优化硬件
:确保网络硬件配置合理
七、总结
CentOS网络配置是一个涉及多个层面的复杂任务。从基础的IP地址配置到高级的网络绑定和桥接,再到故障排除和性能优化,每个环节都需要细致的操作和深入的理解。
通过本指南,你应该能够:
掌握基础配置
:配置静态IP、DHCP、VLAN等
解决常见问题
:处理DHCP、DNS、防火墙等问题
实施高级配置
:配置网络绑定、桥接、IPv6等
优化网络性能
:调整TCP参数、监控网络流量
进行故障排除
:使用tcpdump、Wireshark等工具
记住,网络配置的最佳实践是
测试、监控、优化
的循环过程。在生产环境中,任何网络变更都应该先在测试环境中验证,然后逐步实施,并持续监控其影响。
最后,保持学习的态度,网络技术不断发展,新的工具和方法不断涌现。定期关注CentOS官方文档和社区讨论,保持技能的更新,才能更好地应对各种网络挑战。