刚接触Linux网络配置时,我一度被各种网络接口命名规则搞晕——eth0、ens33、enp0s3这些看似随机的字母数字组合,其实暗藏玄机。现代Linux系统主要采用两种命名方案:传统ethX序列(eth0、eth1)和可预测网络接口名(如ens33)。后者其实是systemd的"功劳",它根据固件拓扑信息生成固定名称,避免网卡顺序变动导致配置失效。
网络配置的核心在于理解几个关键组件:
经验之谈:在虚拟机环境中经常遇到网卡名称不一致的问题,建议通过
dmesg | grep -i eth命令快速定位实际识别到的网卡名称。
临时配置网络参数(重启失效):
bash复制# 设置IP地址和子网掩码
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# 或使用ip命令(推荐新系统)
sudo ip addr add 192.168.1.100/24 dev eth0
# 启用/禁用接口
sudo ifconfig eth0 up
sudo ip link set eth0 down
永久配置则需编辑网络配置文件,不同发行版位置不同:
/etc/network/interfacesconf复制auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
/etc/sysconfig/network-scripts/ifcfg-eth0conf复制DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
现代Linux系统通常有两种网络管理方案:
NetworkManager:图形界面友好,适合桌面环境
bash复制nmcli device status # 查看设备状态
nmcli connection show # 显示连接配置
systemd-networkd:轻量级方案,适合服务器
bash复制systemctl status systemd-networkd
踩坑记录:在最小化安装的服务器上,NetworkManager可能未预装。此时直接修改网络配置文件后,需要
systemctl restart networking(Debian系)或nmcli connection reload(RHEL系)使配置生效。
查看路由表的三种姿势:
bash复制route -n
ip route show
netstat -rn
添加静态路由示例:
bash复制# 经网关192.168.1.1到达10.0.0.0/8网络
sudo ip route add 10.0.0.0/8 via 192.168.1.1
# 持久化路由(Debian系)
sudo nano /etc/network/interfaces
# 在对应接口后追加:
up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.1
虽然nftables是iptables的继任者,但当前生产环境仍大量使用iptables。基础规则示例:
bash复制# 允许已建立的连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 开放SSH端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 默认拒绝策略
sudo iptables -P INPUT DROP
firewalld作为更友好的前端工具:
bash复制sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
bash复制ping -c 4 example.com # 测试连通性
traceroute example.com # 追踪路由路径
mtr --report example.com # 综合诊断工具
抓包分析神器tcpdump:
bash复制sudo tcpdump -i eth0 -n 'port 80' # 监控80端口流量
sudo tcpdump -i any -w capture.pcap # 抓包保存文件
带宽测试工具iperf3:
bash复制# 服务端
iperf3 -s
# 客户端
iperf3 -c server_ip -t 30
安装ISC DHCP服务器:
bash复制sudo apt install isc-dhcp-server # Debian系
sudo yum install dhcp # RHEL系
配置文件示例(/etc/dhcp/dhcpd.conf):
conf复制subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
}
修改/etc/resolv.conf(注意:某些系统会覆盖此文件):
conf复制nameserver 8.8.8.8
nameserver 1.1.1.1
更持久的配置方式:
查看当前TCP参数:
bash复制sysctl net.ipv4.tcp_available_congestion_control
临时修改参数:
bash复制sudo sysctl -w net.ipv4.tcp_window_scaling=1
永久生效需写入/etc/sysctl.conf:
conf复制net.ipv4.tcp_sack = 1
net.core.rmem_max = 16777216
创建bond0接口:
bash复制sudo modprobe bonding
sudo nano /etc/network/interfaces
配置示例:
conf复制auto bond0
iface bond0 inet static
address 192.168.1.50
netmask 255.255.255.0
slaves eth0 eth1
bond-mode 802.3ad
bond-miimon 100
查看现有网络:
bash复制docker network ls
创建自定义网络:
bash复制docker network create --driver=bridge --subnet=172.28.0.0/16 my-net
将容器80端口映射到主机8080:
bash复制docker run -d -p 8080:80 nginx
检查端口映射:
bash复制docker port container_id
配置文件示例(/etc/wpa_supplicant.conf):
conf复制network={
ssid="your_SSID"
psk="your_password"
key_mgmt=WPA-PSK
}
连接命令:
bash复制sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
sudo dhclient wlan0
配置文件(/etc/netplan/01-netcfg.yaml):
yaml复制network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
应用配置:
bash复制sudo netplan apply
物理层检查:
bash复制ethtool eth0 # 查看网卡状态
dmesg | grep eth # 检查内核日志
网络层诊断:
bash复制ip addr show # 确认IP配置
ip route show # 检查路由表
传输层测试:
bash复制nc -zv example.com 80 # 测试端口连通性
应用层验证:
bash复制curl -v http://example.com # 详细HTTP请求过程
问题1:DNS解析失败
bash复制dig example.com # 检查DNS解析
nslookup example.com
问题2:ARP缓存问题
bash复制arp -a # 查看ARP缓存
sudo arp -d 192.168.1.1 # 删除错误条目
问题3:MTU不匹配
bash复制ping -M do -s 1472 example.com # 测试最大MTU
经过多年运维实践,我发现90%的网络问题都能通过分层排查法定位。建议养成从下往上(物理层→应用层)的系统性检查习惯,比随机尝试各种命令效率高得多。对于关键服务器,最好提前准备好包含常用诊断命令的检查清单,故障时按步骤执行即可快速定位问题。