阿里云 Ubuntu20.04 配置单机多公网IP访问外部服务

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
公网NAT网关,每月750个小时 15CU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 在同一台阿里云 ECS Ubuntu 20.04服务器上配置多网卡并绑定多个公网ip,实现利用多个ip访问公网服务。

背景

需求是在同一台阿里云 ECS Ubuntu 20.04服务器上配置多网卡并绑定多个公网ip,实现利用多个ip访问公网服务。


实现方式: 申请多个阿里云弹性公网IP及多个弹性网卡,并将其绑定到ECS实例上。


流程

1. 购买弹性公网ip及弹性网卡,并绑定至ECS实例

具体流程可以参考官方文档

配置完成后效果如下,申请了4个公网IP,并分别绑定至一个弹性网卡,四个弹性网卡在同一私网网段内。

1.png

如图,配置了四块网卡,私网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 来配置网络接口。

在配置完成后,可能由于路由问题,导致无法连接公网,所以需要配置路由策略。

2.png

首先查看机器是否安装了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.png

3. 测试网络连通性

运行 curl cip.cc --interface 私网ip可查看对应的网卡ip,检查网络连通性。

4.png

参考

普通模式下实现ECS绑定多EIP - 弹性公网 IP - 阿里云

How to Configure Multiple Network Interfaces

Netplan Reference | Netplan


image.png1.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
高可用应用架构
欢迎来到“高可用应用架构”课程,本课程是“弹性计算Clouder系列认证“中的阶段四课程。本课程重点向您阐述了云服务器ECS的高可用部署方案,包含了弹性公网IP和负载均衡的概念及操作,通过本课程的学习您将了解在平时工作中,如何利用负载均衡和多台云服务器组建高可用应用架构,并通过弹性公网IP的方式对外提供稳定的互联网接入,使得您的网站更加稳定的同时可以接受更多人访问,掌握在阿里云上构建企业级大流量网站场景的方法。 学习完本课程后,您将能够: 理解高可用架构的含义并掌握基本实现方法 理解弹性公网IP的概念、功能以及应用场景 理解负载均衡的概念、功能以及应用场景 掌握网站高并发时如何处理的基本思路 完成多台Web服务器的负载均衡,从而实现高可用、高并发流量架构
相关文章
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
142 2
|
4月前
|
网络协议 Ubuntu 网络安全
|
4月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
153 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
4月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
1058 3
|
4月前
|
开发框架 缓存 Ubuntu
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
65 3
|
4月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
84 1
|
5天前
|
缓存 Ubuntu Linux
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
54 25
|
15天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
241 15
|
1月前
|
弹性计算 Ubuntu Java
OS-Copilot-ubuntu镜像版本的具体测试使用(安装方式有单独注明)
作为一名个人开发者,我主要负责云资源的运维和管理。在使用OS Copilot的过程中,我遇到了一些配置问题,特别是在ECS实例中设置AccessKey时,但最终成功解决了。通过使用OS Copilot的-t/-f/管道功能,我大大提升了效率,减少了命令编写的工作量,特别是在搭建Java运行环境时效果显著。此外,| 功能帮助我快速理解文档,整体体验非常流畅,推荐给其他开发者使用。
43 6
|
2月前
|
JSON Ubuntu 开发者
ubuntu 22安装lua环境&&编译lua cjson模块
通过上述步骤,可以在 Ubuntu 22.04 系统上成功安装 Lua 环境,并使用 LuaRocks 或手动编译的方式安装 lua-cjson 模块。本文详细介绍了每一步的命令和操作,确保每一步都能顺利完成,适合需要在 Ubuntu 系统上配置 Lua 开发环境的开发者参考和使用。
219 13