(转贴:网络堆栈交换)
我有一个通过 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