记录下在OVH的独立服务器上为Proxmox VE虚拟机配置IPv4、IPv6的过程。
实际上我之前也写过类似的几篇文章,但由于OVH的基础设施(网络)有很多变化,之前的配置可能过时了,遂写一篇文章记录下目前可用的配置方案。
配置IPv4,我们需要在OVH管理界面购买附加IPv4(OVH以前称之为故障转移IP),可以选择购买单个或者整段,这里我为了演示就购买了单个IPv4:
OVHcloud Proxmox VE虚拟机网络配置
OVHcloud Proxmox VE虚拟机网络配置
重要为刚购买的附加IPv4生成虚拟MAC地址:https://ca.ovh.com/manager/#/dedicated/ip,我这个账号是CA区的,不同区域可能网址不一样。这个需要等待几分钟才能生成好:
OVHcloud Proxmox VE虚拟机网络配置
在OVH管理界面找到这台服务器的IPv4网关地址,所有的附加IPv4地址都使用这一个网关地址:
OVHcloud Proxmox VE虚拟机网络配置
做好上述所说的准备工作后,接下来我详细说一下后续配置可能会遇到的坑以及解决办法。
由于OVH的IPv4网关地址与附加IPv4地址不在同一子网,在这种情况下某些基于Debian的Linux发行版需要使用onlink标志才能添加默认路由。
又因为旧版本的cloud-init在这方面存在一些问题,它不为后端的网络管理程序提供onlink标志,这就导致很多Linux系统无法添加默认路由,比如我最常用的Debian12就是如此。
一个典型的例子:假设虚拟机系统是Debian12,当你在PVE的管理界面使用cloud-init配置虚拟机网络时,填写好IPv4和网关地址后,虚拟机启动后没有默认路由。
好在这个问题已经在最近的版本中修复了,更多详细信息见:
https://github.com/canonical/cloud-init/pull/4996
https://github.com/canonical/cloud-init/pull/5654
https://github.com/canonical/cloud-init/issues/5523
但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:
代码语言:javascript
复制
mkdir /root/template && cd /root/template
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
创建虚拟机:
代码语言:javascript
复制
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:
代码语言:javascript
复制
qm set 50000 --scsi0 local-zfs:0,import-from=/root/template/debian-12-generic-amd64.qcow2,cache=writeback,iothread=1,discard=on,format=raw
配置虚拟机:
代码语言:javascript
复制
qm set 50000 --ide0 local-zfs:cloudinit // 创建cloudinit设备
qm set 50000 --ciuser=root --cipassword="rootpassword" // 设置系统root密码
qm set 50000 --boot order=scsi0 // 修改系统引导顺序
转换成模板:
代码语言:javascript
复制
qm template 50000
下载Debian13 cloud image:
代码语言:javascript
复制
cd /root/template
https://cdimage.debian.org/images/cloud/trixie/daily/latest/debian-13-generic-amd64-daily.qcow2
创建虚拟机:
代码语言:javascript
复制
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:
代码语言:javascript
复制
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
配置虚拟机:
代码语言:javascript
复制
qm set 60000 --ide0 local-zfs:cloudinit // 创建cloudinit设备
qm set 60000 --ciuser=root --cipassword="rootpassword" // 设置系统root密码
qm set 60000 --boot order=scsi0 // 修改系统引导顺序
转换成模板:
代码语言:javascript
复制
qm template 60000
在PVE管理界面克隆一台Debian12系统的虚拟机,假设克隆的这台虚拟机的ID是100:
OVHcloud Proxmox VE虚拟机网络配置
等待克隆完成后,你可以根据自身需求在这里调整虚拟机的CPU、内存、硬盘大小:
OVHcloud Proxmox VE虚拟机网络配置
对于Debian12而言,虽然后续自定义的cloud-init网络配置会覆盖掉PVE管理界面的设置,但还是需要先在PVE管理界面为虚拟机的网络设备指定OVH的虚拟MAC地址:
OVHcloud Proxmox VE虚拟机网络配置
现在就可以来自定义cloud-init的网络配置了。在PVE管理界面找到“数据中心”->“存储”-“local”点击编辑:
OVHcloud Proxmox VE虚拟机网络配置
内容选中“片段”:
OVHcloud Proxmox VE虚拟机网络配置
接着在PVE主机的如下目录新建一个yaml配置文件:
代码语言:javascript
复制
nano /var/lib/vz/snippets/vm100-network.yaml
写入如下配置:
代码语言:javascript
复制
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的虚拟机使用刚才创建的自定义网络配置:
代码语言:javascript
复制
qm set 100 --cicustom "network=local:snippets/vm100-network.yaml"
启动虚拟机进行测试:
OVHcloud Proxmox VE虚拟机网络配置
对于Debian13而言就非常简单了,还是和之前一样克隆一台虚拟机,与Debian12的配置基本相同:
OVHcloud Proxmox VE虚拟机网络配置
填写之前在OVH管理界面生成的虚拟MAC地址:查猪价网https://www.chazhujia.com/
OVHcloud Proxmox VE虚拟机网络配置
然后直接在PVE管理界面配置虚拟机的IPv4地址与网关地址:
OVHcloud Proxmox VE虚拟机网络配置
不需要关心IPv4网关地址与附加IPv4地址在不在同一子网,直接往上填就行了:
OVHcloud Proxmox VE虚拟机网络配置
启动虚拟机进行测试:
OVHcloud Proxmox VE虚拟机网络配置
至此有关IPv4的配置就全部完成了。接下来配置IPv6。
我发现OVH现在的独立服务器应该都给了/56,并且不再需要使用NDPPD。配置起来也是方便了不少。
对于PVE主机而言,直接使用OVH管理面板上提供的IPv6地址与IPv6网关地址即可:
OVHcloud Proxmox VE虚拟机网络配置
编辑PVE主机的网络配置文件:查猪价网https://www.chazhujia.com/
代码语言:javascript
复制
nano /etc/network/interfaces
示例配置:
代码语言:javascript
复制
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主机:
代码语言:javascript
复制
ifreload -a
接下来给虚拟机分配IPv6,在开始分配前,可以使用这个网站先计算一下可用的IPv6地址范围,或者拆分IPv6。将OVH管理面板上提供的IPv6地址输上去,Prefix length选择/56即可。
对于Debian12系统的虚拟机,自定义cloud-init网络配置文件,示例配置:
代码语言:javascript
复制
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标志,示例配置:
代码语言:javascript
复制
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
测试:查猪价网https://www.chazhujia.com/
OVHcloud Proxmox VE虚拟机网络配置
对于Debian13系统的虚拟机,直接在PVE管理界面配置IPv6,按你自己的喜好CIDR配置成/56、/64均可:
OVHcloud Proxmox VE虚拟机网络配置
测试:
OVHcloud Proxmox VE虚拟机网络配置