Ubuntu

設置具有多個 VLAN 的 KVM 主機,每個 VLAN 都連接到“自己的”外部 IP 地址

  • October 18, 2020

我正在嘗試(並且很難)設置一個乾淨的 KVM 環境:一個 Ubuntu (20.04) 主機(帶有一個 NIC)、多個 ubuntu KVM 來賓、2 個公共 IP 和每個 IP 一個 Vlan。基本上看起來像: 理想結構


我的需求是:

  • 我有 2 個公共 IP 地址連接到我的主機 NIC
  • 我想為我的客人使用 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 ?

看看你的場景,我假設如下:

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)

引用自:https://serverfault.com/questions/1039184