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 7NetworkManager ifcfg文件/etc/sysconfig/network-scripts/ifcfg-eth0Debian/Ubuntunetplan/etc/netplan/01-netcfg.yamlArch Linuxsystemd-networkd/etc/systemd/network/20-wired.network3.2 RHEL系永久配置示例创建或编辑接口配置文件vi /etc/sysconfig/network-scripts/ifcfg-eth0典型静态IP配置内容DEVICEeth0 BOOTPROTOstatic IPADDR192.168.1.100 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS18.8.8.8 DNS28.8.4.4 ONBOOTyes应用配置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地址绑定单个接口绑定多个IPip addr add 192.168.1.101/24 dev eth0 label eth0:1永久配置RHEL系IPADDR2192.168.1.101 PREFIX224 LABEL2eth0: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 常见问题排查问题1IP配置不生效检查接口状态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问题3DNS解析失败测试DNS服务器dig 8.8.8.8 example.com检查resolv.confcat /etc/resolv.conf验证DNS配置是否被覆盖5. 替代方案与工具链虽然ip命令是主流选择但还有其他工具值得了解nmcliNetworkManager的命令行工具适合桌面环境nmtui基于文本界面的网络配置工具ifup/ifdown传统的接口控制脚本bridge-utils网桥管理工具集在实际工作中我通常会根据场景混合使用这些工具。比如在自动化脚本中使用ip命令在交互式配置时使用nmtui。6. 安全加固建议禁用不必要的网络服务systemctl disable --now avahi-daemon配置防火墙规则firewall-cmd --permanent --add-servicessh 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 DEVICEeth0 BOOTPROTOstatic IPADDR192.168.1.150 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS18.8.8.8 ONBOOTyes 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.10011. 云环境特殊考量在AWS、Azure等云平台中网络配置有特殊要求AWS EC2必须保留主IP的源/目标检查辅助IP需要配置在OS层面Azure VM需要确保DHCP客户端正常运行自定义路由需要配置路由表GCP实例网络标签影响防火墙规则需要启用IP转发功能12. 无线网络配置对于无线接口wlan0ip命令同样适用扫描可用网络iwlist wlan0 scan连接WPA2网络wpa_supplicant -B -i wlan0 -c (wpa_passphrase SSID password) dhclient wlan0永久配置NetworkManagernmcli dev wifi connect SSID password password13. 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系DEVICEbond0 TYPEBond BONDING_MASTERyes BONDING_OPTSmode4 miimon100 IPADDR192.168.1.100 NETMASK255.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系IPADDR1192.168.1.100 PREFIX124 IPADDR2192.168.1.101 PREFIX224 LABEL2eth0: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/