DD-WRT: Wie kann die Portweiterleitung auf Anforderungen angewendet werden, die aus dem LAN stammen?

26

Mit der ursprünglichen Firmware meines Routers hatte ich eine Portweiterleitung von Port 80 zum Server im LAN definiert, die ich in Verbindung mit einem externen dynamischen DNS-Dienst verwendete.

Ich habe jetzt auf DD-WRT aktualisiert und leider funktioniert die Portweiterleitung nur für Anfragen an die externe IP von außerhalb des LAN. Aus dem LAN heraus kann ich nur über die interne IP auf den Server zugreifen.

Wie kann ich die externe IP (und damit die Domänennamen auf die dynamische externe IP verbunden) erhalte auch von richtig zugänglich sein innerhalb des LAN?

Ich bevorzuge es herauszufinden, wie dies mit Standard-DD-WRT-Definitionen erreicht werden kann, aber die Verwendung von zB iptables kommt nicht in Frage.

UrEl
quelle

Antworten:

25

Scheint, als wäre es ein Fehler in den letzten DD-WRT-Builds.

Verwenden Sie iptables:

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

(Ändern Sie Ihr Subnetz entsprechend Ihrem spezifischen LAN)

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

UrEl
quelle
Das war NICHT offensichtlich! arbeitete wie ein Zauber :)
Jay
Ich habe dies als Startbefehl festgelegt und den Router neu gestartet, aber keine Änderung - funktioniert immer noch nicht.
Timwi
Hat für mich gearbeitet. Vielen Dank. Jetzt kann ich von meinem internen Netzwerk auf meinen DD-WRT-Routern auf meine ddns-zugewiesenen IP-Adressen zugreifen.
Nusi
3
Dies hat bei mir funktioniert, aber nur, wenn ich es als Firewall-Skript und nicht als Startskript gespeichert habe.
Jarett Millard
@ Timwi - Wie Jarett sagte, musste ich dies auch in den Abschnitt "Firewall" stellen, nicht in den Abschnitt "Startup".
Dan_linder
4

Im Geiste der Antwort von UrEl: Ein selbstkonfigurierendes iptablesSkript, das ohne weitere Anpassung einfach kopiert und eingefügt werden kann, finden Sie im DD-WRT-Forum :

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 

Wie Jarett bemerkt, muss dies als Firewall-Skript und nicht als Startskript verwendet werden.

krlmlr
quelle
Diese Lösung funktionierte für mich besser als die von UrEI, da mein SIP-Telefon dadurch keine Verbindung herstellen konnte.
Jamix
Was ist der Unterschied zwischen dieser und der @ UrlEl-Regel (abgesehen vom dynamischen Abrufen der WAN-Schnittstelle und der IP-Adresse)?
Piotr Dobrogost
1

Deaktivieren Sie "WAN NAT-Umleitung filtern" auf der Registerkarte "Sicherheit"> "Firewall". Aus der Hilfebeschreibung:

WAN-NAT-Umleitung filtern Verhindert, dass Hosts im LAN die WAN-Adresse des Routers verwenden, um Server im LAN zu kontaktieren (die mithilfe der Portumleitung konfiguriert wurden).

Tobias Plutat
quelle
Es war bereits deaktiviert (standardmäßig). Irgendwelche anderen Ideen?
UrEl
Das ist komisch - in meinem LAN macht genau diese Einstellung den Unterschied. Welchen Build verwendest du? Vielleicht sollten Sie Ihre Portweiterleitung noch einmal überprüfen - vielleicht haben Sie einen
Fehler
Ich benutze 16994. In der Zwischenzeit habe ich folgendes gefunden: hax.at/text/41
UrEl
Oh, wie sehr ich fehlerhafte DD-WRT-Veröffentlichungen liebe! (Das Herstellen einer Verbindung von Clients dauerte eine Weile ... bis ich herausfand, dass Hostnamen in statischen Leases nur alphabetische Zeichen enthalten sollten. Arrgh!)
Tobias Plutat,
1

Es hört sich so an, als ob Ihr eigentliches Problem darin besteht, dass Sie zwei Ansichten des DNS-A-Eintrags benötigen. Extern zeigt Ihr dynamischer DNS auf Ihre öffentliche Netzwerk-IP, die den Port 80 an den lokalen Host weiterleitet. Alles, was Sie tun müssen, ist, einen Eintrag in dnsmasq mit einem A-Eintrag hinzuzufügen, der denselben vollqualifizierten Domänennamen auf die lokale Host-IP für Ihre lokalen Hosts verweist. Sie können dies tun, indem Sie auf der Seite Dienste / Zusätzliche dnsmasq-Optionen Folgendes hinzufügen:

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

Ersetzen Sie einfach die xx durch die lokale IP-Adresse und den Domainnamen durch Ihren Domainnamen. Vergessen Sie nicht den abschließenden Punkt, sonst wird Ihr lokaler Domain-Name daran angehängt.

systemconcierge
quelle
Das habe ich getan und es funktioniert! Aber ist das für bestimmte Ports möglich? Dies funktioniert nur, wenn Sie Ports an einen einzelnen Computer weiterleiten. Wenn Sie Ports an mehrere Computer weiterleiten, funktioniert dies nicht ...
rinogo