12.11.2013

Удобный доступ к домашнему веб-серверу из интернет

Мой интернет центр ;)
Решив настроить домашний веб-сервер, я столкнулся с трудностью доступа к нему снаружи. Дело в том, что сервер расположен в локальной сети за роутером, и при этом хочется иметь несколько отдельных сайтов, доступных по разным субдоменам (host1.domain.com, host2.domain.com и т. д.) вместо доступа по одному домену и нескольким трудно запоминающимся портам (domain.com:81, domain.com:82 и т. д.). У меня это получилось и я хочу поделиться своим вариантом настройки.
Итак, имеется:
  • Безпроводное подключение к интернет через 3G модем на роутере
  • Wi-Fi роутер с динамическим внешним IP адресом от интернет-провайдера
  • DDNS клиент на роутере связывает динамический IP адрес роутера c некрасивым доменным именем третьего уровня вида domain.no-ip.biz
  • Веб-сервер подключен к роутеру по Ethernet и имеет постоянный локальный IP адрес
  • Зарегистрированный общедоступный домен второго уровня вида domain.com
По пути к цели упустил из виду что для полноценного доступа к веб-серверу снаружи он должен иметь отдельный внешний IP адрес. Этот нюанс повел меня по неверному пути и я долго настраивал DNS сервер на роутере, и недолго радовался что могу обращаться к каждому хосту сети по его доменному имени (host1.domain.no-ip.biz, host2.domain.no-ip.biz). Когда же перешел к тестированию доступа к ним снаружи, понял что так ничего не получится — хосты расположены в локальной сети за роутером и имеют локальные IP адреса, не доступные из внешней сети, что свело на нет все усилия по настройке локального DNS сервера.

Не без помощи сотрудника, который помогал пинговать мой админский ад снаружи (спасибо Миша), было найдено решение — каким то образом все нужные субдомены должны указывать на роутер, а тот в свою очередь перенаправляет весь HTTP трафик на веб-сервер (проброс портов). Веб-сервер же будет решать какой из сайтов показывать в зависимости от домена в запросе (например директива NameVirtualHost Apache сервера).

Так все и получилось, в панели управления регистратора домена добавил CNAME записи:
host1.domain.com CNAME domain.no-ip.biz
host2.domain.com CNAME domain.no-ip.biz
Домен domain.com, как и прежде, продолжает указывать на хостинг-провайдера, а вот при определении IP адресов субдоменов host1.domain.com и host2.domain.com браузер получит IP адрес роутера (domain.no-ip.biz), куда и отправит запрос. Роутер перенаправляет такие HTTP запросы на веб-сервер, а тот уже решает какой контент отдавать в зависимости от домена.

Комментариев нет: