设置具有多个 VLAN 的 KVM 主机,每个 VLAN 都连接到“自己的”外部 IP 地址

设置具有多个 VLAN 的 KVM 主机,每个 VLAN 都连接到“自己的”外部 IP 地址

我正在尝试(但遇到了困难)设置一个干净的 KVM 环境,其中包括:一台 Ubuntu (20.04) 主机(带有一个 NIC)、多个 ubuntu KVM 客户机、2 个公共 IP 以及每个 IP 一个 Vlan。基本上看起来像这样: 理想结构


我的需求是:

  • 我的主机网卡上有 2 个公网 IP 地址
  • 我希望为我的客户机分配 2 个 VLAN,并且不同 VLAN 上的机器之间不进行通信
  • 每个 VLAN 连接到一个公共 IP
  • 所有客人至少可以访问互联网,但不一定可以从外部访问(“单向”,经典 NAT?)
  • 一些客人充当守护进程/服务器,可以通过互联网访问(“双向”,端口重定向?)
  • 主机应该仍然可以访问互联网
  • 在我的主机外部(向我的提供商的路由器)只公布了 2 个(每个 IP 一个)mac 地址

我没有找到任何关于如何实现这种架构的在线资源,而且我的尝试也没有

尚未成功。我认为我可以通过正确的桥接和 (NAT) VLAN 组合来实现它,但我的一些研究表明我可能需要使用 Iptables 进行路由。


是否有可能实现这种结构?如果可以,如何实现?

  • 用于主机网络配置(neptlan、ifup、iptable 等)
  • 和 libvirt 配置(virsh xml)

编辑:
为了使我的需求更加清晰:

Traffic from 0.0.0.0/0 destined to X.X.X.X on port 443 must be forwarded to VM1 in VLAN-1
Traffic from 0.0.0.0/0 destined to X.X.X.X on port 5432 must be forwarded to VM2 in VLAN-1
Traffic from 0.0.0.0/0 destined to Y.Y.Y.Y on port 443 must be forwarded to VM3 in VLAN-2
Traffic from VM1 in VLAN2 destined to 0.0.0.0/0 on any port must be routed through Y.Y.Y.Y ?

答案1

根据您的场景,我做出以下假设:

Traffic from 0.0.0.0/0 destined to X.X.X.X on port 443 must be forwarded to VM1 in VLAN-1
Traffic from 0.0.0.0/0 destined to X.X.X.X on port 5432 must be forwarded to VM2 in VLAN-1
Traffic from 0.0.0./0 destined to Y.Y.Y.Y on port 443 must be forwarded to VM3 in VLAN-2

如果我的假设正确,我建议使用 iptables。在这种情况下,您将执行端口转发。从 KVM 主机执行以下操作:

$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d X.X.X.X --dport 443 -j DNAT --to-destination 10.0.1.1:443 #(VM1 in VLAN1)
$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d X.X.X.X --dport 5432 -j DNAT --to-destination 10.0.1.2:5432 #(VM2 in VLAN1)
$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d Y.Y.Y.Y --dport 443 -j DNAT --to-destination 10.0.2.3:5432 #(VM3 in VLAN2)
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #(Allow retrun traffic)

相关内容