У меня есть IPTABLES, недавно настроенные на моем сервере Debian Squeeze, и у меня успешно работает маскировка IP и переадресация портов, однако, если я ввожу в строку URL свой 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 происходит слишком рано в цепочке событий.