2016-11-29 6 views
0

Wir haben Proxmox virtuelle Umgebung mit ein paar virtuellen Maschinen. Hostserver haben mehrere externe IP-Adressen. Wir verwenden iptables, um Verbindungen zu bestimmten externen IP + -Ports an ausgewählte virtuelle Maschinen weiterzuleiten. Und wir verwenden NAT für ausgehende Verbindungen von VMs.Kann keine Verbindung zu externen IP von lokalen Netzwerk hinter IPTables NAT

Bis jetzt funktioniert alles. Das Problem tritt auf, wenn VMs versuchen, eine Verbindung zur externen Host-IP herzustellen, die nicht funktioniert.

Soweit ich verstehe, was wir brauchen, ist Haarnadel NAT (NAT Reflexion). Aber wir sind nicht in der Lage, es durch Anweisungen, die wir gefunden haben, zu arbeiten.

Unsere iptables-Regeln:

# === FIREWALL === 
*filter 
:INPUT ACCEPT [3174:1555907] 
:FORWARD ACCEPT [2521:547542] 
:OUTPUT ACCEPT [2753:2039466] 
:fail2ban-ssh - [0:0] 

# allow returnig packets 
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
# drop all other 
-A INPUT -p tcp -d 1.2.3.4/32 -j DROP 

COMMIT 

# === NAT === 

*nat 
:PREROUTING ACCEPT [140854:7345476] 
:POSTROUTING ACCEPT [2635:170444] 
:OUTPUT ACCEPT [25596:1617170] 

# INCOMING 
-A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.60.10:80 
-A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.60.10:443 
-A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.60.20:80 

# OUTGOING 
-A POSTROUTING -d 10.0.60.10 -s 10.0.0.0/16 -p tcp --dport 80 -j SNAT --to 10.0.0.1 
-A POSTROUTING -o vmbr0 -j SNAT --to-source 1.2.3.4 

COMMIT 

1.2.3.4 - externe IP-Adresse des Host-

10.0.60.10, 10.0.60.20 - interne IP-Adressen von VMs

10.0.0.1 - interne IP host

Antwort

0
iptables -A POSTROUTING -t nat -s 10.0.0.0/16 -d 1.2.3.4 -j MASQUERADE 
+0

Doesn‘Arbeit entweder. Ich habe bereits eine ähnliche Regel versucht (nur mit -s 10.0.0.0/16 für alle virtuellen Maschinen) –

+0

dann benutze 'iptables -A PREROUTING -t nat -s 10.0.0.0/16 -d 1.2.3.4 -j DNAT - bis 10.0 .60.10' (aus Versehen) –

+0

Dies sollte ersetzen? -A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 80 -j DNAT - zum Ziel 10.0.60.10:80 –

0

Gelöst es! Ich war ein Tippfehler auf meiner Seite.

Dies funktioniert Lösung für Hairpin NAT:

# === FIREWALL === 
*filter 
:INPUT ACCEPT [3174:1555907] 
:FORWARD ACCEPT [2521:547542] 
:OUTPUT ACCEPT [2753:2039466] 
:fail2ban-ssh - [0:0] 

# allow returnig packets 
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
# drop all other 
-A INPUT -p tcp -d 1.2.3.4/32 -j DROP 

COMMIT 

# === NAT === 

*nat 
:PREROUTING ACCEPT [140854:7345476] 
:POSTROUTING ACCEPT [2635:170444] 
:OUTPUT ACCEPT [25596:1617170] 

# INCOMING 
-A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.60.10:80 
-A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.60.10:443 
-A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.60.20:80 

# OUTGOING 
-A POSTROUTING -s 10.0.0.0/16 -d 10.0.0.0/16 -p tcp -j SNAT --to-source 10.0.0.1 
-A POSTROUTING -o vmbr0 -j SNAT --to-source 1.2.3.4 

COMMIT 
Verwandte Themen