Proxmox VE(路由和端口转发问题)

Proxmox VE(路由和端口转发问题)

我已经安装了 PVE,我收到了三个公共 IP 地址,其中两个在同一范围内,第三个在不同范围内。我想给 PVE 主机一个公共 IP 以便外部访问,另外两个给虚拟机。我还想创建两个具有私有 IP 地址的虚拟机并进行端口转发。以下是我的配置:

auto lo

iface lo inet loopback

auto eth0
iface eth0 inet static

address  x.x.203.141
netmask  255.255.255.128
pointopoint x.x.203.137
gateway  x.x.203.137
broadcast  x.x.203.255
#post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp


iface eth1 inet manual

    auto vmbr0
    iface vmbr0 inet static

    address x.x.203.141
    netmask 255.255.255.128
    #gateway x.x.203.137
    bridge_ports none
    bridge_stp on
    bridge_fd 0
    bridge_maxwait 0



   iface vmbr1 inet manual
    bridge_ports none
    bridge_stp on
    bridge_fd 0

up ip route add x.x.203.142/32 dev vmbr0  ##IP of the first VM
up ip route add x.x.220.37/32 dev vmbr1   ## IP of the second VMS

auto vmbr2

iface vmbr2 inet static

address 192.168.0.254
netmask 255.255.255.0
bridge_ports none
bridge_stp on
bridge_fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward

post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE

post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE

但是我在外部与主机失去 ping 通。而且,第二台虚拟机具有不同范围的公共 IP,我的互联网速度非常慢?另一件事是,我无法从外部通过私有 IP 地址 ssh 连接到虚拟机。

提前感谢您的帮助!

答案1

实现此目的的最简单方法是通过桥接(而不是代理 arp)为虚拟机提供白色(公共)IP。您仍然可以为主机上的所有虚拟机设置防火墙流量,因为 Linux 中的 netfilter 支持使用 iptables 规则检查桥接流量。

在这种情况下,配置可能看起来像这样:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
    address  x.x.203.141
    netmask  255.255.255.128
    pointopoint x.x.203.137
    gateway  x.x.203.137
    broadcast  x.x.203.255
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto eth1
iface eth1 inet manual

auto vmbr1
iface vmbr1 inet manual
    bridge_ports eth1
    bridge_stp off
    bridge_fd 0

auto vmbr2
iface vmbr2 inet static
    address 192.168.0.254
    netmask 255.255.255.0
    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 '192.168.0.0/24' -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE

您必须将应该出现在 eth0 上的 VM 放入 vmbr0,将应该出现在 eth1 上的 VM 放入 vmbr1,其他所有内容都进入 vmbr2,来自该网络的任何流量都将被伪装。请注意,vmbr1 没有任何 IP 地址,它不需要任何 IP 地址,因为该桥的唯一目的是连接 eth1 和 VM 虚拟接口。所有主机通信都通过 vmbr0 完成。

我不知道您为什么为 eth0 添加“pointtopoint”关键字。我将其保留在 vmbr0 中;但我仍然认为这是一个错误,没有必要。您的 eth0 上有 BMA 网络,掩码为 /25,它有 128 个地址(其中 126 个可用),因此“pointtopoint”(这意味着您只有一个对等体)在那里看起来是错误的。我还在所有网桥中禁用了 stp。它没有多大用处,因为您不会桥接连接到其他地方的任何接口。

无论如何,tcpdump 是你最好的朋友。

您可以设置代理 arp,而不是桥接第一个虚拟机(出现在 eth0 上)。我认为这会使事情变得不那么稳健,我建议您不要这样做。

根据您的描述,我推断您的主机应该只有一个 IP 地址,并且该地址应该在 eth0 上可见,因此 eth1 在主机中将没有编号(不应该有任何地址),只有 VM 地址会出现在那里。我不知道是否可以在 Linux 中在无编号接口(没有任何 IP 地址的接口)上设置代理 arp 和路由,因此为了澄清这部分,我需要自己做一些调查。

相关内容