如何在 Ubuntu EC2 实例中使用辅助网络接口?
我想让我的辅助网络接口在我的 Ubuntu Amazon Elastic Compute Cloud(Amazon EC2)实例中运行。
简短描述
**警告:**辅助弹性网络接口的使用适用于高级用户。此解决方案仅用于以下用例: 您不能使用单个网络接口,必须将来自同一子网的两个网络接口连接到一个实例。为避免非对称路由问题,请使用单个弹性网络接口,或将重复的弹性网络接口放入非重叠子网中。或者,使用 Ubuntu 24.04 LTS 或更高版本。
向非 Amazon Linux EC2 实例添加辅助网络接口会导致流量问题。之所以出现这些问题,是因为主网络接口和辅助网络接口位于同一个子网中,并且只有一个路由表和一个网关。进入辅助网络接口的流量使用主网络接口来离开实例。由于辅助 IP 地址不属于主网络接口的 MAC 地址,因此辅助接口不起作用。
**注意:**对于 Ubuntu 24.04,不需要执行以下步骤。Ubuntu 24.04 会自动处理这种高级配置。
要在创建辅助接口后使其正常工作,请完成以下步骤:
- 配置路由表。
- 在自定义路由表策略数据库中设置规则,以便辅助接口的流量使用新的路由表。
在开始之前,请注意,Amazon EC2 实例位于 AWS 云中,因此并非所有用例都受益于多个接口。以下示例显示了何时可能不需要使用辅助网络接口:
- 若想提高网络吞吐量,请执行以下操作: 由于限制是根据实例类型和大小设置的,因此网络吞吐量不会增加。有关更多信息,请参阅 Amazon EC2 实例类型。
- 要增加弹性 IP 地址,请执行以下操作: 如果每个接口的弹性 IP 地址很少,则可能不需要添加更多接口来获得更多的弹性 IP 地址。大多数应用程序都能很好地与域名系统配合使用。例如,Apache 可以使用基于名称的虚拟主机。有关更多信息,请参阅 Apache 网站上的 Name-based virtual host support。
**注意:**对于以下每个 Ubuntu 版本,添加辅助网络接口的步骤都不同:
- Ubuntu 14.04
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Ubuntu 22.04
解决方法
**注意:**尽管以下解决方案中的步骤是在列出的 Linux 版本上测试的,但您可能需要修改配置的自定义设置。所有步骤都必须以根用户权限运行。要么使用 sudo-i 成为根用户,要么使用 sudo 运行所有命令。
配置 Ubuntu 14.04 或 16.04
您可以使用单个文件创建辅助接口配置文件,配置路由表,然后为 Ubuntu 设置路由策略规则。
要配置 Ubuntu 14.04 或 16.04,请完成以下步骤:
-
要获取主网络接口的名称,请运行以下命令:
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
-
为辅助接口创建配置文件:
vi /etc/network/interfaces.d/51-eth1.cfg
**注意:**更改 eth1 以匹配您的辅助接口名称。
以下命令是单个 IP 地址 172.31.21.115 以及辅助接口上网关为 172.31.16.1 的示例:
auto eth1iface 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 地址。
以下命令是多个 IP 地址的示例。在此示例中,IP 地址为 172.31.21.115 和 172.31.18.46,网关为 172.31.16.1:
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
**注意:**用您自己的信息替换示例 IP 地址和网关。
-
创建 restrict-default-gw 文件以防止主表上的默认网关被覆盖:
vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
-
将以下行添加到 restrict-default-gw 文件中:
case ${interface} in eth0) ;; *) unset new_routers ;; esac
**注意:**将 eth0 替换为您的主接口名称。
-
重启网络。
对于 Ubuntu 14.04,运行以下命令:
(ifdown eth1 && ifup eth1)
对于 Ubuntu 16.04,运行以下命令:
systemctl restart networking
配置 Ubuntu 18.04、20.04 和 22.04
Ubuntu 18.04、20.04 和 22.04 使用 Netplan 网络配置。请注意,Netplan 使用 YAML 格式。这种 YAML 格式意味着缩进至关重要。以下 Netplan 示例使用双空格缩进。
要配置 Ubuntu 18.04、20.04 和 22.04,请完成以下步骤:
-
为辅助接口创建配置文件:
vi /etc/netplan/51-eth1.yaml
-
将以下行添加到 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 范围,请完成以下步骤:
- 打开 Amazon EC2 控制台 ,选择实例,然后选择实例。
- 在网络选项卡上,滚动到网络接口,然后记下辅助网络接口的子网 ID。
- 打开Amazon Virtual Private Cloud (Amazon VPC) 控制台,选择子网,然后记下为子网 ID 列出的 IPv4 CIDR 范围。
- 要应用网络配置,请运行以下命令:
netplan --debug apply
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 10 个月前
- AWS 官方已更新 5 个月前