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 通过 网络命名空间 管理多网卡,每个物理网卡需:
- 绑定独立 IP 地址
- 配置独立路由表
- 设置策略路由规则(避免冲突)
🔍 二、操作前准备
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
⚠️ 六、避坑指南
- 网关冲突问题
➤ 只能有一个默认网关,第二网卡必须禁用默认路由 - DNS 配置陷阱
# 正确方法:每个连接独立DNS nmcli con mod LAN-conn ipv4.dns "192.168.1.53" nmcli con mod WAN-conn ipv4.dns "1.1.1.1"
- 防火墙策略
# 允许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
- 网卡唤醒问题
在/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服务器 | ✅ | ⭐⭐⭐⭐ |
📌 终极建议:
- 生产环境优先使用 NetworkManager + nmcli
- 关键业务增加 ARP 监控:
arping -I enp1s0 -c 3 192.168.1.1
- 使用 NetworkManager-dispatcher 实现路由故障自动切换
标签:
- linux
- ip