Proxmox

如何在沒有網橋的 Proxmox 中配置 DHCPv6?

  • December 12, 2021

(crosspost:網路堆棧交換

我有一個通過 WiFi 連接的 Proxmox 設置。一切都適合我的需求和 IPv4 連接。

現在,我想看看是否可以進行一些 DHCPv6 設置,以便我的虛擬機也具有 IPv6 地址。我更喜歡沒有 NAT 的設置,但這不是強制性的。

我正在考慮 IPv6 連接的幾個選項:

  • 國慶節代理。這個感覺是最“透明”的,我會從與主機相同的網路獲取一個公有的IPv6地址,也就是主abcd:abcd:abcd:FFFF::/64網路。
  • DHCPv6 網路。我的路由器有 DHCPv6,我可以讓我的 Proxmox 實例請求一個網路用於其內部網橋(使用前綴委託)。我目前正在將 dnsmasq 用於虛擬機的 IPv4 地址,但我相信我可以用其他東西替換它。
  • NAT。我不想要這個選項,但我也不會完全拒絕它。我不能將 Proxmox 橋接器以橋接模式連接到我的 LAN(這會使事情變得容易得多)的原因是我無法引入有線連接,所以我必須使用 WiFi(幸好至少它是 5 GHz並且大部分時間不需要太多流量)並且WiFi客戶端不支持網橋。

所以這是我的建議請求。先感謝您。

編輯:作為我的選擇來前綴委託。還沒有完全完成。現在解決問題:

  • 我獲得了 IPv6 前綴的委託,Proxmox 伺服器獲得了 /62
  • 在我啟用了 radvd 的伺服器上,它正確地向 VM 的內部 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 地址已正確配置)

原來我做的一些事情有點過於復雜,現在我已經設法自己回答了這個問題。

首先,讓我連結到對此目的最有幫助的外部資源:超級使用者回答

我的配置反映了那篇文章中的配置:

  • 路由器:啟用前綴委託。可能不需要做任何事情來改變預設值,但以防萬一。
  • 安裝包“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

引用自:https://serverfault.com/questions/1085864