cloud-init 无法设置 ipv6

cloud-init 无法设置 ipv6

我从 OVH 购买了一台公共云 VPS,并尝试设置 ipv6。我还找到了一个教程在他们的文档中没有关于如何设置 ipv6 的信息。在我重新启动 VPS 之前,它一直有效。

在本教程中,他们希望我更新此文件 /etc/sysconfig/network-scripts/ifcfg-eth0,但该文件内显示“由 cloud-init 在实例启动时自动创建,请勿编辑”。我也尝试联系 OVH 的支持人员,但他们回复说他们无法帮助我,并建议在此处询问。

有人能帮我吗?我从未使用过 cloud-init,甚至不知道生成 ifcfg-eth0 的配置在哪里。

操作系统:Centos7

答案1

在我的具体情况下,我的路由器通过 DHCP 将 IPv6 地址出租给我在服务器(在前提下)中运行的虚拟机,因此...我不需要硬编码或生成任何 IP 配置。我只需要将动态生成的地址通知给 DNS 服务器。

下面的代码片段(来自我的cloud-config脚本)创建了/etc/sysctl.conf在运行 Centos7 的虚拟机上启用 IPv6 的功能。它还创建了一个 shell 脚本,用于将当前的 IPv6 地址更新到免费DNS每 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

答案2

请参阅我在此处的回答,了解如何在启动实例时传递 EC2 用户数据以启用 IPv6:

如何在 Amazon EC2 上的 RHEL 7.4 中启用 IPv6

答案3

这个问题的答案并不在 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

相关内容