DD-WRT: Jak zezwolić na przekierowanie portów, aby zastosować do żądań pochodzących z sieci LAN?

26

Z oryginalnym oprogramowaniem mojego routera miałem przekierowanie portów zdefiniowane z portu 80 na serwer w sieci LAN, którego użyłem w połączeniu z zewnętrzną dynamiczną usługą DNS.

Uaktualniłem do DD-WRT i niestety przekierowanie portów działa tylko dla żądań na zewnętrzny adres IP spoza sieci LAN. Z wnętrza sieci LAN mogę uzyskać dostęp do serwera tylko poprzez jego wewnętrzny adres IP.

Jak mogę uzyskać zewnętrzne IP (a zatem nazwy domeny podłączony do zewnętrznego dynamicznym IP) być odpowiednio dostępny również z wewnątrz sieci LAN?

Wolę dowiedzieć się, jak to osiągnąć za pomocą standardowych definicji DD-WRT, ale użycie np. Iptables nie wchodzi w rachubę.

UrEl
źródło

Odpowiedzi:

25

Wygląda na to, że jest to błąd w najnowszych kompilacjach DD-WRT.

Użyj iptables:

iptables -t nat -I POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE

(zmień swoją podsieć zgodnie z określoną siecią LAN)

Od http://hax.at/text/41

UrEl
źródło
To nie było oczywiste! działało jak urok :)
Jay
Ustawiłem to jako polecenie startowe i zrestartowałem router, ale bez zmian - wciąż nie działa.
Timwi
Pracował dla mnie. Dziękuję Ci bardzo. Teraz mogę uzyskać dostęp do adresu IP przydzielonego przez ddns z mojej sieci wewnętrznej na routerach DD-WRT.
nusi
3
Działa to dla mnie, ale tylko wtedy, gdy zapisałem go jako skrypt zapory ogniowej, a nie skrypt startowy.
Jarett Millard
@Timwi - Jak wspomniał Jarett, ja również musiałem umieścić to w sekcji „Firewall”, a nie w sekcji „Uruchamianie”.
dan_linder
4

W duchu odpowiedzi UrEl: iptablesna stronie DD-WRT można znaleźć skrypt samokonfigurujący, który można po prostu skopiować i wkleić bez dalszej adaptacji :

insmod ipt_mark 
insmod xt_mark 
iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001 
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark 
iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE 

Jak zauważył Jarett, należy go używać jako skryptu zapory ogniowej, a nie jako skryptu uruchamiania.

krlmlr
źródło
To rozwiązanie działało dla mnie lepiej niż UrEI, ponieważ to drugie uniemożliwiało połączenie mojego telefonu SIP.
jamix
Jaka jest różnica między tą regułą a regułą @ UrlEl (poza dynamicznym uzyskiwaniem interfejsu WAN i adresu IP)?
Piotr Dobrogost
1

Spróbuj wyłączyć „Filtruj przekierowanie WAN NAT” na karcie Bezpieczeństwo-> Zapora. Z opisu pomocy:

Filtruj przekierowanie NAT WAN Zapobiega używaniu przez hosty w sieci LAN adresu WAN routera do kontaktowania się z serwerami w sieci LAN (skonfigurowanymi przy użyciu przekierowania portów).

Tobias Plutat
źródło
To było już wyłączone (domyślnie). Jakieś inne pomysły?
UrEl
To dziwne - w mojej sieci LAN to ustawienie robi różnicę. Z której wersji korzystasz? Może powinieneś dokładnie sprawdzić przekierowanie portów - być może coś tam nie umknęło (może adresy IP zmieniły się między twoim dostępem zewnętrznym i wewnętrznym, w ten sposób przerywając przekierowanie portów?)
Tobias Plutat
Używam 16994. W międzyczasie znalazłem to: hax.at/text/41
UrEl
Och, jak kocham buggy wydania DD-WRT! (Nawiązywanie połączenia z klientami trwało wieki przez pewien czas ... dopóki nie dowiedziałem się, że nazwy hostów w dzierżawach statycznych powinny zawierać tylko znaki alfabetyczne. Arrgh!)
Tobias Plutat
1

Wygląda na to, że twoim prawdziwym problemem jest to, że potrzebujesz dwóch widoków rekordu DNS A. Zewnętrznie dynamiczne dns wskazuje na publiczny adres IP sieci, który przekazuje port 80 do lokalnego hosta. Wszystko, co musisz zrobić, to dodać wpis w dnsmasq z rekordem A wskazującym tę samą w pełni kwalifikowaną nazwę domeny na adres IP hosta lokalnego dla hostów lokalnych. Możesz to zrobić, dodając następujące informacje na stronie Usługi / Dodatkowe opcje dnsmasq:

 address=/www.mydomain.com./xx.xx.xx.xx

po prostu zamień xx na lokalny adres ip, a nazwę domeny na swoją nazwę domeny. Nie zapomnij kropki końcowej, ponieważ doda do niej nazwę Twojej lokalnej domeny.

systemconcierge
źródło
To właśnie zrobiłem i działa! Ale czy można to zrobić dla niektórych portów? Działa to tylko wtedy, gdy przekierujesz porty na jeden komputer. Jeśli przekierowujesz porty na wiele komputerów, to nie zadziała ...
rinogo