ich beschäftige mich zur Zeit mit iptables und folgendes Problem macht mich gerade wahnsinnig:
Auf einem Debian läuft KVM (Hostet einen Windows 2008 R2) und Docker. Docker hat eine Bridge docker0 angelegt die ich mit KVM teile. Der Windows Server kommt einwandfrei ins Netz.
Nun möchte ich bestimmte ankommende Ports auf dem Host mit iptables an den Win2k8R2 Server weiter routen.
Setup:
o eth0 ist ans Netz angeschlossen
o docker0 ist die Bridge die auf das Netz 172.17.0.0/24 zeigt
o Windows hat die IP 172.17.0.100
o Windows kann ohne Probleme ins Netz (browse, ping, ftp usw.)
ifconfig:
Code: Alles auswählen
docker0 Link encap:Ethernet HWaddr 02:42:6d:4c:63:59
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:365500 errors:0 dropped:0 overruns:0 frame:0
TX packets:487830 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:30608447 (29.1 MiB) TX bytes:2820497169 (2.6 GiB)
eth0 Link encap:Ethernet HWaddr 55:55:55:55:55:55
inet addr:555.55.55.109 Bcast:555.55.55.127 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:178690566 errors:0 dropped:0 overruns:0 frame:0
TX packets:307543734 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:86757606262 (80.7 GiB) TX bytes:128953728252 (120.0 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:639846160 errors:0 dropped:0 overruns:0 frame:0
TX packets:639846160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:177336092518 (165.1 GiB) TX bytes:177336092518 (165.1 GiB)
vnet0 Link encap:Ethernet HWaddr fe:54:00:38:de:57
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:60678 errors:0 dropped:0 overruns:0 frame:0
TX packets:79867 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:7488594 (7.1 MiB) TX bytes:78071872 (74.4 MiB)
Code: Alles auswählen
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 555.55.55.97 0.0.0.0 UG 0 0 0 eth0
555.55.55.96 555.55.55.97 255.255.255.224 UG 0 0 0 eth0
555.55.55.96 0.0.0.0 255.255.255.224 U 0 0 0 eth0
555.55.55.97 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
Code: Alles auswählen
#!/bin/bash
INT_IFACE=eth0
EXT_IFACE=docker0
INT_IP="172.17.0.100"
PORT_FORW_TCP="2344 2345"
PORT_FORW_UDP="2312 2123 2124 2125"
# Set SNAT rule
echo "iptables -t nat -A POSTROUTING -o $EXT_IFACE -j SNAT --to-source=$INT_IP"
# Loop over TCP & UDP Ports
for i in $PORT_FORW_TCP; do
echo "iptables -t nat -I PREROUTING -i $INT_IFACE -p tcp --dport $i -j DNAT --to-destination $INT_IP:$i"
echo "iptables -A FORWARD -i $INT_IFACE -o $EXT_IFACE -d $INT_IP -p tcp --dport $i -j ACCEPT"
done
for i in $PORT_FORW_UDP; do
echo "iptables -t nat -I PREROUTING -i $INT_IFACE -p udp --dport $i -j DNAT --to-destination $INT_IP:$i"
echo "iptables -A FORWARD -i $INT_IFACE -o $EXT_IFACE -d $INT_IP -p udp --dport $i -j ACCEPT"
done
Code: Alles auswählen
iptables -t nat -A POSTROUTING -o docker0 -j SNAT --to-source=172.17.0.100 iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 2344 -j DNAT --to-destination 172.17.0.100:2344
iptables -A FORWARD -i eth0 -o docker0 -d 172.17.0.100 -p tcp --dport 2344 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 2345 -j DNAT --to-destination 172.17.0.100:2345
iptables -A FORWARD -i eth0 -o docker0 -d 172.17.0.100 -p tcp --dport 2345 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 -p udp --dport 2312 -j DNAT --to-destination 172.17.0.100:2312
iptables -A FORWARD -i eth0 -o docker0 -d 172.17.0.100 -p udp --dport 2312 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 -p udp --dport 2123 -j DNAT --to-destination 172.17.0.100:2123
iptables -A FORWARD -i eth0 -o docker0 -d 172.17.0.100 -p udp --dport 2123 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 -p udp --dport 2124 -j DNAT --to-destination 172.17.0.100:2124
iptables -A FORWARD -i eth0 -o docker0 -d 172.17.0.100 -p udp --dport 2124 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 -p udp --dport 2125 -j DNAT --to-destination 172.17.0.100:2125
iptables -A FORWARD -i eth0 -o docker0 -d 172.17.0.100 -p udp --dport 2125 -j ACCEPT
Code: Alles auswählen
...
Chain FORWARD (policy DROP) target prot opt source destination ...
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere 172.17.0.100 tcp dpt:2444
ACCEPT udp -- anywhere 172.17.0.100 udp dpt:2445
ACCEPT tcp -- anywhere 172.17.0.100 tcp dpt:2344
ACCEPT tcp -- anywhere 172.17.0.100 tcp dpt:2345
ACCEPT udp -- anywhere 172.17.0.100 udp dpt:2312
ACCEPT udp -- anywhere 172.17.0.100 udp dpt:2123
ACCEPT udp -- anywhere 172.17.0.100 udp dpt:2124
ACCEPT udp -- anywhere 172.17.0.100 udp dpt:2125
...
Ich habe dann auch versucht explizit das routing zwischen eth0 und docker0 in beide Richtungen zu erlauben
Code: Alles auswählen
iptables -A FORWARD -i docker0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o docker0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Vielleicht kann mir ja von euch jemand sagen was ich hier falsch bache bzw. wie man das richtig macht.
Vielen Dank im voraus!
Gruß
Blacksheep