Proxmox VE 9 • 独立服务器 • 网络教程

如何为 Proxmox VE 虚拟机分配公网 IP 地址

您的服务器交付时,主机上只配置了第一个 IPv4 地址,其余什么都没有。您账户下的其他所有地址都由您自行分配。本指南介绍在 Server Room 机器上实现这一点的三种方式:桥接模式,虚拟机以独立 MAC 地址直接接入我们的网络;路由模式,由主机代为转发;以及在主地址之后搭建私有子网。这里的每一种配置在发布前都已在我们的自有网络上测试通过。

Proxmox VE 9 基于 Debian 13 无需 MAC 注册 24/7 在线支持

分步指南

请先完成第一步和第二步。然后从第三步、第四步或第五步中任选其一 — 它们是对同一个问题的三种答案,而非一个先后顺序。

1

查找您的地址,并确定每个网关

您的机器创建时发送的 独立服务器设置 邮件列出了分配给它的所有地址,先是 IPv4,然后是 IPv6。同一列表也出现在控制面板中服务器页面的 访问、网络与 rDNS 栏目下,每个地址都显示其反向 DNS 记录。

在 Proxmox 构建中,邮件里还有额外一行,这正是本页面存在的原因:只有第一个地址配置在主机上。其余地址由您从 Proxmox 中分配,可以给虚拟机,也可以给主机本身。我们的安装程序有意只配置一个地址然后停止,因为如果主机持有全部地址,它就会为每一个地址应答,您的虚拟机就无地址可用了。

子网掩码始终是 /24(255.255.255.0),网关始终是该地址所在 /24 网段的 .1。后半句比看上去更重要。一起订购的地址在同一个 /24 内是连续的,因此它们共享一个网关。后来添加到现有服务器的地址可能来自我们的不同网段,此时每个地址使用各自的 .1 — 例如 203.0.113.0/24 中的地址使用 203.0.113.1,即使该机器的主地址在另一个网段。两者在同一个端口和同一个网桥上都能正常工作。

我们的安装程序配置的解析器是 209.244.0.3。您可以将虚拟机指向任何其他解析器。

2

查看安装程序在主机上留下的内容

通过 SSH 以 root 身份登录,查看安装程序写入的接口:

ip -br addr
cat /etc/network/interfaces

一台新构建的机器看起来像这样,用您自己的接口名和主地址替换示例中的内容:

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
    address 203.0.113.10/24
    gateway 203.0.113.1
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0

vmbr0 已经是一个网桥,物理接口已经是它的一个端口。这就是桥接模型的全部,因此第三步要求您对主机不做任何更改。

Proxmox VE 9 是 Debian 13,使用 ifupdown2,因此配置更改无需重启。编辑 /etc/network/interfaces 并用以下命令应用:

ifreload -a

如果您改为通过 Proxmox 网页界面编辑网络,您的更改会暂存在 /etc/network/interfaces.new 中,直到您点击 应用配置。无论哪种方式,在重新加载之前,请先从控制面板打开服务器控制台。此文件中的错误会使机器断网,而控制台是您无需工单即可重新进入的途径。

3

桥接:虚拟机以独立 MAC 地址接入我们的网络

除非有理由不这样做,否则应使用此方式。虚拟机是与主机同一网段上的普通机器,直接与我们的路由器通信,主机上完全无需任何更改

在 Proxmox 界面中,为虚拟机添加一个桥接到 vmbr0 的网络设备,并保留 Proxmox 为其生成的 MAC 地址。然后在虚拟机内部配置地址,就像在任何服务器上一样。对于使用 ifupdown 的 Debian 或 Ubuntu 虚拟机:

auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
    address 203.0.113.58/24
    gateway 203.0.113.1
    dns-nameservers 209.244.0.3 1.1.1.1

对于使用 netplan 的 Ubuntu 虚拟机,在 /etc/netplan/01-netcfg.yaml 中:

network:
  version: 2
  ethernets:
    ens18:
      addresses: [203.0.113.58/24]
      routes:
        - to: default
          via: 203.0.113.1
      nameservers:
        addresses: [209.244.0.3, 1.1.1.1]

Windows 虚拟机在适配器的 IPv4 属性中填入相同的三个值。任何操作系统都可以,因为从我们这边看,这只是子网上的另一台机器。

您无需向我们注册虚拟机的 MAC 地址,我们也不限制您的端口可以使用多少个。有些托管公司会这样做,他们的文档要求您为每台虚拟机声明一个 MAC。我们不是这样:您服务器所在的交换机端口没有 MAC 数量限制,端口安全已关闭,因此虚拟机的 MAC 会像主机的 MAC 一样被学习。我们在发布前对此进行了测试,在员工服务器自己的客户端口上放置了第二个 MAC 和一个空闲地址,并从公网成功访问了它。

有三点需要保持正确:

• 为每台虚拟机分配不同的 MAC 地址。两台虚拟机共用一个,或虚拟机复制主机的,都会导致两者故障。
• 使用第一步中该地址所属 /24 网段的网关。
只配置分配给您账户的地址。网桥面对的是与其他机器共享的真实网络。占用不属于您的地址会连带劫走他人的流量。

出于同样的原因,不要在 vmbr0 上运行 DHCP 服务器、恶意路由器通告守护进程或任何会为该网段应答的服务。如果您想为自己的虚拟机提供 DHCP,请使用第五步中的私有子网模型,该网桥没有物理端口,无法触达其他任何人。

4

路由:主机作为其虚拟机的网关

当您希望进出虚拟机的每个数据包都经过主机,以便主机的防火墙能够看到它们时,或者当您希望虚拟机完全不出现在我们的二层网络中时,请使用此方式。地址仍然是您账户下的公网地址,只是路径改变了。

公网地址从网桥移到物理接口上,主机进行转发,并代表其路由的虚拟机应答 ARP。在主机上:

auto lo
iface lo inet loopback

auto eno1
iface eno1 inet static
    address 203.0.113.10/24
    gateway 203.0.113.1
    post-up echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up echo 1 > /proc/sys/net/ipv4/conf/eno1/proxy_arp

auto vmbr0
iface vmbr0 inet manual
    bridge-ports none
    bridge-stp off
    bridge-fd 0
    up ip route add 203.0.113.58/32 dev vmbr0
    down ip route del 203.0.113.58/32 dev vmbr0

为每个路由地址添加一对 updown。在虚拟机内部,地址是 /32,主机通过默认路由之前的一条显式链路路由到达:

auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
    address 203.0.113.58/32
    post-up ip route add 203.0.113.10 dev ens18
    post-up ip route add default via 203.0.113.10
    dns-nameservers 209.244.0.3 1.1.1.1

关于主机配置段有两点说明。proxy_arp 行是此方式在这里生效的关键:我们的路由器在网段上询问虚拟机的地址,主机代为应答。没有这一行,虚拟机从外部看是静默的。另外两行 post-up echo 是 Proxmox 自己文档中的写法;如果您想一劳永逸地设置它们,请将 net.ipv4.ip_forward=1net.ipv4.conf.eno1.proxy_arp=1 放入 /etc/sysctl.d/ 下的文件中。

路由方式让您在每台虚拟机中多花一点配置,换来一台能够过滤、计数和记录所有流量的主机。桥接方式零成本,但两者都没有。这就是全部取舍。

5

在主地址之后搭建私有子网

只需要对外访问的虚拟机 — 构建代理、工作节点、外部不应触及的数据库 — 完全不需要公网地址。将它们放在一个没有物理端口的网桥上,让主机在出站时将其流量转换为主机自己的地址。这不会消耗任何地址,是运行大量机器最经济的方式。

在主机上添加第二个网桥,保持 vmbr0 不变:

auto vmbr1
iface vmbr1 inet static
    address 10.10.10.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0
    post-up echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE

虚拟机接入 vmbr1,使用该范围内的地址,以 10.10.10.1 为网关,并使用您偏好的任何解析器。它们以您服务器的身份访问互联网;除非您明确允许,外部无法访问它们。要发布某个服务,请在伪装规则旁添加一条转发规则,选择一个主机自身未使用的端口:

post-up iptables -t nat -A PREROUTING -i eno1 -p tcp --dport 8443 -j DNAT --to 10.10.10.2:443
post-down iptables -t nat -D PREROUTING -i eno1 -p tcp --dport 8443 -j DNAT --to 10.10.10.2:443

由于此网桥没有物理端口,在其上运行 DHCP 服务器完全安全,也是为虚拟机分配地址的合理方式。

6

添加您的 IPv6 地址

您的 IPv6 分配是一组独立地址,而非可自行划分的委派前缀。它们列在同一封设置邮件中,位于 IPv4 地址下方,并且像 IPv4 地址一样逐个放置:如果您希望主机可访问,就在主机上放一个,其余放在虚拟机上。安装程序不配置其中任何一个。

每个地址配置为 /64 前缀长度,网关是 该前缀后跟 ::1 — 因此 2001:db8:1234::/64 内的地址使用 2001:db8:1234::1。在主机上,在现有网桥旁添加一个 IPv6 配置段:

iface vmbr0 inet6 static
    address 2001:db8:1234::2/64
    gateway 2001:db8:1234::1

在桥接虚拟机中:

iface ens18 inet6 static
    address 2001:db8:1234::5/64
    gateway 2001:db8:1234::1

像之前一样用 ifreload -a 应用。由于地址是独立的而非您自己的前缀,请勿运行路由器通告或分发未分配给您的地址。如果您需要的地址多于现有数量,请联系我们。

7

从控制面板设置反向 DNS

反向 DNS 由您自行编辑,适用于每个地址,无需工单。登录后打开服务器页面,找到 访问、网络与 rDNS 面板。账户下的每个地址都列在那里,显示其当前记录和一个 编辑 rDNS 按钮。IPv4 和 IPv6 均可使用。

表单接受主机名:仅限字母、数字、连字符和点,每个标签 1 到 63 个字符,至少两个标签,它会为您添加末尾的点。更改需要几分钟才能生效。

如果机器发送邮件,请在邮件实际发出的地址上设置反向记录 — 在上述私有子网模型中,这是主机的地址而非虚拟机的地址 — 并在您自己的 DNS 提供商处创建匹配的正向记录。接收邮件的服务器会检查两者是否一致。

常见问题

这种配置实际会引发的问题。

我的虚拟机无法访问任何东西。哪里出了问题?

几乎总是网关。每个地址使用 其自身 /24 网段的 .1,后来添加到您服务器的地址可能位于与主地址不同的网段,网关也不同。检查该地址是否分配给您的账户,检查子网掩码是否为 /24,并检查虚拟机的 MAC 地址是否与其他机器重复。在主机上运行 ip -br addr,在虚拟机中运行 ip route,几秒钟内就能回答这三个问题。

我需要告诉你们每台虚拟机的 MAC 地址吗?

不需要。您的交换机端口不限制可学习的 MAC 地址数量,端口安全也未启用,因此拥有独立 MAC 地址的虚拟机会像其他任何机器一样被学习。保留 Proxmox 生成的 MAC 地址,并为每台虚拟机分配不同的地址。

为什么安装程序只配置了一个地址?

因为如果主机持有账户下的所有地址,它就会为每一个地址应答,您的虚拟机就无地址可用了。一个地址让机器上线并可访问;其余地址留给您自行分配,这正是设置邮件在地址列表下方所说明的。

我应该使用桥接还是路由?

桥接,除非您有特定理由。它无需更改主机,无需在虚拟机中进行特殊配置,行为就像网络上的物理机器。当您希望每个数据包都经过主机以便其防火墙能够处理时,请选择路由,并接受在每台虚拟机中多做一些配置作为交换。

我可以为我的虚拟机运行 DHCP 服务器吗?

在没有物理端口的私有网桥上可以,这也是为虚拟机分配地址的合理方式。切勿在 vmbr0 上这样做:该网桥面对的是与其他机器共享的真实网络,那里的 DHCP 服务器或路由器通告守护进程会为不属于您的机器应答。

我改了文件后机器失联了。现在怎么办?

从控制面板打开控制台。它通过管理控制器而非网络访问机器,因此即使网络配置失效,它仍然可用。在那里修复 /etc/network/interfaces 并运行 ifreload -a。在应用网络更改之前先打开控制台,是值得养成的习惯。

我如何获得更多地址?

通过在线聊天或提交工单联系我们,并说明每个地址的用途 — 注册机构要求每次分配都有明确的用途说明,因此这是我们首先需要的信息。额外的 IPv4 地址按月计费,记在同一账户下。分配完成后,它们会出现在您的控制面板中,并出现在下一次构建的设置邮件中。

需要一台机器来运行这些吗?

Proxmox VE 在大多数我们的独立服务器上可一键安装,拥有完整 root 权限、带外控制台,且无需任何许可费用。