Назад | Перейти на главную страницу

Как мне получить доступ к моему WAN IP изнутри в соответствии с моими существующими правилами переадресации портов iptables?

У меня есть 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 и когда происходит маршрутизация.

  1. Пакет входит в интерфейс
  2. Пакет получил DNAT-ed, чего не происходит для пакетов, исходящих от eth0.
  3. Пакет маршрутизирован. В этом случае он направляется на интерфейс ppp0
  4. Поскольку пакет предназначен для маршрутизатора, он обрабатывается цепочкой INPUT
  5. Пакет проходит цепочку INPUT, обрабатывается стеком TCP
  6. Локальный порт 80 не открыт; пакет отброшен

Как видите, DNAT происходит слишком рано в цепочке событий.