云服务器双网卡同时对外通信

需求:同一台ECS云服务器,2个公网IP同时对外服务;
经常遇到的问题,废话不多说直接案例。

环境说明:
云主机: ECS(CentOS 7.9)
网卡 1(主网卡):eth0,内网 IP 192.168.252.215,绑定 EIP1 223.XX.XX.66
网卡 2(辅助网卡):eth1,内网 IP 192.168.252.104,绑定 EIP2 223.XX.XX.41
网关:内网网关统一为 192.168.252.1(云同子网默认网关)
目标:eth0 对应 EIP1 出站 / 入站,eth1 对应 EIP2 出站 / 入站,双网卡同时可用。

步骤 1:云控制台配置(前提)
1.1 创建并绑定弹性 IP
在云控制台「弹性公网 IP」页面,申请两个 EIP(EIP1 和 EIP2)。
进入 ECS 实例详情页,在「网络和安全」→「网卡」中,为主网卡(eth0)绑定 EIP1,为新增的辅助网卡(eth1)绑定 EIP2。
确保两个网卡的安全组均开放所需端口(如 SSH、HTTP 等)。
1.2 确认网卡状态
在 ECS 控制台的「网卡」页面,确认 eth0 和 eth1 均为「已启用」状态,且内网 IP、子网掩码、网关信息正确。

步骤 2:登录云主机配置网络
2.1 查看网卡识别情况
登录 ECS(通过主网卡 EIP1 的 SSH 连接),执行以下命令确认网卡已被系统识别:

ip addr  # 应显示eth0和eth1,且eth0已有默认内网IP
nmcli device status  # 确认eth0和eth1的状态为"connected"

wechat_2025-07-02_140202_453.pngwechat_2025-07-02_140202_453.png

2.2 配置主网卡(eth0)
一般主网卡默认已自动配置,若需手动确认或修改,编辑配置文件:
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
配置内容(保持默认即可,关键参数如下):

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp  # 一般默认DHCP,也可改为static手动指定内网IP
DEFROUTE=yes  # 主网卡作为默认路由
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.252.215  # 内网IP
PREFIX=24
GATEWAY=192.168.252.1  # 内网网关
DNS1=114.114.114.114  # DNS

2.3 配置辅助网卡(eth1)
辅助网卡默认可能未启用,需手动创建配置文件:
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1
添加以下内容(内网 IP 需与云控制台显示一致):

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  # 辅助网卡建议静态配置
DEFROUTE=no  # 禁用默认路由,避免与主网卡冲突
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.252.104  # 辅助网卡内网IP
PREFIX=24
# 不配置GATEWAY!避免双网关冲突
DNS1=114.114.114.114  # DNS

步骤 3:配置策略路由(核心!!!)
由于双网卡共用同一内网网关,需通过策略路由确保:
从 eth0(内网 IP 192.168.252.215)发出的流量,通过 EIP1 出站;
从 eth1(内网 IP 192.168.252.104)发出的流量,通过 EIP2 出站。

3.1 创建自定义路由表
编辑路由表标识文件,添加两个自定义表(编号建议 100 以上):
sudo vi /etc/iproute2/rt_tables
在末尾添加:

100 eth0_table  # 对应eth0的路由表
200 eth1_table  # 对应eth1的路由表

3.2 配置路由策略脚本
创建网络启动时自动加载路由规则的脚本(避免重启后失效):
sudo vi /etc/NetworkManager/dispatcher.d/99-custom-routes
添加以下内容(替换为实际 IP):

#!/bin/bash

# 当网卡启动时执行配置
if [ "$2" = "up" ]; then
    case "$1" in
        eth0)
            # 为eth0添加路由表:从192.168.252.215发出的流量走eth0和默认网关
            ip route add default via 192.168.252.1 dev eth0 table eth0_table
            ip rule add from 192.168.252.215/32 lookup eth0_table priority 100
            ;;
        eth1)
            # 为eth1添加路由表:从192.168.252.104发出的流量走eth1和默认网关
            ip route add default via 192.168.252.1 dev eth1 table eth1_table
            ip rule add from 192.168.252.104/32 lookup eth1_table priority 200
            ;;
    esac
fi

添加执行权限:
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-custom-routes

步骤 4:重启网络并验证
4.1 重启网络服务
sudo systemctl restart network # 或重启NetworkManager
sudo systemctl restart NetworkManager

4.2 验证网卡状态

# 通过eth0访问外网(应返回EIP1:223.XX.XX.66)
curl --interface eth0 ifconfig.me

# 通过eth1访问外网(应返回EIP2:223.XX.XX.41)
curl --interface eth1 ifconfig.me

wechat_2025-07-02_140357_277.pngwechat_2025-07-02_140357_277.png

若输出分别为 EIP1 和 EIP2,说明配置成功。

4.4 验证入站连接

wechat_2025-07-02_135724_824.pngwechat_2025-07-02_135724_824.png

用另一台机器ping EIP1(应从 eth0 响应);
ping EIP2(应从 eth1 响应);
若配置了 Web 服务,分别通过EIP1:80和EIP2:80访问,均能正常响应。

常见问题解决
1 eth1 无法访问外网
1.1 检查ifcfg-eth1中是否误配置了GATEWAY,需删除;
1.2 执行ip route show table eth1_table,确认路由表是否正确(default via 192.168.252.1 dev eth1)。
2 EIP2 无法被 ping 通
2.1 检查云安全组,确保 EIP2 对应的网卡(eth1)开放了 ICMP 协议;
2.2 关闭云主机防火墙测试:sudo systemctl stop firewalld。
3 重启后路由失效
3.1 确认99-custom-routes脚本权限正确(chmod +x);
3.2 手动执行脚本测试:sudo /etc/NetworkManager/dispatcher.d/99-custom-routes eth1 up。

添加新评论

选择表情