作者:MeshCloud脉时云公有云架构师 严大淇
引言
默认情况下,VPC 网络中的每个虚拟机实例只有一个网络接口,一个公网IP。但是,您可以配置具有多个网络接口的实例,通过此功能,可以让单台服务器具备多网络接口。在网络接口绑定公网IP后,相当于单台云服务器具备了多个公网IP。通过该⽅案,可以让用户更⾼效地使⽤云服务器的计算能⼒。
整体架构
单台实例添加多个网络接口,再添加公网IP到网络接口上
目标
实现单台实例通过不同的公网IP访问到公网,公网也能访问到实例上的多个公网IP
准备工作
- 在创建实例之前,请验证是否已创建所有必需的网络。如果您需要创建网络,请参阅创建和修改虚拟私有云 (VPC) 网络。
- 验证每个网络是否具有适当的防火墙规则(允许您要允许进出具有多个接口的虚拟机的流量)。如果您需要创建防火墙规则,请参阅使用防火墙规则。
- 如果您使用 IPv6 地址将虚拟机连接到多个网络,请安装 google-guest-agent 版本 20220603.00 或更高版本。如需了解详情,请参阅我无法连接到次要接口的 IPv6 地址。
实施步骤
本实践流程会根据一台CentOS云服务器配置两个公网IP场景进行具体的操作介绍。
大概的流程⾛势:
创建子网———创建实例配置网卡及公网IP———配置政策路由 |
1、创建VPC和子网
根据⾃身情况先规划好相关⽹段,这里子网是172.31.0.0/20
2、创建实例配置多网络接口
对于Primary internal IP,选择以下选项之一:
- Ephemeral,可分配新的临时 IPv4 地址
- 列表中的预留 IPv4 地址
- Static,可分配新的静态 IPv4 地址
对于External IPv4 address,选择以下选项之一:
- Ephemeral,可分配新的临时 IPv4 地址
- None,不分配外部 IPv4 地址
- 列表中的预留 IPv4 地址
- Create new IP address,可分配新的静态 IPv4 地址
创建实例IP信息如图:
此时默认的nic0是可以ping通的,但是新配置的nic1不通
3、配置政策路由
配置如下:
echo “1 rt1” | sudo tee -a /etc/iproute2/rt_tables (创建一条rt1路由表,如果添加第二个网络接口,需要改编号,如 “2 rt2” )
sudo ip route add GATEWAY src IP_ADDRESSdev NIC table rt1 (设置发到网关的网络包源地址)
sudo ip route add default via GATEWAY dev NIC table rt1 (添加默认网关)
sudo ip rule add from IP_ADDRESS/PREFIX_LENGTH table rt1 (通过rt1路由表路由来自IP_ADDRESS/PREFIX_LENGTH的数据包)
sudo ip rule add to IP_ADDRESS/PREFIX_LENGTH table rt1 (通过rt1路由表路由发送到IP_ADDRESS/PREFIX_LENGTH的数据包)
替换以下内容:
- NIC:要为其添加路由的网络接口。例如 eth1。
- IP_ADDRESS:接口上配置的 IP 地址。
- GATEWAY:接口的默认网关 IP 地址。
- PREFIX_LENGTH:已配置的 IP 地址的前缀长度。
示例:
连接到服务器,输入命令:
echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables
sudo ip route add 172.31.0.1 src 172.31.0.2 dev eth1 table rt1
sudo ip route add default via 172.31.0.1 dev eth1 table rt1
sudo ip rule add from 172.31.0.2/32 table rt1
sudo ip rule add to 172.31.0.2/32 table rt1
验证
1、Ping测试
2、wget绑定IP测试
补充
1、只能在创建实例时配置网络接口。
2、虚拟网络接口数量根据 vCPU 数量扩缩,最小 2 个,最多 8 个。
3、实例和子网必须在同一地域,可以是不同可用区。
4、不能将多个网络接口连接到同一个 VPC 网络
参考文档:https://cloud.google.com/vpc/docs/create-use-multiple-interfaces#max-interfaces举报