Verwenden von iptables, um einem LXC-Container eine routbare IP zuzuweisen
Ich verwende Docker, um LXC-Container zu verwalten. Momentan konfiguriert Docker den zugrunde liegenden LXC-Container mit Host-Only-Routing und verwendet dann iptables / DNAT, um Löcher in den Container zu stanzen, sodass er über die IP-Adresse des Hosts und einen "zufälligen" Port erreichbar ist.
Dies wird aus mehreren Gründen für uns nicht funktionieren. Wir möchten, dass jeder Container über seine eigene (routbare) IP erreichbar ist. Ich habe also mit der Verwendung von IP-Tabellen dafür gespielt. Es funktioniert gut für mich zu Hause (läuft auf Ubuntu Raring), aber nicht bei der Arbeit (läuft auf Ubuntu Precise). Ich vermute, es gibt einige Standard-Kernel-Konfigurationen, die geändert wurden, die mir nicht bekannt sind.
Folgendes mache ich:
1) Einrichten einer neuen virtuellen Macvlan-Schnittstelle, damit ich DHCP verwenden kann, um eine IP zu erhalten:
ip link add container1 link eth0 type macvlan dhclient container1 ip link set container1 up
Zu diesem Zeitpunkt habe ich eine neue Schnittstelle mit eigener IP-Adresse und Standard-Gateway, Subnetzmaske usw., die der zugrunde liegenden physischen Schnittstelle ( eth0
) entspricht.
2) Konfigurieren Sie IP-Tabellen für den eingehenden DNAT-Verkehr von der IP der neuen Schnittstelle. 10.10.10.88
Angenommen, die neue Schnittstelle hat IP und der Docker-gesteuerte LXC-Container hat IP 172.17.0.20.
iptables -t nat -N CONTAINER1 iptables -t nat -A PREROUTING -p all -d 10.10.10.88/32 -j CONTAINER1 iptables -t nat -A CONTAINER1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.20:8080
(Hier nehme ich auch den Port von 80 auf 8080 NAT).
Wie gesagt, das funktioniert gut zu Hause. Ich kann diesen Container jetzt vom Host als 172.17.0.20:8080 und von einem anderen Computer in meinem LAN als 10.10.10.88:80 erreichen. (Interessanterweise kann ich es am 10.10.10.88:80 nicht vom Host aus erreichen, aber ich denke, ich brauche eine andere Regel in der OUTPUT-Kette, um das zu verstehen.) Aber es funktioniert nicht bei der Arbeit.
Wenn ich bei der Arbeit diesen Container über seine routbare IP-Adresse (in diesem Beispiel 10.10.10.88) erreichen möchte, sehe ich die Pakete, die ankommen und die iptables-Regeln bis zur DNAT-Regel übereinstimmen. Ich kann dies sowohl mit den von iptables -L gedruckten Paketzählern als auch mit dem TRACE-Ziel für die Raw-Tabelle und der Überwachung des Kernelprotokolls beobachten. Aber nach Übereinstimmung mit der DNAT-Regel verschwinden die Pakete einfach. Auf meinem Heimcomputer (der funktioniert) kann ich nach dem DNAT die Pakete durch die INPUT-Kette in der Filtertabelle mit der neuen (NAT'ed) Ziel-IP sehen. Auf meiner Arbeitsmaschine passiert dieser Schritt nicht.
Bei beiden Maschinen ist die IP-Weiterleitung aktiviert.
0 Antworten auf die Frage
Verwandte Probleme
-
4
Ich habe einen Airport Extreme Router installiert und eine Warnung vor "Double NAT" erhalten. Warum...
-
7
Wie kann ich meinen Heim-PC zum Webserver machen?
-
3
Welche Hardware und welches Betriebssystem sollte ich für mein Heimrouter / Server-Setup verwenden,...
-
2
Protokollierung der Kommunikation zwischen zwei VMs
-
4
Ist es unter Linux iptables möglich, den Namen des Prozesses / Befehls zu protokollieren, der eine a...
-
1
Zugriff auf eine Website über die öffentliche IP-Adresse des Webservers über einen PC im selben LAN
-
2
Warum ist meine gemeinsame Nutzung der Internetverbindung auf mysteriöse Weise unterbrochen?
-
3
VirtualBox-NAT-Portweiterleitung auf Ubuntu 64?
-
1
Fehlende Freigabe-Registerkarte für Netzwerkeigenschaften
-
2
Zwei öffentliche IPs hinter einem Kabelmodem mit D-Link DIR-300