您的服务器交付时,主机上只配置了第一个 IPv4 地址,其余什么都没有。您账户下的其他所有地址都由您自行分配。本指南介绍在 Server Room 机器上实现这一点的三种方式:桥接模式,虚拟机以独立 MAC 地址直接接入我们的网络;路由模式,由主机代为转发;以及在主地址之后搭建私有子网。这里的每一种配置在发布前都已在我们的自有网络上测试通过。
请先完成第一步和第二步。然后从第三步、第四步或第五步中任选其一 — 它们是对同一个问题的三种答案,而非一个先后顺序。
您的机器创建时发送的 独立服务器设置 邮件列出了分配给它的所有地址,先是 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。您可以将虚拟机指向任何其他解析器。
通过 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 中,直到您点击 应用配置。无论哪种方式,在重新加载之前,请先从控制面板打开服务器控制台。此文件中的错误会使机器断网,而控制台是您无需工单即可重新进入的途径。
除非有理由不这样做,否则应使用此方式。虚拟机是与主机同一网段上的普通机器,直接与我们的路由器通信,主机上完全无需任何更改。
在 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,请使用第五步中的私有子网模型,该网桥没有物理端口,无法触达其他任何人。
当您希望进出虚拟机的每个数据包都经过主机,以便主机的防火墙能够看到它们时,或者当您希望虚拟机完全不出现在我们的二层网络中时,请使用此方式。地址仍然是您账户下的公网地址,只是路径改变了。
公网地址从网桥移到物理接口上,主机进行转发,并代表其路由的虚拟机应答 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 为每个路由地址添加一对 up 和 down。在虚拟机内部,地址是 /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=1 和 net.ipv4.conf.eno1.proxy_arp=1 放入 /etc/sysctl.d/ 下的文件中。
路由方式让您在每台虚拟机中多花一点配置,换来一台能够过滤、计数和记录所有流量的主机。桥接方式零成本,但两者都没有。这就是全部取舍。
只需要对外访问的虚拟机 — 构建代理、工作节点、外部不应触及的数据库 — 完全不需要公网地址。将它们放在一个没有物理端口的网桥上,让主机在出站时将其流量转换为主机自己的地址。这不会消耗任何地址,是运行大量机器最经济的方式。
在主机上添加第二个网桥,保持 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 服务器完全安全,也是为虚拟机分配地址的合理方式。
您的 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 应用。由于地址是独立的而非您自己的前缀,请勿运行路由器通告或分发未分配给您的地址。如果您需要的地址多于现有数量,请联系我们。
反向 DNS 由您自行编辑,适用于每个地址,无需工单。登录后打开服务器页面,找到 访问、网络与 rDNS 面板。账户下的每个地址都列在那里,显示其当前记录和一个 编辑 rDNS 按钮。IPv4 和 IPv6 均可使用。
表单接受主机名:仅限字母、数字、连字符和点,每个标签 1 到 63 个字符,至少两个标签,它会为您添加末尾的点。更改需要几分钟才能生效。
如果机器发送邮件,请在邮件实际发出的地址上设置反向记录 — 在上述私有子网模型中,这是主机的地址而非虚拟机的地址 — 并在您自己的 DNS 提供商处创建匹配的正向记录。接收邮件的服务器会检查两者是否一致。
这种配置实际会引发的问题。