LXC, Portweiterleitung und iptables


8

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 7002auf dem Host an den Port 7000auf 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 iptableswerden 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

Hast du die INPUTKette überprüft ? Vielleicht ist die Politik REJECTda.
Michael Härtl

Politik istACCEPT
Roberto Aloi

Entschuldigung, ich meinte die FORWARDKette. Überprüfen Sie auch, ob die IP-Weiterleitung aktiviert ist : cat /proc/sys/net/ipv4/ip_forward.
Michael Härtl

ip_forwardist eingestellt auf1
Roberto Aloi

FORWARDPolitik ist auchACCEPT
Roberto Aloi

Antworten:


3

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:

iptables -A INPUT -p tcp --dport 7002 -j ACCEPT

1

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 eingeschaltet IP 10.0.3.248und das Gateway ist10.0.3.1 . Ich betreibe einen Webserver im Gast und möchte den Weiterleitungsverkehr von ${host}:8888nach portieren 10.0.3.248:80. Es folgen die relevanten iptables-Einträge:

-A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.248:80
-A POSTROUTING -j MASQUERADE

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:


0

Ich musste eine FORWARD-Regel hinzufügen

iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT

0

ok, meine 5 Cent aus dem Jahr 2018:

Ich habe LXC installiert und herumgespielt. Meine Container-IP ist10.0.0.10

Ich habe diese Regel hinzugefügt:

iptables -t nat -A PREROUTING -p tcp -i ens192 --dport 81 -j DNAT --to-destination 10.0.0.10:22

Es hat nicht funktioniert. Dann wurde mir klar, dass selbst die FORWARD-Richtlinie AKZEPTIERT ist. Es gibt eine Regel, die alle FORWARD-Richtlinien blockiert.

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            10.0.0.0/24          ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       10.0.0.0/24          0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    5   268 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Also musste ich oben Regel einspritzen:

iptables -I FORWARD -p tcp -d 10.0.0.10 --dport 22 -j ACCEPT

Jetzt vorwärts host:81-> 10.0.0.10:22funktioniert.


-2

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.