Linux网络配置:ip命令详解与实战指南
1. Linux网络配置的基石:ip命令解析
在Linux系统管理中,网络配置是最基础也最关键的技能之一。作为传统ifconfig的现代替代品,iproute2套件中的ip命令提供了更强大的功能集。我第一次接触这个命令是在调试一台无法联网的服务器时,发现ifconfig显示的信息不足以诊断问题,转而使用ip命令才发现了被隐藏的路由表异常。
ip命令的核心优势在于它统一了网络接口、地址、路由等多个维度的管理。通过一个命令工具就能完成:
- 接口状态查询与配置
- IP地址管理
- 路由表操作
- ARP缓存控制
- 策略路由设置
重要提示:所有通过ip命令直接执行的配置都是临时的,系统重启后会丢失。要实现永久生效必须配合配置文件使用,这是很多新手容易忽略的关键点。
2. ip命令实战手册
2.1 基础查询操作
查看所有网络接口信息:
ip addr show # 简写形式 ip a这个命令输出的信息比ifconfig更丰富,特别是会显示所有接口的MAC地址、MTU值以及接口状态标志(UP/DOWN)。我习惯用-c参数让输出带颜色:
ip -c a查看特定接口的详细信息(以eth0为例):
ip addr show dev eth0路由表查询是另一个高频操作:
ip route show # 简写 ip r2.2 网络配置修改
添加IP地址到接口(临时生效):
ip addr add 192.168.1.100/24 dev eth0删除IP地址:
ip addr del 192.168.1.100/24 dev eth0启用/禁用网络接口:
ip link set eth0 up ip link set eth0 down修改接口MTU值(适合特殊网络环境):
ip link set eth0 mtu 90002.3 路由管理
添加默认网关:
ip route add default via 192.168.1.1添加特定路由:
ip route add 10.0.0.0/8 via 192.168.1.2删除路由:
ip route del 10.0.0.0/83. 永久化网络配置
3.1 主流Linux发行版的配置方式
不同发行版使用不同的网络配置系统:
RHEL/CentOS 7+:NetworkManager + ifcfg文件
/etc/sysconfig/network-scripts/ifcfg-eth0Debian/Ubuntu:netplan
/etc/netplan/01-netcfg.yamlArch Linux:systemd-networkd
/etc/systemd/network/20-wired.network
3.2 RHEL系永久配置示例
创建或编辑接口配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-eth0典型静态IP配置内容:
DEVICE=eth0 BOOTPROTO=static 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 ONBOOT=yes应用配置:
systemctl restart network3.3 Debian系使用netplan
配置文件示例:
network: version: 2 renderer: networkd ethernets: eth0: addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4]应用配置:
netplan apply4. 高级技巧与故障排查
4.1 多IP地址绑定
单个接口绑定多个IP:
ip addr add 192.168.1.101/24 dev eth0 label eth0:1永久配置(RHEL系):
IPADDR2=192.168.1.101 PREFIX2=24 LABEL2=eth0:14.2 VLAN配置
创建VLAN接口:
ip link add link eth0 name eth0.100 type vlan id 100永久配置(netplan示例):
eth0.100: id: 100 link: eth0 addresses: [192.168.100.1/24]4.3 常见问题排查
问题1:IP配置不生效
- 检查接口状态:
ip link show eth0 - 确认IP是否绑定:
ip addr show eth0 - 验证路由表:
ip route show
问题2:网络连接时断时续
- 检查双工模式:
ethtool eth0 - 查看丢包统计:
ip -s link show eth0 - 测试MTU值:
ping -M do -s 1472 192.168.1.1
问题3:DNS解析失败
- 测试DNS服务器:
dig @8.8.8.8 example.com - 检查resolv.conf:
cat /etc/resolv.conf - 验证DNS配置是否被覆盖
5. 替代方案与工具链
虽然ip命令是主流选择,但还有其他工具值得了解:
- nmcli:NetworkManager的命令行工具,适合桌面环境
- nmtui:基于文本界面的网络配置工具
- ifup/ifdown:传统的接口控制脚本
- bridge-utils:网桥管理工具集
在实际工作中,我通常会根据场景混合使用这些工具。比如在自动化脚本中使用ip命令,在交互式配置时使用nmtui。
6. 安全加固建议
禁用不必要的网络服务:
systemctl disable --now avahi-daemon配置防火墙规则:
firewall-cmd --permanent --add-service=ssh firewall-cmd --reload限制管理接口访问:
ip addr add 192.168.1.200/32 dev eth0 iptables -A INPUT -i eth0 -s 192.168.1.200 -j ACCEPT定期检查网络配置:
ip neigh show # 查看ARP表 ss -tulnp # 查看监听端口
7. 自动化配置示例
对于需要批量部署的场景,可以使用以下脚本模板:
#!/bin/bash # 设置静态IP ip addr add 192.168.1.150/24 dev eth0 ip link set eth0 up ip route add default via 192.168.1.1 # 永久化配置 cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.150 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 ONBOOT=yes EOF # 应用配置 systemctl restart network8. 性能调优参数
对于高负载服务器,可以调整以下内核参数:
# 增加TCP窗口大小 echo "net.ipv4.tcp_window_scaling = 1" >> /etc/sysctl.conf echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf # 禁用IPv6(如不需要) echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf # 应用配置 sysctl -p9. 容器环境下的网络配置
在Docker等容器环境中,ip命令同样重要:
查看容器网络命名空间:
ip netns list进入容器的网络命名空间:
nsenter --net=/var/run/netns/container_id ip a创建veth pair连接容器:
ip link add veth0 type veth peer name veth1 ip link set veth0 netns container_ns10. 网络诊断工具箱
结合ip命令和其他工具进行综合诊断:
连通性测试:
ping -c 4 8.8.8.8 traceroute 8.8.8.8端口检查:
nc -zv 192.168.1.1 22 telnet 192.168.1.1 22带宽测试:
iperf3 -c 192.168.1.1数据包分析:
tcpdump -i eth0 -n host 192.168.1.100
11. 云环境特殊考量
在AWS、Azure等云平台中,网络配置有特殊要求:
AWS EC2:
- 必须保留主IP的源/目标检查
- 辅助IP需要配置在OS层面
Azure VM:
- 需要确保DHCP客户端正常运行
- 自定义路由需要配置路由表
GCP实例:
- 网络标签影响防火墙规则
- 需要启用IP转发功能
12. 无线网络配置
对于无线接口(wlan0),ip命令同样适用:
扫描可用网络:
iwlist wlan0 scan连接WPA2网络:
wpa_supplicant -B -i wlan0 -c <(wpa_passphrase "SSID" "password") dhclient wlan0永久配置(NetworkManager):
nmcli dev wifi connect "SSID" password "password"13. IPv6配置指南
IPv6的配置与IPv4类似但有些关键差异:
查看IPv6地址:
ip -6 addr show添加IPv6地址:
ip -6 addr add 2001:db8::1/64 dev eth0IPv6路由:
ip -6 route add default via 2001:db8::ffff永久配置(netplan示例):
addresses: [2001:db8::1/64, "192.168.1.100/24"] gateway6: 2001:db8::ffff14. 网络命名空间进阶
创建和使用网络命名空间:
创建命名空间:
ip netns add ns1在命名空间中运行命令:
ip netns exec ns1 ip addr show连接两个命名空间:
ip link add veth0 type veth peer name veth1 ip link set veth0 netns ns0 ip link set veth1 netns ns115. 网络策略路由
基于策略的路由配置:
创建自定义路由表:
echo "100 custom" >> /etc/iproute2/rt_tables添加路由规则:
ip rule add from 192.168.1.100 lookup custom ip route add default via 192.168.2.1 dev eth1 table custom验证策略路由:
ip rule show ip route show table custom16. 网络接口绑定(Bonding)
创建绑定接口:
ip link add bond0 type bond mode 802.3ad ip link set eth0 master bond0 ip link set eth1 master bond0永久配置(RHEL系):
DEVICE=bond0 TYPE=Bond BONDING_MASTER=yes BONDING_OPTS="mode=4 miimon=100" IPADDR=192.168.1.100 NETMASK=255.255.255.017. 网络桥接配置
创建桥接接口:
ip link add br0 type bridge ip link set eth0 master br0 ip link set br0 up永久配置(netplan示例):
bridges: br0: interfaces: [eth0] addresses: [192.168.1.100/24] gateway4: 192.168.1.118. 网络服务质量(QoS)
使用tc进行流量控制:
限制带宽:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms优先级队列:
tc qdisc add dev eth0 root handle 1: prio tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:119. 网络接口别名
创建接口别名:
ip addr add 192.168.1.101/24 dev eth0 label eth0:backup永久配置(RHEL系):
IPADDR1=192.168.1.100 PREFIX1=24 IPADDR2=192.168.1.101 PREFIX2=24 LABEL2=eth0:backup20. 网络配置备份与恢复
备份当前配置:
ip addr save > ip_addr_backup ip route save > ip_route_backup恢复配置:
ip addr restore < ip_addr_backup ip route restore < ip_route_backup备份永久配置:
tar czf /backup/network_config_$(date +%F).tgz /etc/sysconfig/network-scripts/ /etc/netplan/