我在 Hetzner 有一台服务器,有多个公网 IP。我将其配置为桥接模式。到目前为止一切正常,但我该如何告诉单个虚拟机使用此公网 IP 地址上网?那么网关呢?
auto lo
iface lo inet loopback
auto enp7s0
iface enp7s0 inet static
address 88.188.61.127/27
gateway 88.188.61.161
post-up sysctl -w net.ipv4.ip_forward=1
post-up iptables -t nat -A PREROUTING -i enp7s0 -p tcp -m multiport ! --dport 45735 -j DNAT --to 10.10.10.1
post-up iptables -t nat -A PREROUTING -i enp7s0 -p udp -j DNAT --to 10.10.10.1
auto vmbr0
iface vmbr0 inet static
address 88.188.61.127/27
bridge-ports none
bridge-stp off
bridge-fd 0
up ip route add 89.178.66.171/27 dev vmbr0
auto vmbr1
iface vmbr1 inet static
address 10.10.10.0/31
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s '10.10.10.1/31' -o enp7s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.1/31' -o enp7s0 -j MASQUERADE
#Mikrotik WAN Proxmox LAN
auto vmbr2
iface vmbr2 inet static
bridge-ports none
bridge-stp off
bridge-fd 0
#DMZ
auto vmbr3
iface vmbr3 inet static
bridge-ports none
bridge-stp off
bridge-fd 0
#VM-Intern
source /etc/network/interfaces.d/*
答案1
你任何一个为虚拟机分配其他 IP(即不是举办),或者您在主机上执行 NAT,在这种情况下,您可以在 SNAT 规则中匹配虚拟机的私有 IP,并在 DNAT 规则中匹配公共 IP。(您可以将公共 IP 分配给某些虚拟机,而对其他虚拟机执行 NAT,这完全没问题。)
第一种方法(直接在虚拟机/容器中获取 IP)通常比较容易,麻烦也较少,但你需要再次路由这些 IP 而无需 NATting,或者桥接 PVE 的主“WAN”接口和在 Hetzner 网络界面中指定 VM MAC,以允许这些 MAC 具有 Internet 连接。Hetzner 通常只提供选定的地址,而不是整个子网。
“不通过 NAT 进行主机路由”似乎是最好的方法。为此:
- 你保留
enp7s0
现在的设置(我相信这就是你正在工作的 PVE WAN) - 你分配相同的 IP 地址,但使用 /32 网络掩码到“公共 IP 桥”,我假设它是你的
vmbr0
。 - 您可以通过桥接接口向选定的地址添加直接 /32 路由
- 在虚拟机或容器上,您可以添加到该地址的直接路由
vmbr0
并将其设置为默认网关。
举例来说,如果您获得了一个89.178.66.171
附加地址,则可以在主机上进行设置:
auto vmbr0
iface vmbr0 inet static
address 88.188.61.127/32
bridge-ports none
bridge-stp off
bridge-fd 0
up ip route add 89.178.66.171 dev vmbr0
在插入此桥的虚拟机上:
auto ens18
iface ens18 inet static
address 89.178.66.171/32
up ip route add 88.188.61.127 dev ens18
up ip route add default via 88.188.61.127
这是基于我过去的经验。情况可能会发生变化。如果您能展示他们给您的说明就更好了,这样我可以帮助您将其调整为 PVE。