文章目录
-
- [1. IP 网络基础概念](#1. IP 网络基础概念)
-
- [1.1 IP 地址与子网划分](#1.1 IP 地址与子网划分)
- [1.2 CIDR 表示法](#1.2 CIDR 表示法)
- [2. Linux 网络接口管理](#2. Linux 网络接口管理)
-
- [2.1 网络接口命名规范](#2.1 网络接口命名规范)
- [2.2 使用 ip 命令管理接口](#2.2 使用 ip 命令管理接口)
- [3. IP 地址配置方法](#3. IP 地址配置方法)
-
- [3.1 临时配置(重启后失效)](#3.1 临时配置(重启后失效))
- [3.2 永久配置方法](#3.2 永久配置方法)
-
- [方法一:使用 Netplan(Ubuntu 18.04+)](#方法一:使用 Netplan(Ubuntu 18.04+))
- [方法二:使用 systemd-networkd](#方法二:使用 systemd-networkd)
- [方法三:传统 ifcfg 文件(CentOS/RHEL)](#方法三:传统 ifcfg 文件(CentOS/RHEL))
- [4. 路由管理](#4. 路由管理)
-
- [4.1 查看路由表](#4.1 查看路由表)
- [4.2 添加和删除路由](#4.2 添加和删除路由)
- [4.3 策略路由](#4.3 策略路由)
- [5. 网络邻居发现](#5. 网络邻居发现)
-
- [5.1 ARP 表管理](#5.1 ARP 表管理)
- [6. 网络命名空间](#6. 网络命名空间)
-
- [6.1 创建和管理网络命名空间](#6.1 创建和管理网络命名空间)
- [6.2 命名空间间的网络连接](#6.2 命名空间间的网络连接)
- [7. 高级网络配置](#7. 高级网络配置)
-
- [7.1 网桥配置](#7.1 网桥配置)
- [7.2 VLAN 配置](#7.2 VLAN 配置)
- [7.3 绑定接口(Bonding)](#7.3 绑定接口(Bonding))
- [8. 网络诊断工具](#8. 网络诊断工具)
-
- [8.1 基本诊断命令](#8.1 基本诊断命令)
- [8.2 高级诊断工具](#8.2 高级诊断工具)
- [9. 网络服务配置](#9. 网络服务配置)
-
- [9.1 DHCP 客户端配置](#9.1 DHCP 客户端配置)
- [9.2 DNS 配置](#9.2 DNS 配置)
- [10. 防火墙与安全](#10. 防火墙与安全)
-
- [10.1 iptables 基础](#10.1 iptables 基础)
- [10.2 nftables(现代替代)](#10.2 nftables(现代替代))
- [11. 自动化脚本示例](#11. 自动化脚本示例)
-
- [11.1 网络配置检查脚本](#11.1 网络配置检查脚本)
- [11.2 多IP绑定脚本](#11.2 多IP绑定脚本)
- [12. 故障排除指南](#12. 故障排除指南)
-
- [12.1 常见问题诊断步骤](#12.1 常见问题诊断步骤)
- [12.2 网络调试技巧](#12.2 网络调试技巧)
- 总结
- 引用出处
1. IP 网络基础概念
1.1 IP 地址与子网划分
IP 地址是互联网协议地址的简称,用于在网络中唯一标识设备。Linux 系统中主要使用 IPv4 和 IPv6 两种版本。
bash
# 查看本机 IP 地址信息
$ ip addr show
# 或者使用传统命令
$ ifconfig
# 示例输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:3c:4d:2e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86388sec preferred_lft 86388sec
inet6 fe80::a00:27ff:fe3c:4d2e/64 scope link
valid_lft forever preferred_lft forever
1.2 CIDR 表示法
CIDR(无类别域间路由)使用斜线表示法来标识网络前缀:
bash
# 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 系统使用可预测的网络接口命名:
bash
# 查看所有网络接口
$ ls /sys/class/net/
# 或者
$ ip link show
# 常见的接口命名:
# - ens33, ens34: 板载以太网接口
# - enp0s3, enp0s8: PCI 以太网接口
# - wlp2s0: 无线接口
# - lo: 环回接口
2.2 使用 ip 命令管理接口
bash
# 启用网络接口
$ 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 临时配置(重启后失效)
bash
# 为接口添加 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+)
yaml
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
routes:
- to: 10.0.0.0/8
via: 192.168.1.254
应用配置:
bash
$ sudo netplan apply
$ sudo netplan --debug apply # 调试模式
方法二:使用 systemd-networkd
ini
# /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
启用服务:
bash
$ sudo systemctl enable systemd-networkd
$ sudo systemctl start systemd-networkd
方法三:传统 ifcfg 文件(CentOS/RHEL)
bash
# /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 查看路由表
bash
# 查看 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 添加和删除路由
bash
# 添加默认网关
$ 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 策略路由
bash
# 创建自定义路由表
$ 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 表管理
bash
# 查看 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 创建和管理网络命名空间
bash
# 创建网络命名空间
$ 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 命名空间间的网络连接
bash
# 创建 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 网桥配置
bash
# 创建网桥
$ 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 配置
bash
# 创建 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)
bash
# 加载 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 基本诊断命令
bash
# 测试网络连通性
$ 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 高级诊断工具
bash
# 使用 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 客户端配置
bash
# 使用 dhclient 获取 DHCP 地址
$ sudo dhclient eth0
# 释放 DHCP 租约
$ sudo dhclient -r eth0
# 查看 DHCP 租约信息
$ cat /var/lib/dhcp/dhclient.leases
9.2 DNS 配置
bash
# 查看当前 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 基础
bash
# 查看当前规则
$ 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(现代替代)
bash
# 查看 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 网络配置检查脚本
bash
#!/bin/bash
# network-check.sh
echo "=== 网络接口状态 ==="
ip addr show
echo -e "\n=== 路由表 ==="
ip route show
echo -e "\n=== 网络连接 ==="
ss -tuln
echo -e "\n=== DNS 配置 ==="
cat /etc/resolv.conf
echo -e "\n=== 网络连通性测试 ==="
ping -c 2 8.8.8.8
ping -c 2 google.com
11.2 多IP绑定脚本
bash
#!/bin/bash
# multi-ip-setup.sh
INTERFACE="eth0"
BASE_IP="192.168.1"
START_IP=100
END_IP=110
for i in $(seq $START_IP $END_IP); do
ip addr add ${BASE_IP}.${i}/24 dev $INTERFACE label ${INTERFACE}:${i}
done
echo "已添加 IP 地址范围: ${BASE_IP}.${START_IP} 到 ${BASE_IP}.${END_IP}"
12. 故障排除指南
12.1 常见问题诊断步骤
bash
# 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 网络调试技巧
bash
# 实时监控网络流量
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 发行版。