記錄下在OVH的獨立服務器上為Proxmox VE虛擬機配置IPv4、IPv6的過程。
實際上我之前也寫過類似的幾篇文章,但由於OVH的基礎設施(網絡)有很多變化,之前的配置可能過時了,遂寫一篇文章記錄下目前可用的配置方案。
配置IPv4,我們需要在OVH管理界面購買附加IPv4(OVH以前稱之為故障轉移IP),可以選擇購買單個或者整段,這裡我為了演示就購買了單個IPv4:


[重要]為剛購買的附加IPv4生成虛擬MAC地址:https://ca.ovh.com/manager/#/dedicated/ip,我這個賬號是CA區的,不同區域可能網址不一樣。這個需要等待幾分鐘才能生成好:

在OVH管理界面找到這台服務器的IPv4網關地址,所有的附加IPv4地址都使用這一個網關地址:

做好上述所說的準備工作後,接下來我詳細說一下後續配置可能會遇到的坑以及解決辦法。
由於OVH的IPv4網關地址與附加IPv4地址不在同一子網,在這種情況下某些基於Debian的Linux發行版需要使用onlink標誌才能添加默認路由。
又因為舊版本的cloud-init在這方面存在一些問題,它不為後端的網絡管理程序提供onlink標誌,這就導致很多Linux系統無法添加默認路由,比如我最常用的Debian12就是如此。
一個典型的例子:假設虛擬機系統是Debian12,當你在PVE的管理界面使用cloud-init配置虛擬機網絡時,填寫好IPv4和網關地址後,虛擬機啟動後沒有默認路由。
好在這個問題已經在最近的版本中修復了,更多詳細信息見:
但Debian12 cloud image裏面的cloud-init還是舊版本,並沒有應用上述的更新,我想到幾個解決辦法,但我只實踐了其中兩個。
1、使用PVE qm工具的cicustom功能自定義cloud-init的網絡配置。
2、使用libguestfs這類工具在Debian12 cloud image裏面安裝新版本cloud-init。(未實踐)
3、這個解決辦法最簡單,直接用Debian13,13現在是testing,裏面的cloud-init是最新版,不存在上述問題。
4、自己從頭開始製作Debian image(未實踐,個人覺得太麻煩)
下面把第一種和第三種解決辦法詳細說明一下。首先我們分別創建Debian12、Debian13的系統模板。
下載Debian12 cloud image:
mkdir /root/template && cd /root/template wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
創建虛擬機:
qm create 50000 --name debian12-template-source --cpu host --cores 1 --memory 1024 --machine q35 --bios ovmf --efidisk0 local-zfs:0,format=raw,efitype=4m,pre-enrolled-keys=1,size=528K --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single --agent enabled=1,freeze-fs-on-backup=1,fstrim_cloned_disks=1 --serial0 socket
導入Debian12 cloud image:
qm set 50000 --scsi0 local-zfs:0,import-from=/root/template/debian-12-generic-amd64.qcow2,cache=writeback,iothread=1,discard=on,format=raw
配置虛擬機:
qm set 50000 --ide0 local-zfs:cloudinit // 創建cloudinit設備 qm set 50000 --ciuser=root --cipassword="rootpassword" // 設置系統root密碼 qm set 50000 --boot order=scsi0 // 修改系統引導順序
轉換成模板:
qm template 50000
下載Debian13 cloud image:
cd /root/template https://cdimage.debian.org/images/cloud/trixie/daily/latest/debian-13-generic-amd64-daily.qcow2
創建虛擬機:
qm create 60000 --name debian13-template-source --cpu host --cores 1 --memory 1024 --machine q35 --bios ovmf --efidisk0 local-zfs:0,format=raw,efitype=4m,pre-enrolled-keys=1,size=528K --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single --agent enabled=1,freeze-fs-on-backup=1,fstrim_cloned_disks=1 --serial0 socket
導入Debian13 cloud image:
qm set 60000 --scsi0 local-zfs:0,import-from=/root/template/debian-13-generic-amd64-daily.qcow2,cache=writeback,iothread=1,discard=on,format=raw
配置虛擬機:
qm set 60000 --ide0 local-zfs:cloudinit // 創建cloudinit設備 qm set 60000 --ciuser=root --cipassword="rootpassword" // 設置系統root密碼 qm set 60000 --boot order=scsi0 // 修改系統引導順序
轉換成模板:
qm template 60000
在PVE管理界面克隆一台Debian12系統的虛擬機,假設克隆的這台虛擬機的ID是100:

等待克隆完成後,你可以根據自身需求在這裡調整虛擬機的CPU、內存、硬盤大小:

對於Debian12而言,雖然後續自定義的cloud-init網絡配置會覆蓋掉PVE管理界面的設置,但還是需要先在PVE管理界面為虛擬機的網絡設備指定OVH的虛擬MAC地址:

現在就可以來自定義cloud-init的網絡配置了。在PVE管理界面找到「數據中心」->「存儲」-「local」點擊編輯:

內容選中「片段」:

接着在PVE主機的如下目錄新建一個yaml配置文件:
nano /var/lib/vz/snippets/vm100-network.yaml
寫入如下配置:
network: version: 2 ethernets: eth0: addresses: - "142.xx.157.29/32" // OVH附加IPv4地址 match: macaddress: 02:00:00:1c:0e:9a // OVH附加IPv4地址的虛擬MAC地址 routes: - to: default via: 158.xx.55.254 // OVH網關IPv4地址 on-link: true nameservers: addresses: - 8.8.8.8 - 1.1.1.1 set-name: eth0
設置ID為100的虛擬機使用剛才創建的自定義網絡配置:
qm set 100 --cicustom "network=local:snippets/vm100-network.yaml"
啟動虛擬機進行測試:

對於Debian13而言就非常簡單了,還是和之前一樣克隆一台虛擬機,與Debian12的配置基本相同:

填寫之前在OVH管理界面生成的虛擬MAC地址:

然後直接在PVE管理界面配置虛擬機的IPv4地址與網關地址:

不需要關心IPv4網關地址與附加IPv4地址在不在同一子網,直接往上填就行了:

啟動虛擬機進行測試:

至此有關IPv4的配置就全部完成了。接下來配置IPv6。
我發現OVH現在的獨立服務器應該都給了/56,並且不再需要使用NDPPD。配置起來也是方便了不少。
對於PVE主機而言,直接使用OVH管理面板上提供的IPv6地址與IPv6網關地址即可:

編輯PVE主機的網絡配置文件:
nano /etc/network/interfaces
示例配置:
auto lo iface lo inet loopback iface eth0 inet manual auto vmbr0 iface vmbr0 inet static address 158.xx.xx.210/24 gateway 158.xx.xx.254 bridge-ports eth0 bridge-stp off bridge-fd 0 iface vmbr0 inet6 static address xx:xx:60:84d2::1/128 // OVH管理面板上提供的IPv6地址 gateway xx:xx:0060:84ff:00ff:00ff:00ff:00ff // OVH管理面板上提供的IPv6網關地址 source /etc/network/interfaces.d/*
使用如下命令實時重載網絡配置,立即生效,不需要重啟PVE主機:
ifreload -a
接下來給虛擬機分配IPv6,在開始分配前,可以使用這個網站先計算一下可用的IPv6地址範圍,或者拆分IPv6。將OVH管理面板上提供的IPv6地址輸上去,Prefix length選擇/56即可。
對於Debian12系統的虛擬機,自定義cloud-init網絡配置文件,示例配置:
network: version: 2 ethernets: eth0: addresses: - "142.xx.157.29/32" - "260x:5x00:00x0:8400::1/56" match: macaddress: 02:00:00:1c:0e:9a routes: - to: default via: 158.xx.55.254 on-link: true - to: default via: 260x:5x00:00x0:84ff:ff:ff:ff:ff nameservers: addresses: - 8.8.8.8 - 1.1.1.1 - 2001:4860:4860::8888 - 2606:4700:4700::1111 set-name: eth0
還有一種寫法,可以為每台虛擬機配置一個/64而不是/56,如果你選擇CIDR為/64則需要添加onlink標誌,示例配置:
network: version: 2 ethernets: eth0: addresses: - "142.xx.157.29/32" - "260x:5x00:00x0:8400::1/64" match: macaddress: 02:00:00:1c:0e:9a routes: - to: default via: 158.xx.55.254 on-link: true - to: default via: 260x:5x00:00x0:84ff:ff:ff:ff:ff on-link: true nameservers: addresses: - 8.8.8.8 - 1.1.1.1 - 2001:4860:4860::8888 - 2606:4700:4700::1111 set-name: eth0
測試:

對於Debian13系統的虛擬機,直接在PVE管理界面配置IPv6,按你自己的喜好CIDR配置成/56、/64均可:

測試:

參考資料:
https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_custom_cloud_init_configuration
https://forum.proxmox.com/threads/bug-no-routing-in-vm-with-cloud-init-ubuntu-18-x-19-4.56966/
https://forum.proxmox.com/threads/cloud-init-network-configuration-with-ubuntu-cicustom-option.115746/
https://pve.proxmox.com/wiki/Network_Configuration
https://help.ovhcloud.com/csm/en-dedicated-servers-network-bridging?id=kb_article_view&sysparm_article=KB0043731
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/152421.html