Iptables SNAT-Routing zu openVZ-Containern

615
Adam Dodman

Damit dies sinnvoll ist, muss ich die Szene ein wenig einstellen.

Ich habe einen dedizierten Server mit 5 öffentlichen Ips: ABC1 bis ABC5

ABC1 verwaltet den dedizierten Server selbst, und ABC2 - 5 wird für OpenVZ - Container verwendet. Ich möchte, dass jede öffentliche IP-Adresse mit mehreren Containern verbunden ist. Beispielsweise sollte ABC2 den Datenverkehr an Port 80 an den Container bei 192.168.2.1 und den Datenverkehr an Port 21 an den Container an 192.168.2.2 weiterleiten.

Wenn IPTables für NAT verwendet wird, funktioniert der Verkehr, wenn nur eine externe IP verwendet wird. Wenn ich jedoch versuche, mehrere öffentliche IP-Adressen hinzuzufügen, um die gesamte Netzwerkverbindung zu allen Containern zu verlieren, können sie nicht pingen und eingehenden Datenverkehr nicht empfangen. Der Zugriff auf den Host-Knoten bleibt jedoch bestehen.

Die Ausgabe von iptables -t nat -L auf dem Hostknoten ist unten:

Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT udp -- anywhere A.B.C.2 udp dpt:9987 to:192.168.2.1:9987 DNAT tcp -- anywhere A.B.C.2 tcp dpt:10011 to:192.168.2.2:10011 DNAT tcp -- anywhere A.B.C.2 tcp dpt:30033 to:192.168.2.2:30033 DNAT tcp -- anywhere A.B.C.3 tcp dpt:80 to:192.168.3.1:80 DNAT tcp -- anywhere A.B.C.4 tcp dpt:25565 to:192.168.4.1:25565  Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.2.0/24 anywhere to:A.B.C.2 SNAT all -- 192.168.3.0/24 anywhere to:A.B.C.3 SNAT all -- 192.168.4.0/24 anywhere to:A.B.C.4  Chain OUTPUT (policy ACCEPT) target prot opt source destination 

Der Host-Knoten hat eine physische NIC - eth0, die eine IP von ABC1 hat

Auf dem Host wird Centos 6.3 ausgeführt, und auf allen VMs wird Debian 7 ausgeführt.

Meine OpenVZ-Kernel-Version ist 2.6.32-042stab108.2

0

1 Antwort auf die Frage

0
Silvio Massina
  1. Prüfen Sie mit der richtigen Netzmaske, ob alle öffentlichen IP-Adressen an der externen Schnittstelle Ihres physischen Hosts festgelegt sind

  2. Vergewissern Sie sich, dass alle VMs als Standardgateway die IP-Adresse der Bridge haben, mit der sie verbunden sind.

  3. Stellen Sie sicher, dass ip_forwarding aktiviert ist

  4. Verwenden Sie SNAT, um die VMs hinter den korrekten öffentlichen IPs zu maskieren

  5. Verwenden Sie DNAT, um eingehenden Datenverkehr an die richtigen VMs weiterzuleiten