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.

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)


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.