Ich habe einen LXC-Container ( 10.0.3.2
), der auf einem Host ausgeführt wird. Im Container am Port wird ein Dienst ausgeführt 7000
.
Vom Host ( 10.0.3.1
, lxcbr0
) aus kann ich den Service erreichen:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Ich würde gerne den Dienst, der im Container läuft, der Außenwelt zugänglich machen. Daher möchte ich den Port 7002
auf dem Host an den Port 7000
auf dem Container weiterleiten :
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Was zu ( iptables -t nat -L
) führt:
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Trotzdem kann ich vom Host über den weitergeleiteten Port nicht auf den Dienst zugreifen:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Ich habe das Gefühl, dass mir hier etwas Dummes fehlt. Welche Dinge soll ich überprüfen? Was ist eine gute Strategie, um diese Situationen zu debuggen?
Der Vollständigkeit halber iptables
werden die Hosts wie folgt eingestellt:
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
iptables
port-forwarding
lxc
Roberto Aloi
quelle
quelle
INPUT
Kette überprüft ? Vielleicht ist die PolitikREJECT
da.ACCEPT
FORWARD
Kette. Überprüfen Sie auch, ob die IP-Weiterleitung aktiviert ist :cat /proc/sys/net/ipv4/ip_forward
.ip_forward
ist eingestellt auf1
FORWARD
Politik ist auchACCEPT
Antworten:
Anscheinend haben Sie den 7002-Port in 10.0.3.1 blockiert, da Ihre Standardrichtlinie DROP ist
Versuchen Sie, es zu den INPUT-Regeln hinzuzufügen:
quelle
Ich bin auf das gleiche Problem gestoßen. Ich habe noch keine Lösung gefunden, aber im Folgenden notiere ich einige Beobachtungen.
Ich habe einen Host-
${host}
Computer (Ubuntu 12.04) und er führt einen Gastcomputer über LXC aus. Der Gast ist eingeschaltetIP 10.0.3.248
und das Gateway ist10.0.3.1
. Ich betreibe einen Webserver im Gast und möchte den Weiterleitungsverkehr von${host}:8888
nach portieren10.0.3.248:80
. Es folgen die relevanten iptables-Einträge:Mit der aktuellen Konfiguration kann ich den Webserver am 10.0.3.248:80 erfolgreich von einem anderen physischen Computer aus besuchen. Es schlägt jedoch fehl, wenn ich versuche, 10.0.3.248:80 von zu besuchen
${host}
. Vielleicht können Sie versuchen, diesen Dienst in LXC von einem anderen Computer aus zu besuchen.Mein Verständnis ist, dass
${host}
das Paket beim Besuch von die Loopback-Schnittstelle durchläuft und direkt in die INPUT-Kette eingeht. Obwohl ich alles auf INPUT zulasse, wird kein Dienst abgehört${host}:8888
. Von Wireshark sehe ich, dass ein RST gesendet und empfangen wird. Wenn ich von einem anderen physischen Computer aus besuche, geht das Paket in die PREROUTING-Kette und wurde wie erwartet DNAT-bearbeitet.Ein verwandter Beitrag:
quelle
Ich musste eine FORWARD-Regel hinzufügen
quelle
ok, meine 5 Cent aus dem Jahr 2018:
Ich habe LXC installiert und herumgespielt. Meine Container-IP ist
10.0.0.10
Ich habe diese Regel hinzugefügt:
Es hat nicht funktioniert. Dann wurde mir klar, dass selbst die FORWARD-Richtlinie AKZEPTIERT ist. Es gibt eine Regel, die alle FORWARD-Richtlinien blockiert.
Also musste ich oben Regel einspritzen:
Jetzt vorwärts
host:81
->10.0.0.10:22
funktioniert.quelle
Ihr Container ist über eine Host-Bridge-Schnittstelle vom LAN aus zugänglich und somit mit demselben Subnetz wie der Host verbunden.
Ihr Router muss diese Ports an Ihren Container weiterleiten.
quelle