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 发行版。

相关推荐
lijunjun4 小时前
当ubuntu 系统的IP地址修改之后,gitlab服务应该如何修改?
tcp/ip·ubuntu·gitlab
ZhiqianXia4 小时前
Linux 内核中控制调试输出的频率和次数
linux
星源~4 小时前
Linux-Ubuntu系统安装特别指导
linux·qt·ubuntu·嵌入式开发·物联网设备
Yana.nice4 小时前
sshd -t与-T的区别
网络
asdfg12589634 小时前
SAN和NAS的区别
网络
读书读傻了哟4 小时前
Windows 10 使用 VMware Workstation 搭建 Ubuntu 虚拟机
linux·windows·ubuntu
isyangli_blog4 小时前
Windows & Linux 操作系统分区管理
linux·运维·服务器
weixin_456904275 小时前
C# 串口通信完整教程 (.NET Framework 4.0)
网络·c#·.net
泽虞5 小时前
《Qt应用开发》笔记p3
linux·开发语言·数据库·c++·笔记·qt·面试