Linux IP 网络配置与管理详解

文章目录

    • [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 网络配置的各个方面,从基础概念到高级特性,涵盖了:

  1. 基础配置:IP 地址、子网、路由的配置方法
  2. 接口管理:物理和虚拟接口的创建与管理
  3. 高级特性:VLAN、网桥、绑定等企业级功能
  4. 诊断工具:完整的网络故障排除工具集
  5. 安全配置:防火墙和网络安全最佳实践

通过掌握这些知识,您将能够有效地管理和维护 Linux 系统的网络环境,解决各种网络相关问题。


引用出处

  1. Linux ip 命令手册页:man ip
  2. Linux 高级路由指南:https://www.lartc.org/
  3. systemd-networkd 官方文档:https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html
  4. Netplan 官方文档:https://netplan.io/reference
  5. Red Hat 网络配置指南:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/
  6. Ubuntu 网络配置指南:https://ubuntu.com/server/docs/network-configuration

本文基于 Linux 内核 5.4+ 版本和 systemd 243+ 版本编写,适用于大多数现代 Linux 发行版。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展