Proxmox VE 9 • 虚拟机网络 • 指南

Proxmox 虚拟机配置公网 IP 地址

服务器交付时,只配置了一个 IPv4 地址,其余的都留给你。这是有意为之,本页就是教你如何完成剩下的工作。有三种方法,都不费时:让虚拟机直接接入网络、拥有自己的地址;让流量经由宿主机转发;或者把一批机器藏在你已有的地址后面。我们在撰写本文之前,在自己的网络上对这三种方法都做了测试。

无需预先注册 无需重启 随时有专人接听电话

分步指南

先读前两步。之后,第三、四、五步是三种可选方案 — 选择与你正在搭建的环境相匹配的那一个。

1

地址在哪里,每个地址用哪个网关

找一封标题为 Dedicated Server Setup 的邮件,是机器创建当天发出的。里面列出了分配给服务器的所有内容:先是 IPv4 地址,然后是 IPv6。同样的列表也在你的账户里,在服务器页面上,位于 Access, Networking & rDNS 面板中。

在 Proxmox 服务器上,这封邮件在列表下方多加了一行,告诉你宿主机只配置了第一个地址,其余的由你自行分配 — 给虚拟机,或者如果你想让宿主机持有多个地址,也可以给宿主机。我们只配置一个地址,让机器启动后就能连通,然后就不再动了。如果你把全部地址都配在宿主机上,它就会为所有地址应答,你的虚拟机就没什么可认领的了。

每次输入地址时,有两个数字至关重要。子网掩码是 /24,即 255.255.255.0。网关是该地址所在网段的 .1 — 所以 203.0.113.0/24 网段里的地址,网关就是 203.0.113.1。一起发放的地址彼此相邻,共用一个网关。几个月后给服务器追加的地址可能来自我们的另一个网段,那时它们就用各自的 .1。搞错这一点,是新建虚拟机无法连通任何东西的最常见原因,会让人白白耗掉一个下午。

DNS 方面,我们在宿主机上配置了 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,所以网络变更无需重启机器即可生效。保存文件后运行:

ifreload -a

如果改用 Proxmox 网页界面编辑,你的更改会写入 /etc/network/interfaces.new,直到你点击 Apply Configuration 才会生效。无论用哪种方式,都请先从账户里打开控制台。这个文件里一个拼写错误,机器就会从网络掉线;控制台走的是另一条路,仍然能用。

3

快捷方式:让虚拟机直接接入网络

从这里开始。你的虚拟机就像一台独立的电脑,插在同一个交换机上,自己与我们的路由器通信,宿主机完全不需要任何改动

在 Proxmox 中,给虚拟机添加一个网络设备,网桥设为 vmbr0,MAC 地址保留 Proxmox 自动填写的。然后在虚拟机内部设置地址。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

Ubuntu 使用 netplan,在 /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 地址。两台机器共用一个,或者复制宿主机的,两台都工作不正常。
• 使用该地址所在网段对应的网关,见第一步。
只使用你账户上的地址。 这个网桥面对的是一个真实网络,上面还有其他人的机器。一个不属于你的地址,会把别人的流量也带走。

同理:任何分发地址的东西都不该放在 vmbr0 上。不要 DHCP 服务器,不要路由器通告。如果你想自动给自家机器分配地址,用第五步,那个网桥没有出口,够不到任何人。

4

可控方式:所有流量经过宿主机

当你希望宿主机看到每一个数据包、让它的防火墙能够处理,或者你更愿意让机器完全不出现在共享网络上时,选这个方案。它们仍然从你的账户获得真实的公网地址;只是路径变了。

公网地址从网桥上拿下来,放到网卡上,宿主机被告知要转发,并代表它后面的机器应答。在宿主机上:

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 自己的写法。要永久设置,可以往 /etc/sysctl.d/ 里放一个文件,内容为:

net.ipv4.ip_forward=1
net.ipv4.conf.eno1.proxy_arp=1

多花这些功夫换来的是,宿主机能够过滤和记录每一个数据包。如果你不需要这些,第三步出错的机会更少。

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 完全一样,一次一个:想让宿主机通过 IPv6 可达,就在宿主机上放一个;其余的放在需要它们的机器上。安装程序不会配置其中任何一个,所以这些都要你自己加。

每个地址末尾写上 /64,网关是 前缀后面跟 ::1 — 2001:db8:1234::/64 内的地址,网关就是 2001:db8:1234::1。在宿主机上,紧挨着已有的网桥:

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 你自己就能设置,任何地址都行,不用问任何人。登录后打开服务器,找到 Access, Networking & rDNS 面板。每个地址都列出了它当前应答的名称,旁边有一个 Edit rDNS 按钮。IPv6 地址也一样。

输入框要的是主机名:字母、数字、连字符和点,每段 1 到 63 个字符,至少两段,末尾的点会自动补上。等几分钟生效。

如果机器要发邮件,要命名的地址是邮件实际发出的那个 — 用第五步的话,是宿主机的地址,不是虚拟机的 — 你还需要在 DNS 提供商那里配上对应的正向记录。对端的邮件服务器会检查两者是否一致,不一致就拒收。

常见问题

大家看完本页后常问的问题。

虚拟机起来了,但什么都不通。该从哪里查?

十有八九是网关。它必须是 该地址所在网段的 .1,而一台在不同时间购买地址的服务器,很容易有两个网段、两个网关。之后,再检查地址确实在你的账户上、你用的是 /24、没有其他机器用着相同的 MAC 地址。

需要把每台虚拟机的 MAC 地址发给你们吗?

不用,哪里都不用填。你的端口会学习你放上去的所有 MAC 地址,端口安全是关闭的,所以虚拟机在网络上的表现和物理机完全一样。保留 Proxmox 生成的 MAC 地址,确保没有两台机器共用即可。

为什么服务器到货时只配置了一个地址?

因为宿主机如果持有所有地址,就会为所有地址应答,你的虚拟机就没什么可认领的了。我们配置第一个地址,让机器开机就能连通,其余的留给你。开通邮件在列表下方直接说明了这一点。

第三步和第四步,该选哪个?

选第三步,除非你清楚自己为什么需要第四步。第三步不改宿主机上的任何东西,虚拟机里也不需要特殊设置,行为就像网络上的一台真实电脑。第四步适用于你希望宿主机检查并过滤所有经过的流量,并且愿意为此把每台机器配置得更仔细一些。

我可以用 DHCP 自动分配地址吗?

在没有物理端口的私有网桥上,完全可以,而且这是运行大量机器的整洁方式。但绝不能在 vmbr0 上,它连接的网络还有其他客户:那里的 DHCP 服务器或路由器通告会开始替不属于你的机器应答。

我保存了一个有问题的文件,服务器失联了。怎么办?

用账户里的控制台。它通过管理卡而不是网络连接机器,所以网络不通时它仍然能用。修复 /etc/network/interfaces,运行 ifreload -a,就回来了。在应用更改之前先打开控制台,是个值得养成的习惯。

我能获得更多地址吗?

可以。通过在线聊天或工单联系我们,并说明每个地址的用途 — 地址注册机构要求每次分配都有理由,所以这是我们首先要记录的。额外的 IPv4 地址按月计费,记在同一账户上,分配后就会出现在你的面板里。

在找运行它的服务器?

Proxmox VE 是你可以一键安装的操作系统之一,硬件完全归你所有,带控制台访问,无需购买许可证。