Я настроил маршрутизацию и удаленный доступ (Windows Server 2003) для пересылки publicip: 80 на сервер в частной внутренней сети, и это отлично работает. Входящие запросы из Интернета на порт 80 правильно перенаправляются на наш внутренний веб-сервер, и все в порядке.
Однако запросы на самом сервере не пересылаются. То есть, если я открываю окно консоли и набираю "telnet publicip 80" с сервера на publicip, запрос не перенаправлено на частный сервер.
Я так понимаю, что в RRAS я сопоставил порт 80 на публичный интерфейс на частный сервер, и поэтому он не работает; но я не знаю, как настроить его так, чтобы запросы с локального ПК также перенаправлялись на частный сервер.
Буду признателен за любую помощь или отзывы по этому поводу.
Спасибо!
То, что вы ищете, называется «шпилька NAT», и реализация NAT от Microsoft, похоже, не поддерживает его. Пакеты, которые не проходят через интерфейс NAT, не получают применения NAT (т. Е. Исходящие из частного или локального интерфейса, предназначенные для частного интерфейса).
Документация Microsoft не особо ясна по этому поводу (по крайней мере, что мне когда-либо удавалось найти), но RRAS явно не ведет себя таким образом, который указывает на поддержку жесткого NAT.
Вы можете добиться того же эффекта, по крайней мере, по имени, создав зону DNS на локальном DNS-сервере для публичного имени и ссылаясь на частный IP-адрес. (Итак, если ваш веб-сайт - «www.mydomain.com», создайте зону DNS «www.mydomain.com» с единственной пустой записью «A» в ней, ссылающейся на частный IP-адрес веб-сервера.)
Единственный другой вариант - переключиться на реализацию NAT, такую как Linux iptables, которая поддерживает фиксированный NAT.
Я решил это с помощью netsh interface portproxy, как подробно описано на http://technet.microsoft.com/en-us/library/cc776297(WS.10).aspx
Это не решает проблему на сетевом уровне, как это делает RRAS, но решает ее, не прибегая к стороннему программному обеспечению. Поскольку через фильтр RRAS будет проходить только локальный хост, решение этой проблемы на программном уровне не является проблемой.
Другие варианты. Если вы осуществляете доступ по имени, вы можете поместить запись в файл локальных хостов на сервере RRAS, указывающую имя на внутренний IP-адрес. Если вы получаете доступ по IP-адресу, вы должны иметь возможность установить статический маршрут, который говорит: route publicip через privateip. Сервер на частном IP-адресе должен увидеть, что пакет говорит «привет, это я», и обработать его соответствующим образом, хотя вам может потребоваться маршрут на другой стороне для правильного возврата пакетов в зависимости от настроек вашей сети.