Linux IP 网络配置与管理详解
文章目录
- 1. IP 网络基础概念
- 1.1 IP 地址与子网划分
- 1.2 CIDR 表示法
- 2. Linux 网络接口管理
- 2.1 网络接口命名规范
- 2.2 使用 ip 命令管理接口
- 3. IP 地址配置方法
- 3.1 临时配置(重启后失效)
- 3.2 永久配置方法
- 方法一:使用 Netplan(Ubuntu 18.04+)
- 方法二:使用 systemd-networkd
- 方法三:传统 ifcfg 文件(CentOS/RHEL)
- 4. 路由管理
- 4.1 查看路由表
- 4.2 添加和删除路由
- 4.3 策略路由
- 5. 网络邻居发现
- 5.1 ARP 表管理
- 6. 网络命名空间
- 6.1 创建和管理网络命名空间
- 6.2 命名空间间的网络连接
- 7. 高级网络配置
- 7.1 网桥配置
- 7.2 VLAN 配置
- 7.3 绑定接口(Bonding)
- 8. 网络诊断工具
- 8.1 基本诊断命令
- 8.2 高级诊断工具
- 9. 网络服务配置
- 9.1 DHCP 客户端配置
- 9.2 DNS 配置
- 10. 防火墙与安全
- 10.1 iptables 基础
- 10.2 nftables(现代替代)
- 11. 自动化脚本示例
- 11.1 网络配置检查脚本
- 11.2 多IP绑定脚本
- 12. 故障排除指南
- 12.1 常见问题诊断步骤
- 12.2 网络调试技巧
- 总结
- 引用出处
1. IP 网络基础概念
1.1 IP 地址与子网划分
IP 地址是互联网协议地址的简称,用于在网络中唯一标识设备。Linux 系统中主要使用 IPv4 和 IPv6 两种版本。
# 查看本机 IP 地址信息
$ ip addr show
# 或者使用传统命令
$ ifconfig# 示例输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 08:00:27:3c:4d:2e brd ff:ff:ff:ff:ff:ffinet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0valid_lft 86388sec preferred_lft 86388secinet6 fe80::a00:27ff:fe3c:4d2e/64 scope link valid_lft forever preferred_lft forever
1.2 CIDR 表示法
CIDR(无类别域间路由)使用斜线表示法来标识网络前缀:
# CIDR 表示法示例
192.168.1.0/24 # 前24位是网络号,后8位是主机号
10.0.0.0/8 # 前8位是网络号,后24位是主机号
172.16.0.0/12 # 前12位是网络号,后20位是主机号
2. Linux 网络接口管理
2.1 网络接口命名规范
现代 Linux 系统使用可预测的网络接口命名:
# 查看所有网络接口
$ ls /sys/class/net/
# 或者
$ ip link show# 常见的接口命名:
# - ens33, ens34: 板载以太网接口
# - enp0s3, enp0s8: PCI 以太网接口
# - wlp2s0: 无线接口
# - lo: 环回接口
2.2 使用 ip 命令管理接口
# 启用网络接口
$ sudo ip link set eth0 up# 禁用网络接口
$ sudo ip link set eth0 down# 查看接口状态
$ ip link show eth0# 设置接口 MTU
$ sudo ip link set eth0 mtu 1500# 查看接口统计信息
$ ip -s link show eth0
3. IP 地址配置方法
3.1 临时配置(重启后失效)
# 为接口添加 IP 地址
$ sudo ip addr add 192.168.1.100/24 dev eth0# 删除接口的 IP 地址
$ sudo ip addr del 192.168.1.100/24 dev eth0# 添加多个 IP 地址(别名)
$ sudo ip addr add 192.168.1.101/24 dev eth0 label eth0:1# 清除接口的所有 IP 地址
$ sudo ip addr flush dev eth0
3.2 永久配置方法
方法一:使用 Netplan(Ubuntu 18.04+)
# /etc/netplan/01-netcfg.yaml
network:version: 2renderer: networkdethernets:eth0:dhcp4: noaddresses: [192.168.1.100/24]gateway4: 192.168.1.1nameservers:addresses: [8.8.8.8, 8.8.4.4]routes:- to: 10.0.0.0/8via: 192.168.1.254
应用配置:
$ sudo netplan apply
$ sudo netplan --debug apply # 调试模式
方法二:使用 systemd-networkd
# /etc/systemd/network/10-eth0.network
[Match]
Name=eth0[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4[Route]
Gateway=192.168.1.254
Destination=10.0.0.0/8
启用服务:
$ sudo systemctl enable systemd-networkd
$ sudo systemctl start systemd-networkd
方法三:传统 ifcfg 文件(CentOS/RHEL)
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
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
4. 路由管理
4.1 查看路由表
# 查看 IPv4 路由表
$ ip route show
# 或者
$ route -n# 查看 IPv6 路由表
$ ip -6 route show# 示例输出:
default via 192.168.1.1 dev eth0 proto static
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/8 via 192.168.1.254 dev eth0 proto static
4.2 添加和删除路由
# 添加默认网关
$ sudo ip route add default via 192.168.1.1 dev eth0# 添加静态路由
$ sudo ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0# 添加基于源IP的路由(策略路由)
$ sudo ip route add 192.168.2.0/24 via 192.168.1.253 src 192.168.1.100# 删除路由
$ sudo ip route del 10.0.0.0/8 via 192.168.1.254# 刷新路由缓存
$ sudo ip route flush cache
4.3 策略路由
# 创建自定义路由表
$ echo "200 custom" >> /etc/iproute2/rt_tables# 添加路由到自定义表
$ sudo ip route add 192.168.2.0/24 via 192.168.1.253 dev eth0 table custom# 添加路由规则
$ sudo ip rule add from 192.168.1.100/32 table custom
$ sudo ip rule add to 192.168.2.0/24 table custom# 查看路由规则
$ ip rule show
5. 网络邻居发现
5.1 ARP 表管理
# 查看 ARP 表
$ ip neigh show
# 或者
$ arp -a# 添加静态 ARP 条目
$ sudo ip neigh add 192.168.1.50 lladdr 00:11:22:33:44:55 dev eth0 nud permanent# 删除 ARP 条目
$ sudo ip neigh del 192.168.1.50 dev eth0# 刷新 ARP 缓存
$ sudo ip neigh flush dev eth0
6. 网络命名空间
6.1 创建和管理网络命名空间
# 创建网络命名空间
$ sudo ip netns add ns1
$ sudo ip netns add ns2# 在命名空间中执行命令
$ sudo ip netns exec ns1 ip addr show
$ sudo ip netns exec ns1 ping 127.0.0.1# 列出所有网络命名空间
$ ip netns list# 删除网络命名空间
$ sudo ip netns del ns1
6.2 命名空间间的网络连接
# 创建 veth 对
$ sudo ip link add veth0 type veth peer name veth1# 将 veth 对分配到不同的命名空间
$ sudo ip link set veth0 netns ns1
$ sudo ip link set veth1 netns ns2# 配置 IP 地址并启用接口
$ sudo ip netns exec ns1 ip addr add 10.0.1.1/24 dev veth0
$ sudo ip netns exec ns1 ip link set veth0 up
$ sudo ip netns exec ns2 ip addr add 10.0.1.2/24 dev veth1
$ sudo ip netns exec ns2 ip link set veth1 up# 测试连通性
$ sudo ip netns exec ns1 ping 10.0.1.2
7. 高级网络配置
7.1 网桥配置
# 创建网桥
$ sudo ip link add name br0 type bridge# 设置网桥 IP
$ sudo ip addr add 192.168.1.100/24 dev br0# 启用网桥
$ sudo ip link set br0 up# 将物理接口添加到网桥
$ sudo ip link set eth0 master br0# 查看网桥信息
$ bridge link show
7.2 VLAN 配置
# 创建 VLAN 接口
$ sudo ip link add link eth0 name eth0.100 type vlan id 100# 配置 VLAN IP
$ sudo ip addr add 192.168.100.100/24 dev eth0.100
$ sudo ip link set eth0.100 up# 查看 VLAN 接口
$ ip -d link show eth0.100
7.3 绑定接口(Bonding)
# 加载 bonding 模块
$ sudo modprobe bonding# 创建绑定接口
$ sudo ip link add bond0 type bond mode 802.3ad# 配置绑定参数
$ echo 802.3ad > /sys/class/net/bond0/bonding/mode
$ echo 100 > /sys/class/net/bond0/bonding/miimon# 添加从接口
$ sudo ip link set eth0 master bond0
$ sudo ip link set eth1 master bond0# 启用绑定接口
$ sudo ip link set bond0 up
$ sudo ip addr add 192.168.1.100/24 dev bond0
8. 网络诊断工具
8.1 基本诊断命令
# 测试网络连通性
$ ping 8.8.8.8
$ ping -c 4 google.com # 发送4个包后停止# 跟踪路由路径
$ traceroute google.com
$ tracepath google.com# 查看网络连接
$ netstat -tuln # 查看监听端口
$ ss -tuln # 更现代的替代命令# 域名解析测试
$ nslookup google.com
$ dig google.com
$ host google.com
8.2 高级诊断工具
# 使用 tcpdump 抓包分析
$ sudo tcpdump -i eth0 -n host 8.8.8.8
$ sudo tcpdump -i any -w capture.pcap # 保存到文件# 使用 nmap 进行端口扫描
$ nmap -sS 192.168.1.0/24 # SYN 扫描
$ nmap -O 192.168.1.100 # 操作系统检测# 网络性能测试
$ iperf3 -s # 服务器端
$ iperf3 -c server_ip # 客户端# 查看网络统计信息
$ ip -s link # 接口统计
$ netstat -s # 协议统计
$ ss -s # 套接字统计
9. 网络服务配置
9.1 DHCP 客户端配置
# 使用 dhclient 获取 DHCP 地址
$ sudo dhclient eth0# 释放 DHCP 租约
$ sudo dhclient -r eth0# 查看 DHCP 租约信息
$ cat /var/lib/dhcp/dhclient.leases
9.2 DNS 配置
# 查看当前 DNS 配置
$ cat /etc/resolv.conf# 手动配置 DNS
$ echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
$ echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf# 使用 systemd-resolved(现代系统)
$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
10. 防火墙与安全
10.1 iptables 基础
# 查看当前规则
$ sudo iptables -L -n -v# 允许 SSH 连接
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 允许回环接口
$ sudo iptables -A INPUT -i lo -j ACCEPT# 设置默认策略
$ sudo iptables -P INPUT DROP
$ sudo iptables -P FORWARD DROP
$ sudo iptables -P OUTPUT ACCEPT# 保存 iptables 规则
$ sudo iptables-save > /etc/iptables/rules.v4
10.2 nftables(现代替代)
# 查看 nftables 规则
$ sudo nft list ruleset# 基本配置示例
$ sudo nft add table inet filter
$ sudo nft add chain inet filter input { type filter hook input priority 0 \; }
$ sudo nft add rule inet filter input tcp dport 22 accept
$ sudo nft add rule inet filter input ct state established,related accept
11. 自动化脚本示例
11.1 网络配置检查脚本
#!/bin/bash
# network-check.shecho "=== 网络接口状态 ==="
ip addr showecho -e "\n=== 路由表 ==="
ip route showecho -e "\n=== 网络连接 ==="
ss -tulnecho -e "\n=== DNS 配置 ==="
cat /etc/resolv.confecho -e "\n=== 网络连通性测试 ==="
ping -c 2 8.8.8.8
ping -c 2 google.com
11.2 多IP绑定脚本
#!/bin/bash
# multi-ip-setup.shINTERFACE="eth0"
BASE_IP="192.168.1"
START_IP=100
END_IP=110for i in $(seq $START_IP $END_IP); doip addr add ${BASE_IP}.${i}/24 dev $INTERFACE label ${INTERFACE}:${i}
doneecho "已添加 IP 地址范围: ${BASE_IP}.${START_IP} 到 ${BASE_IP}.${END_IP}"
12. 故障排除指南
12.1 常见问题诊断步骤
# 1. 检查物理连接和接口状态
ip link show
ethtool eth0# 2. 检查 IP 配置
ip addr show
ip route show# 3. 测试本地网络
ping 127.0.0.1
ping 192.168.1.1# 4. 测试外部网络
ping 8.8.8.8
ping google.com# 5. 检查 DNS 解析
nslookup google.com
dig google.com# 6. 检查防火墙规则
iptables -L -n
12.2 网络调试技巧
# 实时监控网络流量
sudo tcpdump -i any -n# 监控网络连接
watch -n 1 'ss -tuln'# 查看内核网络日志
dmesg | grep -i network
journalctl -u systemd-networkd# 测试特定端口的连通性
telnet host port
nc -zv host port
总结
本文详细介绍了 Linux 系统中 IP 网络配置的各个方面,从基础概念到高级特性,涵盖了:
- 基础配置:IP 地址、子网、路由的配置方法
- 接口管理:物理和虚拟接口的创建与管理
- 高级特性:VLAN、网桥、绑定等企业级功能
- 诊断工具:完整的网络故障排除工具集
- 安全配置:防火墙和网络安全最佳实践
通过掌握这些知识,您将能够有效地管理和维护 Linux 系统的网络环境,解决各种网络相关问题。
引用出处
- Linux
ip
命令手册页:man ip
- Linux 高级路由指南:https://www.lartc.org/
- systemd-networkd 官方文档:https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html
- Netplan 官方文档:https://netplan.io/reference
- Red Hat 网络配置指南:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/
- Ubuntu 网络配置指南:https://ubuntu.com/server/docs/network-configuration
本文基于 Linux 内核 5.4+ 版本和 systemd 243+ 版本编写,适用于大多数现代 Linux 发行版。