Linux服务器运维中,网络配置是最基础也是最高频的操作之一。从CentOS 7开始,传统的ifconfig和net-tools工具包已被弃用,iproute2工具包中的ip命令成为网络接口管理的标准工具。同时NetworkManager提供的nmcli命令行工具在大多数发行版中作为网络服务的默认管理器。掌握ip命令和nmcli的配置方法,是服务器运维人员必备的技能。
ip命令管理网络接口配置
ip命令是iproute2工具包的核心,替代了ifconfig、route、arp等旧工具。基本语法为ip 对象 命令 [参数],常用对象包括addr(地址)、link(链路)、route(路由)、neigh(邻居表)。
查看网络接口状态和地址信息:
# 查看所有网络接口
ip link show
# 查看接口的IP地址信息
ip addr show eth0
# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down
# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0
# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0
# 修改MAC地址
ip link set dev eth0 address 00:11:22:33:44:55
路由表管理是ip命令的另一个核心功能。在多网卡服务器或需要策略路由的场景下,手动配置路由表是常规操作:
# 查看路由表
ip route show
# 添加默认网关
ip route add default via 192.168.1.1
# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.254 dev eth0
# 删除路由
ip route del 10.0.0.0/24
# 策略路由:根据源地址选择路由
echo "100 custom" >> /etc/iproute2/rt_tables
ip route add default via 10.0.0.1 dev eth1 table custom
ip rule add from 192.168.2.0/24 table custom
# 查看策略路由规则
ip rule show
ip命令的配置在重启后会丢失。持久化配置需要写入网络配置文件或使用nmcli。
nmcli管理NetworkManager连接
nmcli是NetworkManager的命令行接口,在CentOS 7+/Ubuntu 18.04+等发行版中作为默认网络管理工具。nmcli的配置会自动持久化,适合服务器环境使用。
nmcli的两个核心概念:device(设备)是物理或虚拟网卡,connection(连接)是设备的配置文件。一个设备可以关联多个连接,但同时只能激活一个。
# 查看设备状态
nmcli device status
# 查看所有连接
nmcli connection show
# 创建新的以太网连接(静态IP)
nmcli connection add \
con-name static-eth0 \
type ethernet \
ifname eth0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual
# 创建DHCP连接
nmcli connection add \
con-name dhcp-eth0 \
type ethernet \
ifname eth0 \
ipv4.method auto
# 激活连接
nmcli connection up static-eth0
# 修改连接配置
nmcli connection modify static-eth0 ipv4.dns "1.1.1.1 8.8.8.8"
# 删除连接
nmcli connection delete static-eth0
网络绑定与VLAN配置方法
服务器高可用场景中,网卡绑定(Bonding)提供链路冗余和负载均衡。mode 1(active-backup)提供主备冗余,mode 4(802.3ad LACP)提供链路聚合负载均衡,需要交换机端配置LACP。
使用nmcli配置网卡绑定:
# 创建bond接口,模式为active-backup
nmcli connection add \
con-name bond0 \
type bond \
ifname bond0 \
bond.options "mode=active-backup,miimon=100,primary=eth0"
# 为bond添加从属接口
nmcli connection add \
con-name bond0-slave1 \
type ethernet \
ifname eth0 \
master bond0
nmcli connection add \
con-name bond0-slave2 \
type ethernet \
ifname eth1 \
master bond0
# 配置bond接口的IP地址
nmcli connection modify bond0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.method manual
# 激活
nmcli connection up bond0-slave1
nmcli connection up bond0-slave2
nmcli connection up bond0
# 验证bond状态
cat /proc/net/bonding/bond0
VLAN配置在虚拟化环境和网络隔离场景中经常使用。使用nmcli创建VLAN接口:
# 在eth0上创建VLAN 100接口
nmcli connection add \
con-name vlan100 \
type vlan \
ifname eth0.100 \
dev eth0 \
id 100 \
ipv4.addresses 10.100.1.10/24 \
ipv4.method manual
常见网络故障排查步骤
网络不通时的排查遵循从下到上的分层思路:物理层→数据链路层→网络层→传输层→应用层。
物理层检查:确认网卡Link状态和速率是否正常。
# 查看链路状态(重点关注state和speed)
ip -s link show eth0
# 查看网卡错误计数(errors/dropped/overruns)
ethtool -S eth0 | grep -i error
# 查看网卡详细参数
ethtool eth0
网络层检查:确认IP地址、路由表和ARP表是否正确。
# 确认本机IP配置
ip addr show
# 检查路由表是否包含正确的默认路由
ip route show
# 逐步ping测试
ping -c 3 192.168.1.1
ping -c 3 8.8.8.8
ping -c 3 www.baidu.com
# DNS解析测试
dig www.baidu.com
nslookup www.baidu.com
# 路由路径追踪(定位中间哪一跳不通)
traceroute -n 8.8.8.8
mtr -n 8.8.8.8 # 交互式,显示持续丢包率
传输层检查:端口连通性和连接状态分析。
# 检查TCP端口是否开放
nc -zv 192.168.1.1 80
nc -zv 192.168.1.1 443
# 查看本机监听端口
ss -tlnp
# 查看已建立的连接
ss -tnp state established
# 查看连接状态统计(重点关注TIME_WAIT和CLOSE_WAIT数量)
ss -s
防火墙规则与连接追踪
服务器安全加固中,防火墙规则配置直接影响网络连通性。CentOS 7+使用firewalld作为默认防火墙管理工具,底层基于nftables;Ubuntu使用ufw作为前端,底层同样基于nftables。
# firewalld常用操作
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
firewall-cmd --list-all
# 限制特定IP访问SSH
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port=22 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port=22 protocol=tcp drop'
firewall-cmd --reload
连接追踪表(conntrack)在防火墙启用时会记录所有连接状态。高并发服务器需要调大conntrack表大小,否则可能导致新连接被丢弃:
# 查看当前conntrack最大值
sysctl net.netfilter.nf_conntrack_max
# 查看当前使用量
cat /proc/sys/net/netfilter/nf_conntrack_count
# 调大conntrack表(写入sysctl.conf持久化)
echo "net.netfilter.nf_conntrack_max = 1048576" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_buckets = 262144" >> /etc/sysctl.conf
sysctl -p
排查网络问题时,tcpdump抓包是定位问题的终极手段。结合过滤条件精准抓取目标流量:
# 抓取eth0上80端口的HTTP流量
tcpdump -i eth0 port 80 -n -c 100
# 抓取特定IP的流量
tcpdump -i eth0 host 192.168.1.100 -n
# 抓取TCP SYN包(用于分析连接建立问题)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' -n
# 写入pcap文件用Wireshark分析
tcpdump -i eth0 port 443 -w /tmp/capture.pcap
网络配置变更后,使用nmcli connection reload和nmcli connection up <连接名>确保配置生效。对于不使用NetworkManager的系统,配置文件修改后执行systemctl restart network或ifdown/ifup接口。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-wang-luo-pei-zhi-yu-gu-zhang-pai-cha-shi-zhan-ip-ming/