如何配置在 Outposts 服务器上运行的 EC2 实例的 LNI?
我想在 Amazon Elastic Compute Cloud (Amazon EC2) 实例的操作系统 (OS) 中配置本地网络接口 (LNI)。我的 EC2 实例在 AWS Outposts 服务器上运行。
简短描述
当您在 Outposts 服务器实例的操作系统中配置网络时,请完成以下任务:
- 为 LNI 分配 IP 地址。
- 将路由配置为使用 LNI 和本地网络的网关。
- 配置基于策略的路由,使用本地网络的网关来传输来自 LNI 的流量。
要在实例的操作系统中配置网络接口,请完成以下步骤:
- 识别并激活与 LNI 关联的网络设备。
- (可选)为 LNI 分配静态 IP 地址。
- 配置接口路由和规则。
- 让所做的更改永久生效。
解决方法
以下解决方法适用于下列操作系统发行版:
- **Linux:**Amazon Linux 2、Amazon Linux 2023、Red Hat Enterprise Linux (RHEL) 8、RHEL9、SUSE 12、SUSE 15、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04
- **Windows:**Windows Servers 2008 R2 及更高版本
先决条件
**注意:**在以下步骤中,将下列示例值替换为您的值:
- eth1 替换为 LNI 的设备名称。
- 192.168.59.11/24 替换为您要分配给 LNI 的 IP 地址。
- 192.168.59.255 替换为您的本地网络的广播地址。
- 192.168.59.254 替换为您的本地网络的网关。
- 8.8.8.8/32 替换为外部 IP 地址或子网。
- 8.8.8.8 替换为您的外部 IP 地址。
- 255.255.255.255 替换为您的掩码
- ens6 替换为 LNI 的设备名称
- 0a:64:7a:00:4f:92 替换为 LNI 的 MAC 地址。
- 192.168.59.11/24 替换为以 CIDR 表示法分配给 LNI 的静态 IP 地址。
- 192.168.59.0/24 替换为您的本地网络的 CIDR。
- 24 替换为本地网络的前缀。
- Wired connection 1 替换为连接名称。
识别并激活与 LNI 关联的网络设备
完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格的 Instances(实例)下,选择 Instances(实例)。
- 选取在 Outposts 服务器上运行的实例。
- 在 Networking(网络)部分的 Network Interfaces(网络接口)下,选取 LNI 的接口 ID。
- 在 IP addresses(IP 地址)下,记下 LNI 的 MAC 地址。
登录到您的实例的操作系统,然后完成以下步骤:
Linux
-
(对于 RHEL8 和 RHEL9)关闭 nm-cloud-setup.service 和 nm-cloud-setup.timer,以免系统使用 Amazon EC2 控制台中可见的 IP 地址来自动配置 LNI:
$ sudo systemctl disable --now nm-cloud-setup.service nm-cloud-setup.timer -
运行以下命令来显示网络设备的 MAC 地址:
# sudo ip link show | egrep -o "(^[0-9]:.*:)|([0-9a-f]{2}:)+[0-9a-f]{2}" -
记下与连接到 LNI 的设备具有相同的 MAC 地址的网络设备名称。如果接口已关闭,则运行以下命令将其激活:
sudo ip link set dev eth1 up
Windows
-
以管理员身份运行以下命令来显示网络设备的 MAC 地址:
getmac /v -
查找与连接到 LNI 的设备具有相同 MAC 地址的网络设备。
-
查看与 LNI 关联的适配器的适配器设置。要验证适配器是否已开启,请选择 Network and Sharing Center(网络和共享中心),然后选择 Change adapter settings(更改适配器设置)。
(可选)为您的 LNI 分配静态 IP 地址
注意:如果您在本地网络中使用 DHCP,请继续执行配置 LNI 接口路由和规则步骤。如果您使用 RHEL8 和 RHEL9,请继续执行让所做的更改永久生效步骤。
完成以下步骤:
Linux
向识别为 LNI 的网络接口分配 IP 地址:
# sudo ip addr add 192.168.59.11/24 brd 192.168.59.255 dev eth1
Windows
参阅如何为 Amazon EC2 Windows 实例分配静态 IP 地址?
**注意:**默认网关分配会给主网络适配器。要保留主弹性网络接口的默认网关,请勿为 LNI 指定默认网关。而是应为指定本地网络网关的目的地定义静态路由。
配置 LNI 接口路由和规则
注意:如果您使用 RHEL8 和 RHEL9,请继续执行让所做的更改永久生效步骤。
完成以下步骤:
Linux
-
打开您的实例的操作系统。
-
在 /etc/iproute2/rt_tables 中为路由表 LNI 创建 ID 为 300 的记录以供 LNI 使用:
# echo "300 LNI" | sudo tee -a /etc/iproute2/rt_tables -
创建一条规则,检查 LNI 表中是否有来自 LNI 所在本地网络的 CIDR 的流量:
# sudo ip rule add from 192.168.59.0/24 table LNI**注意:**如果您使用静态 IP 地址,则根据单个 IP 地址(而不是整个本地网络)来定义规则。如果您为 LNI 分配了多个 IP 地址并希望使用不同的规则,则根据单个 IP 地址来定义规则。
-
在 LNI 表中创建默认路由:
# sudo ip route add default via 192.168.59.254 dev eth1 table LNI -
为外部 IP 地址或子网的出站流量创建路由。将出站流量配置为使用本地网络的网关来流经 LNI:
# sudo ip route add 8.8.8.8/32 via 192.168.59.254 dev eth1
Windows
-
打开您的实例的操作系统。
-
以管理员身份打开命令提示符窗口。
-
创建路由,强制外部 IP 地址或子网的出站流量使用本地网关的网络:
route ADD 8.8.8.8 MASK 255.255.255.255 192.168.59.254 -
重复上述步骤,为每个可以联系 LNI 的外部 IP 地址或子网添加路由。使用本地网络的网关并根据您的本地网络配置和防火墙规则来配置这些路由。
让所做的更改永久生效
**注意:**以下示例配置基于前几节中的步骤,包括将静态 IP 地址分配给 LNI。根据您的网络配置和用例来替换这些值。
根据您的操作系统发行版,完成以下步骤:
Amazon Linux 2023
-
打开您的实例的操作系统。
-
根据您的 LNI 配置要求,在 /etc/systemd/network/ 中创建一个新文件:
sudo vi /etc/systemd/network/20-ens6.network [Match] MACAddress=0a:64:7a:00:4f:92 [Link] Description=LNI Outposts Server Name=ens6 [Network] Address=192.168.59.11/24 [RoutingPolicyRule] From=192.168.59.0/24 Table=300 [Route] Destination=8.8.8.8/32 Gateway=192.168.59.254 [Route] Destination=0.0.0.0/0 Gateway=192.168.59.254 Table=300 -
重新启动 systemd-networkd 服务以应用配置,然后测试连接:
sudo systemctl restart systemd-networkd -
重新启动系统以确保配置得到成功应用。
Amazon Linux 2
-
打开您的实例的操作系统。
-
关闭 amazon-ec2-net-utils 软件包为 LNI 的网络设备提供的自动化功能:
sudo sed -i -e 's/^EC2SYNC=yes/EC2SYNC=no/' /etc/sysconfig/network-scripts/ifcfg-eth1 -
检查 ifcfg-<LNI_name> 文件,然后应用您的配置:
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BOOTPROTO=static ONBOOT=yes TYPE=Ethernet USERCTL=yes HWADDR=0a:0b:6b:85:88:7c IPADDR="192.168.59.11" PREFIX=24 EC2SYNC=no -
在您的配置文件 /etc/sysconfig/network-scripts/route-<LNI_name> 中,根据您的 LNI 配置要,添加路由:
sudo vi /etc/sysconfig/network-scripts/route-eth1 0.0.0.0/0 via 192.168.59.254 dev eth1 table LNI 8.8.8.8/32 via 192.168.59.254 dev eth1**注意:**如果文件不存在,则前面的命令会创建一个配置文件。
-
在 /etc/sysconfig/network/ifroute-<LNI_name> 配置文件中创建一条规则,让网络设备使用 LNI 表来处理来自 CIDR 的流量:
# sudo vi /etc/sysconfig/network-scripts/rule-eth1 from 192.168.59.0/24 lookup LNI**注意:**如果您使用静态 IP 地址,则根据单个 IP 地址(而不是整个本地网络)来定义规则。或者,如果您为 LNI 分配了多个 IP 地址并希望使用不同的规则,则根据单个 IP 地址来定义规则。
-
重新启动系统以确保配置得到成功应用。
RHEL 8 和 RHEL 9
**注意:**有关网络设备命名的最佳实践,请参阅红帽网站上的为 RHEL 8 实施一致的网络接口命名和为 RHEL 9 实施一致的网络接口命名。
-
打开您的实例的操作系统。
-
关闭 nm-cloud-setup.service 和 nm-cloud-setup.timer:
$ sudo systemctl disable --now nm-cloud-setup.service nm-cloud-setup.timer -
在 /etc/iproute2/rt_tables 中为路由表 LNI 创建 ID 为 300 的记录以供 LNI 使用:
# echo "300 LNI" | sudo tee -a /etc/iproute2/rt_tables -
要查找与 LNI 设备相关的连接名称,请运行以下命令:
$ sudo nmcli connection show -
要将连接名称更改为 LNI,请运行以下命令:
$ sudo nmcli connection modify "Wired connection 1" connection.id "LNI" -
要将您的连接配置为在启动时自动连接并关闭默认网关,请运行以下命令:
$ sudo nmcli connection modify "LNI" connection.autoconnect true ipv4.never-default yes -
如果您使用静态 IP 地址,则使用 nmcli 将其永久设置供 LNI 接口使用:
$ sudo nmcli connection modify "LNI" ipv4.method manual ipv4.addresses 192.168.59.11/24 -
激活 LNI 连接:
$ sudo nmcli conn up LNI -
使用 nmcli 创建永久路由:
$ sudo nmcli connection modify "LNI" ipv4.routes "0.0.0.0/0 192.168.59.254 table=300" $ sudo nmcli connection modify "LNI" +ipv4.routes "8.8.8.8/32 192.168.59.254" -
在配置文件中创建永久规则。将网络设备配置为使用 LNI 表来传输来自 CIDR 的流量。
-
重新启动系统以确保配置得到成功应用。
SUSE12 和 15
-
打开您的实例的操作系统。
-
查看您的 udev 规则。要保持 LNI 设备名称与其 MAC 地址相绑定,规则必须以 LNI 的 MAC 地址为基础:
sudo cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /usr/lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # hotplug net device SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="0a:0b:6b:85:88:7c", KERNEL=="eth*", NAME="eth1" -
根据您的用例,配置 LNI:
# sudo vi /etc/sysconfig/network/ifcfg-eth1 STARTMODE="auto" DEVICE="eth1" BOOTPROTO="static" IPADDR="192.168.59.11/24" CLOUD_NETCONFIG_MANAGE='no' -
在配置文件中,根据您的 LNI 配置要求,将路由添加到 /etc/sysconfig/network/ifroute-<LNI_name>:
# sudo vi /etc/sysconfig/network/ifroute-eth1 0.0.0.0/0 192.168.59.254 - eth1 table LNI 8.8.8.8/32 192.168.59.254 - eth1 -
在 /etc/sysconfig/network/ifrule-<LNI_name> 配置文件中创建规则。将网络设备配置为使用 LNI 表来传输来自 CIDR 的流量。
# sudo vi /etc/sysconfig/network/ifrule-eth1 from 192.168.59.0/24 lookup LNI**注意:**如果您使用静态 IP 地址,则根据单个 IP 地址(而不是整个本地网络)来定义规则。或者,如果您为 LNI 分配了多个 IP 地址并希望使用不同的规则,则根据单个 IP 地址来定义规则。
-
重新启动系统以确保配置得到成功应用。
Ubuntu 18.04、Ubuntu 20.04 和 Ubuntu 22.04
-
打开您的实例的操作系统。
-
根据您的 LNI 配置要求,在 /etc/netplan/ 中创建一个新文件:
sudo vi /etc/netplan/51-ens6.yaml network: version: 2 renderer: networkd ethernets: ens6: dhcp4: false dhcp4-overrides: use-dns: false route-metric: 100 dhcp6: false match: macaddress: 0a:0b:6b:85:88:7c set-name: ens6 addresses: [192.168.59.11/24] routes: - to: 0.0.0.0/0 via: 192.168.59.254 table: 300 - to: 8.8.8.8/32 via: 192.168.59.254 routing-policy: - from: 192.168.59.0/24 table: 300 -
要限制访问 /etc/netplan/ 中的网络配置文件,请修改文件权限:
$ sudo chmod 600 /etc/netplan/*.yaml -
使用 netplan 来应用配置,然后测试连接:
sudo netplan apply -
重新启动系统以确保配置得到成功应用。
Windows(任意版本)
-
打开您的实例的操作系统。
-
以管理员身份打开命令提示符窗口。
-
创建永久路由,强制外部 IP 或子网的出站流量使用本地网络的网关:
route -p ADD 8.8.8.8 MASK 255.255.255.255 192.168.59.254 -
重复上述步骤,为每个可以联系 LNI 的外部 IP 地址和子网添加永久路由。使用本地网络的网关并根据您的本地网络配置和防火墙规则来配置这些路由。
