如何让我的辅助网络接口在 Ubuntu EC2 实例中工作?
我想让辅助网络接口在 Ubuntu Amazon Elastic Compute Cloud(Amazon EC2)实例中工作?
简短描述
**警告:**第二个弹性网络接口专供高级用户使用。仅当您不能使用单个网络接口并且必须将来自同一子网的两个网络接口连接到一个实例时,才执行此操作。为避免出现不对称路由问题,请使用单个弹性网络接口,或将重复的弹性网络接口放入互不重叠的子网中。
将辅助网络接口添加到非 Amazon Linux EC2 实例会引起流量问题。这些问题发生的原因在于主要和辅助网络接口位于同一子网中,且有一个带一个网关的路由表。进入辅助网络接口的流量将使用主网络接口离开实例。但这种情况是不允许的,因为辅助 IP 地址不属于主网络接口的 MAC 地址。
要使辅助接口在创建后正常工作,请执行以下操作:
1. 配置路由表。
2. 在自定义路由表策略数据库中设置规则,以便辅助接口的流量使用新的路由表。
在开始之前,请注意 Amazon EC2 实例位于 AWS Cloud 中。这意味着并非所有用例都能受益于拥有多个接口。以下示例显示您可能不需要使用辅助网络接口的情况:
- 增加网络吞吐量:由于限制是根据实例类型和大小设置的,因此网络吞吐量不会增加。有关更多信息,请参阅 Amazon EC2 实例类型。
- 增加弹性 IP 地址:如果每个接口只有很少弹性 IP 地址,则您可能不需要添加更多接口即可获得更多弹性 IP 地址。大多数应用程序可以很好地与域名系统配合使用。例如,Apache 可以使用基于名称的虚拟主机(在 Apache 网站上)。
注意:为以下 Ubuntu 版本添加辅助网络接口的步骤各不相同:
- Ubuntu 14.04
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
解决方法
**注意:**尽管下列解决方法中的步骤已在列出的 Linux 版本上经过测试,但您可能需要对配置的自定义设置稍作修改。
配置 Ubuntu 14.04 或 16.04
您可以使用单个文件为 Ubuntu 创建辅助接口配置文件、配置路由表和设置路由策略规则。
所有过程必须使用根用户权限执行。使用 sudo -i 成为根用户,或者使用 sudo 运行所有命令。
1. 要获取主网络接口的名称,请运行以下命令:
ip a | grep ^[[:digit:]]
您会收到类似于以下消息的输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
**重要提示:**在本示例中,主接口的名称为 eth0、eth1,以此类推。但是,对于支持增强联网的实例,例如 m4 和 m5 系列类型,您可能会看到命名不一致的情况。例如,如果辅助接口命名为 eth0,主接口可能命名为 ens3。在实例运行时添加辅助接口会导致出现命名不一致的情况。
要避免命名不一致,在启动时添加接口,或者重启实例。或者如果接口正在运行,您可以使用以下命令来更改名称:
ip link set eth0 name ens4 && ip link set ens4 up
2. 为辅助接口创建一个配置文件。在以下示例中,更改 eth1 以匹配在第 1 步中发现的辅助接口名称:
vi /etc/network/interfaces.d/51-eth1.cfg
以下命令是一个示例,其中包含单个 IP 地址 172.31.21.115 和辅助接口上的网关 172.31.16.1。将示例 IP 地址和网关替换为您自己的 IP 地址和网关。另请注意,您的网关必须是您的子网中的第一个有效 IP 地址:
auto eth1 iface eth1 inet static address 172.31.21.115 netmask 255.255.240.0 # Gateway configuration up ip route add default via 172.31.16.1 dev eth1 table 1000 # Routes and rules up ip route add 172.31.21.115 dev eth1 table 1000 up ip rule add from 172.31.21.115 lookup 1000
以下命令是多 IP 地址的示例。在本示例中,IP 地址为 172.31.21.115 和 172.31.18.46,网关为 172.31.16.1。将示例 IP 地址和网关替换为您自己的 IP 地址和网关:
auto eth1 # Enter one or more IP settings iface eth1 inet static address 172.31.21.115 netmask 255.255.240.0 iface eth1 inet static address 172.31.18.46 netmask 255.255.240.0 # Default gateway for eth1 up ip route add default via 172.31.16.1 dev eth1 table 1000 # A route for every IP up ip route add 172.31.21.115 dev eth1 table 1000 up ip route add 172.31.18.46 dev eth1 table 1000 # A policy rule for every IP up ip rule add from 172.31.21.115 lookup 1000 up ip rule add from 172.31.18.46 lookup 1000
3. 创建 restrict-default-gw 文件以防止在主表上覆盖默认网关:
vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
4. 将以下行添加到 restrict-default-gw 文件。确保将 eth0 更改为在第 1 步中发现的主接口名称:
case ${interface} in eth0) ;; *) unset new_routers ;; esac
5. 重启网络。
请参阅以下 Ubuntu 14.04 命令:
(ifdown eth1 && ifup eth1)
请参阅以下 Ubuntu 16.04 命令:
systemctl restart networking
配置 Ubuntu 18.04 和 20.04
Ubuntu 18.04 和 20.04 使用 Netplan 联网配置。请注意,Netplan 使用 YAML 格式。这意味着缩进至关重要。以下 Netplan 示例使用两个空格的缩进。
**注意:**使用根用户权限运行所有命令。使用 sudo -i 成为根用户,或者使用 sudo 运行所有命令。
1. 为辅助接口创建一个配置文件:
vi /etc/netplan/51-eth1.yaml
2. 将以下行添加到 51-eth1.yaml 文件。务必对以下示例进行编辑,使其与您的使用案例匹配:
network: version: 2 renderer: networkd ethernets: eth1: addresses: - 172.31.24.153/20 - 172.31.28.195/20 dhcp4: no routes: - to: 0.0.0.0/0 via: 172.31.16.1 # Default gateway table: 1000 - to: 172.31.24.153 via: 0.0.0.0 scope: link table: 1000 - to: 172.31.28.195 via: 0.0.0.0 scope: link table: 1000 routing-policy: - from: 172.31.24.153 table: 1000 - from: 172.31.28.195 table: 1000
此示例 YAML 文件在辅助接口(eth1)上配置了两个 IP 地址。
**注意:**要查找在 YAML 文件中使用的 CIDR 范围,请完成以下步骤:
1. 打开 Amazon EC2 控制台,选择 Instances(实例),然后选择该实例。
2. 在 Networking(联网)选项卡上,滚动到 Network interfaces(网络接口)并记下辅助网络接口的子网 ID。
3. 打开 Amazon Virtual Private Cloud(Amazon VPC)控制台,选择 Subnets(子网),然后记下针对子网 ID 列出的 IPv4 CIDR 范围。
4. 应用网络配置:
netplan --debug apply
相关信息
相关内容
- AWS 官方已更新 3 年前