iptables: Lokale Anfrage mit NAT umleiten

8

Ich möchte lokale Anfragen an einen Port umleiten, der mit NAT übersetzt wurde. Ich habe folgende Regeln:

iptables -t nat -A PREROUTING -p tcp --dport 9020 -j DNAT --to 10.0.3.11:80

Anfragen von localhost werden jedoch abgelehnt:

wget http://127.0.0.1:9020
Connecting to 127.0.0.1:9020... failed: Connection refused.

Wenn ich von einem anderen Computer aus eine Verbindung herstelle, funktioniert dies. Gibt es eine Möglichkeit, dies zu tun, ohne den Kernel neu zu kompilieren CONFIG_IP_NF_NAT_LOCAL=y? https://wiki.debian.org/Firewalls-local-port-redirection (was veraltet zu sein scheint).

Aktualisieren:

iptables -L -v -n --line-numbers -t nat::

Chain PREROUTING (policy ACCEPT 26 packets, 3230 bytes)
num   pkts bytes target     prot opt in     out     source            destination    
4       0   0     DNAT      tcp  --  *       *      0.0.0.0/0         0.0.0.0/0   tcp dpt:9020 to:10.0.3.11:80

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source                destination         
1        0     0 MASQUERADE all  --  *       *      10.0.0.0/16           0.0.0.0/0 
Tombart
quelle

Antworten:

9

Basierend auf den Kommentaren von @Hauke ​​Laging habe ich Folgendes zusammengestellt:

# connections from outside
iptables -t nat -A PREROUTING -p tcp --dport 9020 -j DNAT --to 10.0.3.11:80
# for local connection
iptables -t nat -A OUTPUT -p tcp --dport 9020 -j DNAT --to 10.0.3.11:80

# Masquerade local subnet
iptables -t nat -A POSTROUTING -s 10.0.3.0/16 -j MASQUERADE
iptables -A FORWARD -o lxcbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i lxcbr0 -o eth0 -j ACCEPT
iptables -A FORWARD -i lxcbr0 -o lo -j ACCEPT

Wo lxcbr0ist die Schnittstelle im 10.0.3.0/16Subnetz und eth0ist die Schnittstelle mit öffentlichen IP-Addrees.

Tombart
quelle
1
Ich habe lange danach gesucht (ein paar halbe Stunden) !!!
Stan