Amazon предоставляет инструкции по включению IPv6 на RHEL 7 и Centos 7: 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.
Итак, как вы должны включить IPv6 в RHEL 7.4 и Centos 7.4 в модели cloud-init?
Чтобы настроить DHCPv6 на RHEL 7.4 или CentOS 7
Используя любой текстовый редактор по вашему выбору, создайте собственный файл, например:
/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
Сценарии 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
Я нашел для этого хорошее решение. Я использую 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
Я доволен решением, хотя не совсем уверен, почему я не мог просто указать конфигурацию сети в своих пользовательских данных напрямую, вместо того, чтобы записывать ее в файл и перезагружать. Во всяком случае, это работает и довольно безболезненно.
Я наконец нашел решение проблемы.
Нам нужно было добавить внешний 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
Я создал следующий файл:
$ cat /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network: {config: disabled}
И отредактировал /etc/sysconfig/network-scripts/ifcfg-eth0
как и раньше, и все работает, но не уверен, что это лучший подход.