linux双网卡双IP配置

Linux命令

linux双网卡双IP配置

2025-07-10 00:03


? Linux 双网卡双 IP 配置终极指南 (基于 RHEL 9 / Ubuntu 22.04 最新网络管理方案) ? 一、核心配置原理

                                            




🔧 Linux 双网卡双 IP 配置终极指南

(基于 RHEL 9 / Ubuntu 22.04 最新网络管理方案)


📡 一、核心配置原理

Linux 通过 网络命名空间 管理多网卡,每个物理网卡需:

  1. 绑定独立 IP 地址
  2. 配置独立路由表
  3. 设置策略路由规则(避免冲突)

🔍 二、操作前准备

1. 识别网卡信息

ip -c link show | grep -v lo  # 查看物理网卡
# 输出示例:
# 2: enp1s0: <BROADCAST,MULTICAST> ...
# 3: enp2s0: <BROADCAST,MULTICAST> ...

nmcli device status  # 查看 NetworkManager 设备名

2. 确认 IP 规划

网卡 IP/掩码 网关 用途
enp1s0 192.168.1.100/24 192.168.1.1 内部通信
enp2s0 10.0.0.100/24 10.0.0.1 互联网访问

⚙️ 三、永久配置方法(推荐)

▶ 方案 A:NetworkManager (nmcli)

# 配置第一网卡
sudo nmcli con add con-name "LAN-conn" type ethernet ifname enp1s0 \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "8.8.8.8" \
  ipv4.method manual

# 配置第二网卡(不设默认网关!)
sudo nmcli con add con-name "WAN-conn" type ethernet ifname enp2s0 \
  ipv4.addresses 10.0.0.100/24 \
  ipv4.method manual

# 激活连接
sudo nmcli con up LAN-conn
sudo nmcli con up WAN-conn

▶ 方案 B:Netplan (Ubuntu)

# /etc/netplan/01-dual-nic.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8]
    enp2s0:
      addresses: [10.0.0.100/24]
      # 关键:禁用默认路由
      routes: []

应用配置:

sudo netplan apply

🛣️ 四、路由策略配置

1. 创建独立路由表

# 编辑 /etc/iproute2/rt_tables
echo "101 lan_table" | sudo tee -a /etc/iproute2/rt_tables
echo "102 wan_table" | sudo tee -a /etc/iproute2/rt_tables

2. 设置策略路由

# LAN网卡路由规则
sudo ip route add 192.168.1.0/24 dev enp1s0 src 192.168.1.100 table lan_table
sudo ip route add default via 192.168.1.1 table lan_table

# WAN网卡路由规则
sudo ip route add 10.0.0.0/24 dev enp2s0 src 10.0.0.100 table wan_table
sudo ip route add default via 10.0.0.1 table wan_table

# 策略规则(按源IP选择路由表)
sudo ip rule add from 192.168.1.100 lookup lan_table
sudo ip rule add from 10.0.0.100 lookup wan_table

3. 永久生效(systemd 服务)

创建 /etc/systemd/system/dual-ip-routes.service

[Unit]
Description=Dual IP Routing
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/setup-dual-routes.sh

[Install]
WantedBy=multi-user.target

脚本 /usr/local/bin/setup-dual-routes.sh 需包含上述路由命令并添加可执行权限。


🧪 五、关键验证命令

# 查看IP配置
ip -4 addr show

# 检查路由表
ip route show
ip route show table lan_table
ip route show table wan_table

# 测试连通性
ping -I enp1s0 192.168.1.1        # 指定网卡ping网关
ping -I enp2s0 10.0.0.1

# 跟踪出口路径
traceroute --source 192.168.1.100 www.baidu.com
traceroute --source 10.0.0.100 www.google.com

⚠️ 六、避坑指南

  1. 网关冲突问题
    ➤ 只能有一个默认网关,第二网卡必须禁用默认路由
  2. DNS 配置陷阱
    # 正确方法:每个连接独立DNS
    nmcli con mod LAN-conn ipv4.dns "192.168.1.53"
    nmcli con mod WAN-conn ipv4.dns "1.1.1.1"
    
  3. 防火墙策略
    # 允许IP转发
    sudo sysctl -w net.ipv4.ip_forward=1
    echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-ipforward.conf
    
    # 防火墙放行
    sudo firewall-cmd --permanent --add-masquerade  # NAT支持
    sudo firewall-cmd --reload
    
  4. 网卡唤醒问题
    在 /etc/systemd/network/10-*.link 中为每张网卡设置唯一 MACAddressPolicy=persistent

💡 七、高级应用场景

场景 1:流量分流

# 将 HTTP 流量定向到 WAN
sudo ip rule add fwmark 1 lookup wan_table
sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1

场景 2:故障切换

# 安装故障检测工具
sudo apt install keepalived

# 配置 /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface enp1s0
    virtual_router_id 51
    priority 100
    virtual_ipaddress {
        192.168.1.200/24 dev enp1s0
    }
}

📊 八、配置对比表

方案 适用场景 热生效 复杂度
nmcli 桌面/服务器 ⭐⭐
Netplan Ubuntu 服务器 ⭐⭐
/etc/network/interfaces Debian 传统方案 ⭐⭐⭐
systemd-networkd 无GUI服务器 ⭐⭐⭐⭐

📌 终极建议

  1. 生产环境优先使用 NetworkManager + nmcli
  2. 关键业务增加 ARP 监控arping -I enp1s0 -c 3 192.168.1.1
  3. 使用 NetworkManager-dispatcher 实现路由故障自动切换

标签:
  • linux
  • ip
© 蓝易云.