Linux网络配置与故障排查实战:ip命令与nmcli管理方案

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 reloadnmcli connection up <连接名>确保配置生效。对于不使用NetworkManager的系统,配置文件修改后执行systemctl restart networkifdown/ifup接口。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-wang-luo-pei-zhi-yu-gu-zhang-pai-cha-shi-zhan-ip-ming/

(0)
小编小编
上一篇 10小时前
下一篇 10小时前

相关推荐