背景
需求是在同一台阿里云 ECS Ubuntu 20.04服务器上配置多网卡并绑定多个公网ip,实现利用多个ip访问公网服务。
实现方式: 申请多个阿里云弹性公网IP及多个弹性网卡,并将其绑定到ECS实例上。
流程
1. 购买弹性公网ip及弹性网卡,并绑定至ECS实例
具体流程可以参考官方文档。
配置完成后效果如下,申请了4个公网IP,并分别绑定至一个弹性网卡,四个弹性网卡在同一私网网段内。
如图,配置了四块网卡,私网ip分别为172.16.0.1, 172.16.0.2, 172.16.0.3, 172.16.0.4。
2. 配置路由策略
官方文档中提供的教程基于Netplan进行网卡配置,Netplan 是用于在使用 YAML 文件的 Linux 上配置网络接口的实用程序,从 Ubuntu 18.04 LTS 开始,Ubuntu 默认使用 Netplan 来配置网络接口。
在配置完成后,可能由于路由问题,导致无法连接公网,所以需要配置路由策略。
首先查看机器是否安装了iproute2,一般情况下都默认安装,如果没有安装,可以利用 apt install iproute2 命令安装。
然后打开路由表文件: vim /etc/iproute2/rt_tables
添加新的路由表 100 ~ 104:
## reserved values#255 local 254 main 253 default 0 unspec 100100# 主网卡101101# eth1102102# eth2103103# eth3104104# eth4## local##1 inr.ruhep
编辑 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg 文件:
network: {config: disabled}
然后编辑netplan配置文件,阿里云ubuntu默认配置在 /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by# the datasource. Changes to it will not persist across an instance.# To disable cloud-init's network configuration capabilities, write a file# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:# network: {config: disabled}network: version: 2 ethernets: eth0: match: macaddress: 00:xx:xx:xx:xx:bc set-name: eth0 addresses: -172.16.6.81/18 # 私有IP/子网掩码 gateway4: 172.16.63.253 # 网关, 只有一个网卡需要配置gateway4参数 nameservers: addresses: -8.8.8.8 -1.1.1.1 -8.8.4.4 -223.5.5.5 # 阿里云DNS-223.5.5.6 # 阿里云DNS routes: - to: 0.0.0.0/0 # 路由的目标地址。 via: 172.16.63.253 # 为通过路由的流量设置源 IP 地址。(网关) table: 100# eth0对应的路由表 routing-policy: - from: 172.16.6.81 # 主网卡私网ip,设置源 IP 地址以匹配此策略规则的流量。 table: 100# 路由表编号 priority: 300# 指定路由策略规则的优先级,以影响处理路由规则的顺序。# 数字越大,优先级越低:规则按优先级数字递增的顺序处理。 eth1: match: macaddress: 00:xx:xx:xx:xx:fa set-name: eth1 addresses: -172.16.0.1/18 nameservers: addresses: -8.8.8.8 -1.1.1.1 -8.8.4.4 -223.5.5.5 -223.5.5.6 routes: - to: 0.0.0.0/0 via: 172.16.63.253 # 网关 table: 101# eth1对应的路由表 routing-policy: - from: 172.16.0.1 # eth1私网ip table: 101 priority: 300 eth2: match: macaddress: 00:xx:xx:xx:xx:51 set-name: eth2 addresses: -172.16.0.2/18 nameservers: addresses: -8.8.8.8 -1.1.1.1 -8.8.4.4 -223.5.5.5 -223.5.5.6 routes: - to: 0.0.0.0/0 via: 172.16.63.253 table: 102 routing-policy: - from: 172.16.0.2 table: 102 priority: 300 eth3: match: macaddress: 00:xx:xx:xx:xx:1f set-name: eth3 addresses: -172.16.0.3/18 nameservers: addresses: -8.8.8.8 -1.1.1.1 -8.8.4.4 -223.5.5.5 -223.5.5.6 routes: - to: 0.0.0.0/0 via: 172.16.63.253 table: 103 routing-policy: - from: 172.16.0.3 table: 103 priority: 300 eth4: match: macaddress: 00:xx:xx:xx:xx:a5 set-name: eth4 addresses: -172.16.0.4/18 nameservers: addresses: -8.8.8.8 -1.1.1.1 -8.8.4.4 -223.5.5.5 -223.5.5.6 routes: - to: 0.0.0.0/0 via: 172.16.63.253 table: 104 routing-policy: - from: 172.16.0.4 table: 104 priority: 300
配置完成后,输入 netplan apply以应用网络配置。
利用 route -n 查看路由情况:
3. 测试网络连通性
运行 curl cip.cc --interface 私网ip可查看对应的网卡ip,检查网络连通性。
参考
普通模式下实现ECS绑定多EIP - 弹性公网 IP - 阿里云
How to Configure Multiple Network Interfaces