Назад | Перейти на главную страницу

cloud-init не может настроить ipv6

Я купил VPS Public Cloud у OVH и пытаюсь настроить ipv6. Также я нашел руководство о том, как настроить ipv6, в их документации. Работает, пока я не перезагружаю VPS.

В этом руководстве они хотят, чтобы я обновил этот файл / etc / sysconfig / network-scripts / ifcfg-eth0, но внутри этого файла написано: «Создается cloud-init при автоматической загрузке экземпляра, не редактировать». Я также пытался связаться со службой поддержки OVH, но они ответили, что не могут мне с этим помочь, и предложили спросить здесь.

Кто-нибудь может мне с этим помочь? Я никогда не работал с cloud-init и даже не знаю, где находится конфиг, генерирующий ifcfg-eth0.

ОС: Centos7

В моем конкретном случае мой маршрутизатор сдает в аренду IPv6-адреса моим виртуальным машинам, работающим на моем сервере (в помещении) через DHCP, и поэтому ... мне не нужно жестко кодировать или генерировать какую-либо конфигурацию IP. Мне просто нужно сообщить DNS-серверу о динамически сгенерированных адресах.

Фрагмент ниже (из моего cloud-config скрипт) создает /etc/sysctl.conf так что он включает IPv6 на виртуальной машине под управлением Centos7. Он также создает сценарий оболочки, который обновляет текущий адрес IPv6 на FreeDNS каждые 15 минут, требуя FQDN и ключа DDNS, которые можно получить при настройке записи AAAA, помеченной как динамическая.

local fqdn="vm.example.com"
local ddnspasswd='obtain-ddns-key-at-dns.he.net'
cat > user-data <<EOF
    # configure IPv6
    write_files:
      - content: |
            net.ipv6.conf.all.disable_ipv6 = 0
            net.ipv6.conf.default.disable_ipv6 = 0
        path: /etc/sysctl.conf
        owner: root:root
        permissions: 0600
      - content: |
            #!/bin/bash

            function ddns_update_ipv4 {
              local fqdn="${fqdn}"
              local ddnspasswd="${ddnspasswd}"

              /usr/bin/curl -4 "https://dyn.dns.he.net/nic/update" -d "hostname=\${fqdn}" -d "password=\${ddnspasswd}" >> /dev/null 2>&1
              local STATUS=\$?

              if [[ \$STATUS -ne 0 ]]; then
                    echo "IPv4 DNS update failed, return code: \$STATUS" >> /var/log/ddns.log
                    return 1
              fi

              return 0
            }

            function ddns_update_ipv6 {
              local fqdn="${fqdn}"
              local ddnspasswd="${ddnspasswd}"

              /usr/bin/curl -6 "https://dyn.dns.he.net/nic/update" -d "hostname=\${fqdn}" -d "password=\${ddnspasswd}" >> /dev/null 2>&1
              local STATUS=\$?

              if [[ \$STATUS -ne 0 ]]; then
                    echo "IPv6 DNS update failed, return code: \$STATUS" >> /var/log/ddns.log
                    return 1
              fi

              return 0
            }


            ddns_update_ipv6
        path: /sbin/ddns-update
        owner: root:root
        permissions: 0500

    # Update IPv6 on FreeDNS (http://dns.he.net/) every 15 mins
    runcmd:
      - systemctl stop network && systemctl start network
      - echo "0,15,30,45 * * * * /sbin/ddns-update" | tee -a /etc/crontab
      - crontab -u root /etc/crontab
EOF

Ответа на этот вопрос нет в руководстве OVH, однако работает следующее:

В /etc/cloud/cloud.cfg.d/99-custom-networking.cfg: Добавить

network:
    version: 2
    ethernets:
        eth0:
            dhcp: true
            dhcp6: false
            match:
              name: eth0
            addresses:
              - "ADDRESS"
            gateway6: "GATEWAY"

Убедитесь, что вы настроили свой шлюз, затем перезагрузите и перезагрузите конфигурацию, используя sudo cloud-init clean -r

См. Мой ответ здесь для передачи пользовательских данных EC2, чтобы просто включить IPv6 при запуске экземпляра:

Как включить IPv6 в RHEL 7.4 на Amazon EC2