DD-WRT: Как разрешить переадресацию портов для запросов, исходящих из локальной сети?

26

В исходной прошивке моего роутера у меня была определена переадресация портов с порта 80 на сервер в локальной сети, который я использовал вместе с внешней службой динамического DNS.

Сейчас я обновился до DD-WRT и, увы, переадресация портов работает только для запросов на внешний IP из- за пределов локальной сети. Изнутри локальной сети я могу получить доступ к серверу только по его внутреннему IP.

Как я могу сделать так, чтобы внешний IP-адрес (и, следовательно, имя домена, подключенное к динамическому внешнему IP-адресу) был правильно доступен и изнутри локальной сети?

Я предпочитаю узнать, как этого добиться с помощью стандартных определений DD-WRT, но использование, например, iptables не исключено.

UrEl
источник

Ответы:

25

Похоже, это ошибка в последних сборках DD-WRT.

Используйте iptables:

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

(измените свою подсеть в соответствии с вашей конкретной локальной сетью)

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

UrEl
источник
Это было не очевидно! работал как шарм :)
Jay
Я установил это как команду запуска и перезагрузил маршрутизатор, но без изменений - все равно не работает.
Тимви
Работал на меня. Большое спасибо. Теперь я могу получить доступ к своему IP-адресу, назначенному ddns, из внутренней сети на моих маршрутизаторах DD-WRT.
Нуси
3
Это сработало для меня, но только если я сохранил его как скрипт брандмауэра, а не как скрипт запуска.
Джаретт Миллард
@Timwi - Как упоминал Джаретт, мне тоже пришлось поместить это в раздел «Брандмауэр», а не в раздел «Запуск».
dan_linder
4

В духе ответа UrEl: самонастраивающийся iptablesскрипт, который можно просто скопировать без дополнительной адаптации, можно найти на форуме DD-WRT :

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 

Как отметил Джаретт, это должно использоваться как сценарий брандмауэра, а не как сценарий запуска.

krlmlr
источник
Это решение сработало для меня лучше, чем у UrEI, потому что последнее сделало невозможным подключение моего SIP-телефона.
jamix
В чем разница между этим правилом и правилом @ UrlEl (помимо динамического получения интерфейса wan и IP-адреса)?
Петр Доброгост
1

Попробуйте отключить «Фильтровать перенаправление WAN NAT» на вкладке «Безопасность»> «Брандмауэр». Из описания справки:

Фильтр перенаправления WAN NAT Запрещает хостам в локальной сети использовать WAN-адрес маршрутизатора для связи с серверами в локальной сети (которые были настроены с помощью перенаправления портов).

Тобиас Плутат
источник
Он был уже отключен (по умолчанию). Есть другие идеи?
UrEl
Это странно - в моей локальной сети этот параметр как раз и имеет значение. Какую сборку вы используете? Может быть , вы должны дважды проверить переадресацию портов - может быть , есть что - то неправильно , что там вы пропустили (возможно, IP - адрес изменился между внешним и внутренним доступом, тем самым нарушая порт переадресацию?)
Tobias Plutat
Я использую 16994. В то же время я нашел это: hax.at/text/41
UrEl
О, как я люблю глючные релизы DD-WRT! (Установление соединения от клиентов раньше занимало целую вечность ... пока я не узнал, что имена хостов в статических арендах должны содержать только буквенные символы. Ага!)
Тобиас Плутат
1

Похоже, ваша настоящая проблема в том, что вам нужно два просмотра записи DNS A. Внешне ваш динамический днс указывает на публичный IP-адрес вашей сети, который перенаправляет порт 80 на локальный хост. Все, что вам нужно сделать, это добавить запись в dnsmasq с записью A, указывающей такое же полное доменное имя на ip локального хоста для ваших локальных хостов. Вы можете сделать это, добавив следующее на странице «Сервисы» / «Дополнительные параметры dnsmasq»:

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

просто замените xx на локальный ip, а имя домена на ваше доменное имя. Не забудьте добавить конечную точку, иначе она добавит к вам имя вашего локального домена.

systemconcierge
источник
Это то, что я сделал, и это работает! Но возможно ли это сделать для определенных портов? Это будет работать, только если вы перенаправляете порты на один компьютер. Если вы перенаправляете порты на несколько компьютеров, это не сработает ...
Риного