如何在没有桥接的情况下在 Proxmox 中配置 DHCPv6?

如何在没有桥接的情况下在 Proxmox 中配置 DHCPv6?

(转贴:网络堆栈交换

我有一个通过 WiFi 连接的 Proxmox 设置。一切都符合我的需求,并且 IPv4 连接也很好。

现在,我想看看是否可以进行一些 DHCPv6 设置,以便我的虚拟机也具有 IPv6 地址。我更喜欢没有 NAT 的设置,但这不是强制性的。

我正在考虑几个有关 IPv6 连接的选项:

  • NDP 代理。这个感觉是最“透明”的,我将从与主机相同的网络(即主 abcd:abcd:abcd:FFFF::/64 网络)获取公共 IPv6 地址。
  • DHCPv6 网络。我的路由器有 DHCPv6,我可能可以让我的 Proxmox 实例请求一个网络用于其内部桥接(使用前缀委派)。我目前使用 dnsmasq 来获取虚拟机的 IPv4 地址,但我相信我可以用其他东西代替它。
  • NAT。我不想要这个选项,但我也不会完全拒绝它。我不能直接将桥接模式下的 Proxmox 桥接到我的 LAN(这会让事情变得容易得多)的原因是我无法引入有线连接,所以我必须使用 WiFi(幸好它至少是 5 GHz,而且大多数时候不需要太多流量)并且 WiFi 客户端不支持桥接。

因此,我请求您提供建议。提前谢谢您。

编辑:我选择了前缀委派。还没有完全完成。现在来说说问题:

  • 我获得了委派的 IPv6 前缀,Proxmox 服务器正在获取 /62
  • 在服务器上,我启用了 radvd,它正确地向虚拟机的内部 LAN 进行广播
  • 该虚拟机是带有 NetworkManager 的 Ubuntu 20.04,它正在获取路由器通告,甚至自动配置默认路由。但是,它不会自动配置 IPv6 地址,这会导致在尝试 ping IPv6 地址时出现意外问题“目标无法访问:超出源地址范围”。如果我手动执行“ip aa dev ens18 2001:db8:facb:9876::23:2918/62”,它会起作用(路由是 2001:db8:facb:9874::/62 加上默认路由)。

radvdump 输出:

{
    AdvSendAdvert on;
    # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
    AdvManagedFlag off;
    AdvOtherConfigFlag off;
    AdvReachableTime 0;
    AdvRetransTimer 0;
    AdvCurHopLimit 64;
    AdvDefaultLifetime 300;
    AdvHomeAgentFlag off;
    AdvDefaultPreference medium;
    AdvSourceLLAddress on;

    prefix fde1:d59a:7fa7:8::/62
    {
        AdvValidLifetime 86400;
        AdvPreferredLifetime 14400;
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    }; # End of prefix definition


    prefix 2001:db8:facb:9874::/62
    {
        AdvValidLifetime 86400;
        AdvPreferredLifetime 14400;
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    }; # End of prefix definition


    prefix fde1:d59a:7fa7:8::/62
    {
        AdvValidLifetime 86400;
        AdvPreferredLifetime 14400;
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    }; # End of prefix definition


    prefix 2001:db8:facb:9874::/62
    {
        AdvValidLifetime 86400;
        AdvPreferredLifetime 14400;
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    }; # End of prefix definition


    route ::/0
    {
        AdvRoutePreference medium;
        AdvRouteLifetime 300;
    }; # End of route definition

}; # End of interface definition

RADVD 配置:

interface vmbr0 {
  AdvSendAdvert on;
  MinRtrAdvInterval 30;
  MaxRtrAdvInterval 100;
  AdvSourceLLAddress on;
  prefix ::/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
    Base6Interface vmbr0;
  };
  route ::/0 {
  };
};

(vmbr0 的 IPv6 地址已正确配置)

答案1

事实证明,我做的一些事情有点过于复杂,现在我已经设法自己回答了这个问题。

首先,让我链接到对此目的最有帮助的外部资源:超级用户的回答

我的配置与该文章中的配置相同:

  • 路由器:启用前缀委托。可能不需要做任何事来改变默认设置,但以防万一。
  • 安装软件包“wide-dhcpv6-client”。对其进行相应配置以请求前缀委派,并针对每个接口执行相应操作。
  • 调整 dnsmasq 以提供 IPv6 地址——这允许路由器通告和 DHCP 正常工作。
  • 重新启动(由于某种原因,ifup/ifdown 没有正确调整)。

dhcp6c.conf片段:

interface wlp2s0 {
        send rapid-commit;
        send ia-na 0;
        send ia-pd 0;
};

id-assoc na 0 {
};

id-assoc pd 0 {
        prefix ::/60 infinity;
        prefix-interface vmbr0 {
                sla-len 4;
                sla-id 0;
                ifid 1;
        };
};

dnsmasq.conf 片段:

enable-ra
dhcp-range=::1,constructor:vmbr0,ra-stateless,ra-names,4h

相关内容