В статье мы рассмотрим какие типы IP адресов могут быть использованы для доступа к серверу по интернету со всего мира, и затем выполним базовую настройку роутера. Настройки описанные в данной статье могут быть использованы не обязательно для подключения сервера Cubietruck, а и любого другого, будь то обычный системный блок или ноутбук. Я буду все показывать на примере своего Huawei HG532e, но аналогичные функции должны присутствовать и в других роутерах. 

Для доступа к веб-серверу из интернета роутер стоящий на входе в домашнюю (локальную) сеть должен прежде всего иметь "белый" IP - либо статический, либо динамический.  "Белые" также называют внешними, или анонсированными. "Серый" (Частный, внутренний) адрес не подойдет. Узнать какой именно у вас IP и по каким ценам можно сменить его тип, можно у провайдера. Лучше всего получить статический ip так как он никогда не меняется. Но если это дорого, то для не особо серьезных проектов можно обойтись и динамическим. Динамический ip меняется при перезагрузке роутера, а также через определенный интервал (например раз в сутки, при разрыве сессии сервером), при этом в течении сессии ip не меняется и до него можно достучатся из любой точки мира. Единственная проблема тут с доменным именем, поскольку обычный DNS указывает на один айпи который меняется только при специальном ручном запросе, да и в течении длинного интервала времени (до нескольких дней). Однако эта проблема решается с помощью использования динамического DNS (DDNS), суть которого состоит в том, что при изменении вашего внешнего IP, он автоматически мгновенно изменяется в DNS, таким образом домен указывает на новый IP. DDNS проще всего заказать у провайдера - обычно это бесплатно, и в теории должно работать наиболее быстро так как провайдер сам меняет IP и сам его обновляет в DDNS. Более сложный способ - использование стороннего DDNS сервиса, при этом нужно чтобы локально был постоянно запущен какой-нибудь скрипт (предоставляемый сервисом или свой), который будет сообщать серверу что ваш IP поменялся и его нужно обновить в DDNS. Также в некоторых роутерах, например D-LINK, функция DDNS уже встроена, а сам сервис они предоставляют на своем сайте.

Приступим к настройке. Прежде всего нужно "пробросить" 80ый порт на ip-адрес Cubietruck-а в локальной сети. Так как правило проброса всегда указывает на определенный адрес, IP сервера должен быть постоянным, то есть не изменятся от подключения к подключению роутера и не отдаваться другим компьютерам в локальной сети. Для этого в роутерах обычно присутствует настройка резервирования IP адресов по уникальным MAC-адресам устройств. Находится эта настройка обычно в разделах связанных с DHCP. 

Настройка статического IP в локальной сети по MAC-адресу

Для начала понадобится узнать MAC кьюбитрака. Сделать это можно прописав ipconfig на Cubietruck, но проще зайти на Web-интерфейс роутера в браузере (обычно по адресу 192.168.1.1 или 192.168.0.1) и посмотрев список подключенных устройств. 

huawei_cubie_mac.jpg

Видно что у меня на данный момент подключено два устройства. Посмотрев ifconfig у себя на ноуте, я знаю что у меня адрес IP 192.168.1.2, значит кьюбитрак получил 192.168.1.2, а значит его MAC 02:02:04:C2:D6:54 (У вас, естественно, будет другой).

Теперь перейдем к резервированию нашего мака под постоянный адрес.

huawei_dhcp_cubie.jpg

Для начала на вкладке DHCP server, мы видим что DHCP сервер раздает клиентам адреса в диапазоне от 192.168.1.2 - 192.168.1.65. Адрес 192.168.1.1 - это сам роутер, 192.168.1.0 - адрес подсети а 192.168.1.255 - широковещательный адрес подсети (поскольку маска 255.255.255.0). Таким образом постоянный адрес мы можем выбрать из диапазона 192.168.1.66 - 192.168.1.254, например 192.168.1.168. По этому во вкладке IP Address Reserve создано правило по маку кьюбитрака с его айпишником.

Заодно во вкладке DHCP server я задал DNS-сервера гугла, так как они обычно стабильнее и быстрее DNS-серверов провайдера.

Проброс порта с помощью NAT

Пора пробросить 80-ый порт на Cubietruck при помощи привила NAT на брандмауэре роутера:

huawei_nat_portmap.jpg

Настройка QoS для сервера

И последнее что не помешает сделать - это настроить приоритезацию трафика к нашему серверу при помощи QoS (Quality of Service - качество обслуживания). Это нужно чтобы при активном использовании интернет канала из локальной сети, сервер получал свою гарантированную долю "Интернета". Кроме того входящий в локальную сеть трафик не должен перегружать сеть и в случае превышенной интенсивности трафик должен шейпеться (то есть выравниваться, ему придается ровная форма(shape)). Шейпинг выполняется путем ограничения максимального числа передаваемых байт за единицу времени.

На моем роутере идея QoS состоит в следующем: есть 4 очереди (QoS Queue) с разными приоритетами и 4 политики (QoS Policer). Очередь определяет какие пакеты нужно быстрее обрабатывать на роутере, а политика позволяет управлять скоростью для трафика принадлежащего разным классам. Сначала настраиваем пропускную способность (bandwidth), которую будут использовать некоторые алгоритмы и сделать настройки очередей и политик:

huawei_cubie_qos_gen(2).jpg

С очередями я ничего не менял - приоритет пакетов из очередей уменьшается от 1ой очереди до 4ой. Политики же задаются некой четверкой значений:

  1. CIR (Commited information Rate) - минимальная пропускная способность, которая должна быть обеспечена. Если этот уровень превышается во время перегрузки сети - трафик будет отброшен, если же нет, то выполняется проверка на PIR (см п.3)
  2. CBS (Committed Burst Size) - максимально допустимый размер передаваемый за раз (всплеск). Если превышен, то может отбрасываться или задерживаться.
  3. PIR (Peak Information Rate) - пропускная способность, допустимая если сеть не является перегруженной. Если скорость трафика выше этого значения то трафик отбрасывается вообще.
  4. Maximum Burst Size (MBS) - аналогично CBS, но опять же для случая когда сеть не перегружена. Если превышается, то пакеты или отбрасываются или задерживаются.

Значения обычно указываются в битах за секунду (bps), но в моем случае это кило биты за секунду (kbps).

Ну и напоследок нужно классифицировать трафик до сервера и задать ему очереди и политику:

huawei_qos_class.jpg

Вот и все. Сохраняем, перезагружаем роутер, затем сервер. 

Проверка доступа к серверу

Проверяем пингом IP сервера (192.168.1.168). Теперь можно попробовать зайти на веб-сервер,  который на lubuntu-server в кьюбитрак уже по дефолту установлен и запущен. Сначала проверим доступен ли веб сервер из локальной сети. Для этого введем в строке адреса браузера IP сервера (192.168.1.168) и нажимаем ентер. Если все ок, то должна появится надпись:

It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.

Эту страничку отдал apache на сервере. Теперь можно перейти к проверке доступа из интернета. Сначала нужно узнать свой внешний IP, например тут http://www.whatismyip.com/ , или посмотреть на Web-интерфейсе роутера. Дальше нужно зайти на этот адрес с компьютера, который находится за пределами вашей домашней сети (из вашей сети этого просто так сделать не получится, так как вы сами находитесь в ней). Самый простой вариант - использовать какой-нибудь VPN или прокси сервер - например можно воспользоваться прокси сетью Tor. Для этого просто скачайте и запустите Tor browser. Прокси-сервер позволяет делать так называемый косвенный запрос - то есть когда вы вводите строку в торе вы соединяетесь на самом деле не с сайтом, а с прокси-сервером, находящимся не пойми-где, а он уже соединяется с запрашиваемым сервером, получает от него ответ и возвращает вам:

Красным показан путь прохождения запроса, сереневым - путь ответа.

Еще более простой способ посмотерть на сайт с другого компьютера, не вставая из-за своего - это http://translate.google.com. Переводчик гугл, перед переводом сайта сначала скачивает запрашиваемую страничку на свой сервер, а только потом назад выдает вам.

Если все работает, то в любом случае вы должны опять увидеть ту же самую страницу с надписью "It works"

Итак, роутер настроен, и нам осталось установить нужное программное обеспечение, о чем речь пойдет в статье:

Домашний хостинг. Часть 3 - Установка серверного программного обеспечения