На этот вопрос уже есть ответ здесь:
У меня есть IPTABLES, недавно настроенные на моем сервере Debian Squeeze, и у меня есть IP-маскарадинг и переадресация портов работает с ним успешно, однако, если я ввожу в адресную строку свой IP-адрес WAN или имя хоста DynDNS, я получаю сообщение об ошибке подключения.С предыдущими потребительскими маршрутизаторами, если бы я перешел на http: // [myhostname] , он загрузил бы 10.0.0.3:80, как указано ниже. Это работает внешне (проверено с использованием телефона 3G), но не внутренне (с использованием любого внутреннего браузера). Это то же самое для всех перенаправленных портов. Я пытаюсь заставить перенаправление портов работать и внутри.
Если кто-нибудь знает правильные заклинания для этого, мы будем очень признательны. Я попытался выполнить поиск в Google, но не уверен, что правильно подхожу к поисковому запросу.
Моя конфигурация следующая:
# Generated by iptables-save v1.4.8 on Thu Apr 14 15:58:27 2011
*mangle
:PREROUTING ACCEPT [1216168:676166344]
:INPUT ACCEPT [2375:260404]
:FORWARD ACCEPT [1213765:675875465]
:OUTPUT ACCEPT [1930:203384]
:POSTROUTING ACCEPT [1215695:676078849]
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Thu Apr 14 15:58:27 2011
# Generated by iptables-save v1.4.8 on Thu Apr 14 15:58:27 2011
*filter
:INPUT ACCEPT [2375:260404]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1930:203384]
-A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o ppp0 -j ACCEPT
-A FORWARD -d 10.0.0.8/32 -p tcp -m tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.8/32 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.8/32 -p udp -m udp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 45631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 56630 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.0.3/32 -p udp -m udp --dport 56630 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Apr 14 15:58:27 2011
# Generated by iptables-save v1.4.8 on Thu Apr 14 15:58:27 2011
*nat
:PREROUTING ACCEPT [5529:468229]
:POSTROUTING ACCEPT [2335:258730]
:OUTPUT ACCEPT [21:1367]
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.8:80
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.3:22
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.0.8:1723
-A PREROUTING -i ppp0 -p udp -m udp --dport 1723 -j DNAT --to-destination 10.0.0.8:1723
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 21 -j DNAT --to-destination 10.0.0.3:21
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 45631 -j DNAT --to-destination 10.0.0.3:45631
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 56630 -j DNAT --to-destination 10.0.0.3:56630
-A PREROUTING -i ppp0 -p udp -m udp --dport 56630 -j DNAT --to-destination 10.0.0.3:56630
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.0.3:22
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Thu Apr 14 15:58:27 2011
Я не уверен, что вижу точку этого. Обычно этот вид установки используется, если у Вас есть внутренний ресурс, который должен быть доступным внутренне и внешне. Ваш внешний доступ достигается перенаправлением портов, и Вы подтвердили, что это хорошо работает.
Для внутреннего доступа необходимо скорее использовать, разделяет DNS. Это - установка, посредством чего Ваш внутренний сервер DNS разрешает те же имена как Ваш общедоступный DNS, но к внутренним IP-адресам. Это может быть достигнуто или при помощи отдельных серверов DNS или при помощи одного сервера DNS с отдельными представлениями для внутреннего и внешнего доступа.
Это решило бы Вашу проблему?
Это не будет работать. Причина имеет отношение, как пакет пересекает netfilter/xtables таблицы и когда маршрутизация происходит.
Как Вы видите, DNAT происходит слишком рано в цепочке событий.