ECS弹性网卡+弹性公网IP配置最佳实践之策略路由

简介: 目前阿里云ECS部分机型可以配置多张网卡(一张原生网卡+若干张弹性网卡),用来实现业务上对于系统内多网卡的需求,详细可以参考 【新功能】弹性公网IP绑定弹性网卡新功能及最佳实践 。在使用过程中,可能会遇到多个弹性公网IP绑定到一个ECS上的原生网卡、弹性网卡上后无法通信的问题,这个时候需要检查系统内的路由配置和策略(policy rules)。

作者:霄翎

概述

目前阿里云ECS部分机型可以配置多张网卡(一张原生网卡+若干张弹性网卡),用来实现业务上对于系统内多网卡的需求,详细可以参考 【新功能】弹性公网IP绑定弹性网卡新功能及最佳实践
。在使用过程中,可能会遇到多个弹性公网IP绑定到一个ECS上的原生网卡、弹性网卡上后无法通信的问题,这个时候需要检查系统内的路由配置和策略(policy rules)。

从route路由表说起

默认情况下,linux系统中都会有一张路由表,使用route或ip route就可以进行查看,如

 default via 172.16.127.253 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1002
172.16.112.0/20 dev eth0 proto kernel scope link src 172.16.115.242
AI 代码解读

以上起到关键作用的是第一行路由,它声明了一条默认路由,从eth0网卡中出去,目标是网关172.16.127.253。在只有一张网卡的实例中,这样的配置是没有问题的,但如果有多张网卡的情况下,入流量会从不同的网卡中进入实例,但出流量都会从eth0网卡中出去(譬如从外部ping 绑定在弹性网卡上的弹性公网IP,ICMP request包会从实例的弹性网卡中进入实例,而实例回复的ICMP reply包会从eth0中流出),导致出入路径不一致,会造成一系列的问题,如单网卡流量瓶颈、负载不均衡等问题。

真实的路由表

在linux系统中,实际上是有255张路由表的,默认使用的是254这张路由表,使用route命令展示的即是这张表中的路由条目。除此之外的路由表我们可以对它进行适当的配置,以实现自定义或高级需求。

我们可以使用ip route list table [table index]来查看系统内的路由表条目,如

[root@xiaoling-hz-test ~]# ip route list table 254
default via 172.16.127.253 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1002
172.16.112.0/20 dev eth0 proto kernel scope link src 172.16.115.242
AI 代码解读

以上条目可以看到系统内默认的254号路由表内的条目,另外,还可以将index置为0来查看系统内所有的路由条目,这在需要循环遍历系统内自定义路由表时非常有用。

PS. table==253这张路由表被系统默认为是default表,建议使用1-252号路由表来添加自定义的路由条目。被linux预先定义的路由表详情可以查看系统内/etc/iproute2/rt_tables,以下是一个示例,可以看到253 - 255已经被系统定义:

# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
AI 代码解读

策略路由

为什么会需要多张路由表呢?这不得不提到策略路由,目前我们需要实现的功能是同进同出,保证从eth0口进来的包从eth0口出去,eth1进从eth1出,但弹性公网IP需要有一条默认路由来让ECS可以正常访问公网,但却又不能直接在默认路由表里添加两个目标网段是0.0.0.0,分别从eth0、eth1中出去的路由,这个时候策略路由就派上用场了,我们需要根据源地址进行策略选择。

简单来说就是配置两张路由表,路由表中分别有从eth0、eth1中出去的默认路由,在系统需要发包时,根据包的源IP进行选择,eth0的源IP就从包含eth0的路由表出去,eth1的源IP就从eth1的路由表走,从而实现同进同出。

linux系统内关于策略的索引是一个无符号的32位整型数值,所以理论上策略索引的数值可以达到4294967295之多,当然通常我们只需要使用个位数的索引条目即可。

具体的一个配置

以上说的都是理论,可能会有一些虚,下面我们来实际进行一个配置。我们特意选取阿里云官方尚未支持自动配置的镜像Ubuntu 16.04 64位来进行配置,以下是这个场景中相关参数:

ECS实例网关地址:172.16.127.253

==原生网卡信息==
名称:eth0
IP地址:172.16.116.38
绑定的弹性公网IP:47.99.42.x

==弹性网卡信息==
名称:eth1
IP地址:172.16.116.39
绑定的弹性公网IP:116.62.163.x
AI 代码解读

如何获得ECS实例完整的网卡信息

阿里云ECS控制台对于实例的网卡信息展示的不是很完全,建议通过API方法 DescribeNetworkInterfaces 来获取,若没有API调试环境,可以使用阿里云的API Explorer来调试,非常方便,以下是一个示例 URL ,点击后可以直接进入在线调试页面。

检查系统的默认配置

依次查看网卡、默认路由,可以看到系统内的配置残缺不全:

root@iZbp14bxrlofsqs3d5dw43Z:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:0c:72:5d brd ff:ff:ff:ff:ff:ff
    inet 172.16.116.38/20 brd 172.16.127.255 scope global eth0
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:16:3e:10:aa:7e brd ff:ff:ff:ff:ff:ff
AI 代码解读
root@iZbp14bxrlofsqs3d5dw43Z:~# ip route list table 254
default via 172.16.127.253 dev eth0
172.16.112.0/20 dev eth0  proto kernel  scope link  src 172.16.116.38
AI 代码解读

首先编辑/etc/network/interfaces文件,在最后加上关于eth1的定义,新添加的两行分别告诉系统在启动时自动拉起eth1、eth1的参数配置使用DHCP协议,详细的配置说明可以参考man interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet dhcp
AI 代码解读

保存后执行systemctl restart networking重启网络服务,可以看到eth1网卡已经配置上IP地址了:

root@iZbp14bxrlofsqs3d5dw43Z:~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:0c:72:5d brd ff:ff:ff:ff:ff:ff
    inet 172.16.116.38/20 brd 172.16.127.255 scope global eth0
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:10:aa:7e brd ff:ff:ff:ff:ff:ff
    inet 172.16.116.39/20 brd 172.16.127.255 scope global eth1
       valid_lft forever preferred_lft forever
AI 代码解读

接下去就需要配置策略路由了,针对这个场景,我们定义了以下信息:

==原生网卡==
使用路由表100,策略路由优先级索引为200
添加路由的命令(网关地址根据实际情况而定):ip route add default via 172.16.127.253 dev eth0 tab 100
添加策略的命令(源IP根据实际情况而定):ip rule add from 172.16.116.38 tab 100 priority 200

==弹性网卡==
使用路由表101,策略路由优先级索引为300
添加路由的命令(网关地址根据实际情况而定):ip route add default via 172.16.127.253 dev eth1 tab 101
添加策略的命令(源IP根据实际情况而定):ip rule add from 172.16.116.39 tab 101 priority 300
AI 代码解读

执行以上命令后,系统内策略路由就已经配好了,通过相关命令查看的结果如下(已经略去无关信息):

  root@iZbp14bxrlofsqs3d5dw43Z:~# ip route list table 0
default via 172.16.127.253 dev eth0  table 100
default via 172.16.127.253 dev eth1  table 101
default via 172.16.127.253 dev eth0
172.16.112.0/20 dev eth0  proto kernel  scope link  src 172.16.116.38
172.16.112.0/20 dev eth1  proto kernel  scope link  src 172.16.116.39
AI 代码解读
root@iZbp14bxrlofsqs3d5dw43Z:~# ip rule list
0:      from all lookup local
200:    from 172.16.116.38 lookup 100
300:    from 172.16.116.39 lookup 101
32766:  from all lookup main
32767:  from all lookup default
AI 代码解读

可以看到系统中增加了table==100、101的两张路由表,增加了200、300两个优先级的策略,分别指定eth0、eth1出入的规则,这样就可以做到一张网卡同进同出了。

持久化配置

以上的配置,除了网卡的IP信息可以持久化,其他的配置如路由、策略都会在重启后失效,可以把以上命令写到系统的配置文件中。理论上更优雅的方法是在/etc/sysconfig/network-scripts/ (CentOS) 、 /etc/network/ (Ubuntu)目录下将命令写到特定的文件中来解决这个问题,但无奈无法测试所有的场景,我采取了比较“暴力”的方法来统一的解决:将命令写到/etc/rc.local文件中,可以无视发行版。

比如本文中的场景,就可以将四条ip route/ip rule命令添加到rc.local中:

root@iZabcdeZ:~# vim /etc/rc.local

ip route add default via 172.16.127.253 dev eth0 tab 100
ip rule add from 172.16.116.38 tab 100 priority 200
ip route add default via 172.16.127.253 dev eth1 tab 101
ip rule add from 172.16.116.39 tab 101 priority 300
AI 代码解读

阿里云原生的做法

查看阿里云官方关于配置 ECS 实例的弹性网卡的说明,以下几种镜像是可以直接支持不需要手工配置:

CentOS 7.3 64CentOS 6.8 64Windows Server 2016 数据中心版 64Windows Server 2012 R2 数据中心版 64
AI 代码解读

实际上CentOS系统内部也是采用了类似的策略来实现的,使用ip route和ip rule命令可以查看到响应的策略,只是路由表索引和策略路由的优先级序号有些许不同,各位可以实际验证一下。

参考文献

https://www.linuxjournal.com/article/7291

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
2
37
分享
相关文章
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
KingBase服务器优化:详解Kylin参数配置。
通过适当的调整和优化这些关键参数,你的Kylin可以运行得更加流畅和高效。就像一个经过精心调校的赛车,无论是在赛道的直道还是弯道上,都能展现出卓越的性能。希望这次深入参数“操控盘”的旅行,能让你更好地理解和优化你的Kylin配置。记住,优化是一个持续的过程,不断地试验和改进,你的Kylin才能越来越强大。
40 20
做网站如何选择云服务器?(一)配置篇
选择服务器需考虑网站规模、技术需求和地理位置。个人博客适合基础配置,企业官网需4核CPU、8GB内存,电商平台则需更高配置并配备负载均衡。技术上,展示型网站用PHP+MySQL,互动社区需Node.js/Python环境,视频类网站要大带宽。地理位置影响服务器选择,国内用户选腾讯云/阿里云,海外用户选AWS等。主流服务器类型包括虚拟主机(入门级)、云服务器(推荐)和物理服务器(高端需求)。云服务商普遍提供免费试用,便于评估性能。
52 1
【已解决】Matomo本地SMTP配置可以发邮件,但部署到阿里云ECS就发不了邮件
在阿里云ECS上使用Matomo和PHPMailer发送邮件时遇到问题,邮件无法发出且接口调用Pending。经过排查,发现是ECS安全组未开放25/465端口,导致SMTP请求无法正常通信。解决方法为在安全组中配置并开放25/465端口,从而恢复邮件发送功能。
在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
本文介绍了在阿里云ECS上使用Ubuntu系统安装和配置Docker及Docker Compose的详细步骤。通过这些工具,可以快速部署、弹性扩展和高效管理容器化应用,满足开发和运维需求。内容涵盖Docker的安装、镜像源配置、创建Web程序镜像以及使用Docker Compose部署WordPress等实际操作,并分享了使用体验,展示了阿里云实例的高性能和稳定性。
251 4
怎么根据自己的业务选择阿里云服务器配置大小?
本文指导如何根据业务需求精准选择阿里云服务器配置,涵盖个人轻量级至企业级、计算密集型等场景,推荐不同实例类型、存储与带宽方案,并提供成本优化策略,如包年包月节省成本、按需升级配置及选用性价比高的自研ARM架构实例。帮助用户在数字化转型中实现性能与成本的平衡。 注:以上配置与价格基于阿里云2025年官方数据,实际信息可能有所调整,请以官网实时页面为准。
2025年阿里云服务器配置选择全攻略:CPU、内存、带宽与系统盘详解
在2025年,阿里云服务器以高性能、灵活扩展和稳定服务助力数字化转型,提供轻量应用服务器、通用型g8i实例等多样化配置,满足个人博客至企业级业务需求。针对不同场景(如计算密集型、内存密集型),推荐相应实例类型与带宽规划,强调成本优化策略,包括包年包月节省成本、ESSD云盘选择及地域部署建议。文中还提及安全设置、监控备份的重要性,并指出未来可关注第九代实例g9i支持的新技术。整体而言,阿里云致力于帮助用户实现性能与成本的最优平衡。 以上简介共计238个字符。
阿里云国际站:阿里云服务器端口配置
悟空云@CloudWuKong阿里云是全球领先的云计算服务提供商,为用户提供弹性计算、数据库、存储、网络安全等一系列云计算服务。在使用阿里云服务器时,合理配置端口非常重要,可以提高服务器安全性和稳定性。
新手小白购买阿里云服务器省钱策略、配置选型与注意事项
针对初次使用阿里云服务器的用户,本文提供系统化的指导方案以优化成本并满足业务需求。首先介绍配置选型,包括实例类型(通用型、计算型、内存型)与基础配置建议;其次阐述省钱策略,如企业认证、合理选择计费模式及批量购买;最后提醒注意事项,涵盖带宽存储规划、地域网络优化及安全管理。新手可通过明确需求、选择配置、优化购买和持续监控四步快速上手,实现高效稳定的云端部署。 注:推荐配置基于2025年阿里云产品体系,具体信息请参考官网。
|
19天前
|
Windows系统云服务器配置多用户登录
本教程介绍了在Windows云服务器上配置远程桌面服务的详细步骤,包括安装桌面会话主机和远程桌面授权、允许多用户远程连接以及配置新用户并加入远程桌面用户组。通过添加角色和功能、设置组策略以及管理用户权限,实现多用户同时登录和远程访问。按照指引操作,可顺利完成服务器的远程访问配置,提升管理和使用效率。
43 0