Jak przekierowywać porty / przekierowywać na Debianie?

12

Mam dwa pytania.

Pytanie 1: Mój debian ma interfejs eth3 z ip 192.168.57.28. Jeśli ktoś próbuje połączyć się z 192.168.57.28:1234, jak mogę przekierować żądanie na inną maszynę: 192.168.57.25:80?

Pytanie 2: Jeśli moja maszyna debian ma dwa interfejsy: eth3 z 192.168.57.28 i ppp0 z jakimś dynamicznym IP, a ktoś próbuje połączyć się przez ppp0 na porcie 1234, jak mogę przekierować żądanie na 192.168.57.25:80?

Próbowałem tego:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

ale to nie działa.

Dánjal Salberg Adlersson
źródło

Odpowiedzi:

12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

Pierwszy określa, że ​​wszystkie przychodzące połączenia TCP do portu 1234 powinny być wysyłane do portu 80 komputera wewnętrznego 192.168.57.25. Sama reguła nie kończy zadania, ponieważ iptables odrzuca wszystkie połączenia przychodzące. Następnie akceptujemy połączenie przychodzące do portu 1234 z eth3, które łączą się z Internetem za pomocą publicznego adresu IP według drugiej reguły. Dodajemy drugą regułę w łańcuchu FORWARD, aby umożliwić przekazywanie pakietów do portu 80 z 192.168.57.25.

EDYCJA: POSTROUTOWANIE dodane.

Aby śledzić połączenie. w przeciwnym razie zewnętrzny host zobaczy wewnętrzny adres IP 192.168.57.25, o którym nie ma pojęcia.

EDIT2: Właśnie dostałem podpowiedź, że powinien to być - do miejsca docelowego zamiast --to (sry)

Daywalker
źródło
Próbowałem twojej sugestii, ale to nie działa. Mogę przeglądać do 192.168.57.25 i strona wraca, ale przeglądanie do 192.168.57.28:1234 nie działa.
Dánjal Salberg Adlersson
@ DánjalSalbergAdlersson Zaktualizowano mój post (coś przeoczyłem. Sry.)
Daywalker
3
Próbowałem twojej sugestii, ale to nie zadziałało. Następnie przechodzę do ostatniego: iptables -A POSTROUTING -t nat -j MASQUERADE, to zadziałało!
Dánjal Salberg Adlersson
8

Dzięki Daywalker i Dánjal Salberg Adlersson. Po wielu przekleństwach przekierowanie portów za pomocą iptables wreszcie działa. (testowany na Debianie)

skrypt bash

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
scotty86
źródło
czy jest jakiś powód, dla którego „-s 192.168.57.25” zostało pominięte w linii POSTROUTING?
edwardsmarkf
pominięto także „-o eth3”
edwardsmarkf
Widzę -s i -o w linii POSTROUTING wydaje się być opcjonalne. jakieś przemyślenia na temat korzystania z SSL? zadałem pytanie tutaj, odnosząc się do skryptu: superuser.com/questions/1387902/…
edwardsmarkf