亚马逊提供了有关如何在 RHEL 7 和 Centos 7 上启用 IPv6 的说明:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-migrate-ipv6.html#ipv6-dhcpv6-rhel
这些说明适用于 RHEL 7-7.3 和 Centos 7-7.3,但不适用于 RHEL 7.4(并且大概也不适用于 Centos 7.4,当它可用时)。
问题在于该文件/etc/sysconfig/network-scripts/ifcfg-eth0
在旧版本中是用户可写的,但在 RHEL 7.4 中,该文件由 cloud-init 管理。
$ sed 1q /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
我发现,仅仅从 7.3 升级到 7.4 就需要对网络管理进行如此根本性的改变,这非常出乎意料。我不确定这个变化是否特定于 Amazon EC2,我在 RHEL 7.4 发行说明中找不到任何内容,所以它可能是特定于 Amazon 的。
那么如何在 cloud-init 模型中在 RHEL 7.4 和 Centos 7.4 上启用 IPv6?
答案1
在 RHEL 7.4 或 CentOS 7 上配置 DHCPv6
- 使用实例的公有 IPv4 地址连接到您的实例。
使用您选择的文本编辑器创建一个自定义文件,例如:
/etc/cloud/cloud.cfg.d/99-custom-networking.cfg
将以下行添加到您的文件中,然后保存更改:
network: version: 1 config: - type: physical name: eth0 subnets: - type: dhcp6
重启您的实例。
重新连接到您的实例并使用 ifconfig 命令验证网络接口上是否配置了 IPv6 地址。
来源:https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-migrate-ipv6.html#ipv6-dhcpv6-rhel
答案2
我找到了一个很好的解决方案。我一直使用 terraform 启动我的实例并使用 cloud-init 用户数据对其进行初始配置,以下 EC2 用户数据文件对我来说效果很好:
#cloud-config
preserve_hostname: false
hostname: centos-01
fqdn: centos-01.example.com
manage_etc_hosts: true
write_files:
- path: /etc/cloud/cloud.cfg.d/99-custom-networking.cfg
owner: root:root
permissions: 0600
content: |
network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: dhcp
- type: dhcp6
power_state:
mode: reboot
delay: now
message: Rebooting post-config
timeout: 30
condition: True
此配置的重要部分是write_files
部分,它安装适当的 cloud-init 配置以启用 IPv6,然后power_state
触发立即的配置后重启,然后应用网络配置更改。
重启后,网络配置如下:
[centos@centos-01 ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=eth0
DHCPV6C=yes
IPV6INIT=yes
IPV6_AUTOCONF=no
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
我对这个解决方案很满意,尽管我不太清楚为什么我不能直接在用户数据中指定网络配置,而必须将其写入文件并重新启动。无论如何,这很有效,而且相当轻松。
答案3
设置网络的 cloud-init 脚本在首次启动时运行一次。如果您能找出哪个模块设置了它,您可以尝试在文件, always
中的名称后附加它/etc/cloud/cloud.cfg
,并在为您的 EC2 实例分配 IPv6 地址后重新启动。
如果你希望正确设置 IPv6,请确保你的子网设置为自动分配IPv6 地址。为此,请在子网列表中右键单击您的子网,然后选择“修改自动分配 IP 设置”。
最后,当它起作用时,我看到的内容如下/etc/sysconfig/network
:
NOZEROCONF=yes
DEVTIMEOUT=10
# Created by cloud-init on instance boot automatically, do not edit.
#
NETWORKING=yes
NETWORKING_IPV6=yes
IPV6_AUTOCONF=no
以及/etc/sysconfig/network-scripts/ifcfg-eth0
:
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=eth0
DHCPV6C=yes
HWADDR=xx:xx:xx:xx:xx:xx
IPV6INIT=yes
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
答案4
我最终找到了该问题的解决方案。
我们需要添加外部 IPv6 地址,/etc/sysconfig/network-scripts/ifcfg-eth0
如下所示;
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp
DEVICE=eth0
DHCPV6C=yes
IPV6INIT=yes
IPV6ADDR="xxxx:xxxx:xxxx:xxx:xx:xxx:xx" <--add the external IPv6 here
ONBOOT=yes
TYPE=Ethernet
USERCTL=no