Виртуальные серверы: если вы создаёте сервер в локальной сети и хотите сделать его доступным в интернете, реализовать эту услугу и предоставить её пользователям сможет виртуальный сервер. В то же время виртуальный сервер позволяет сохранять безопасность локальной сети, поскольку прочие службы будут по-прежнему невидимы из интернета.
Виртуальный сервер может быть использован для настройки публичных служб в вашей локальной сети, таких как HTTP, FTP, DNS, POP3/SMTP и Telnet. В разных службах используются разные служебные порты. Порт 80 используется службой HTTP, порт 21 — в FTP, порт 25 — в SMTP и порт 110 — в POP3. Перед настройкой проверьте номер служебного порта.
Пример настройки
Например, персональный веб-сайт был создан на моем домашнем ПК (IP-адрес: 192.168.0.100). Я хочу, чтобы мои друзья могли посещать мой сайт через интернет.
ПК подключен к маршрутизатору с WANIP-адресом 218.18.232.154.
Маршрутизатор LAN WAN: 218.18.232.154
Назначьте статический IP-адрес компьютеру, например 192.168.0.100
Выполните следующие действия:
Примечание: Настройка производится на примере модели Archer C9.
Шаг 1
Войдите в веб-интерфейс Archer C9. Прочитайте статью Как войти в веб-интерфейс Wi—Fiроутера, для получения инструкции о том, как зайти в веб-интерфейс маршрутизатора.
Шаг 2
Нажмите Advanced (Дополнительные настройки) вверху справа, затем в левой части выберете NATForwarding (NAT переадресация) -> VirtualServers (Виртуальные серверы) -> Add (Добавить).
Шаг 3
Нажмите ViewExistingServices (Просмотр существующих сервисов) и выберите HTTPExternalport (внешний порт), internalport (внутренний порт) и protocol (протокол) заполнятся автоматически. Введите адрес компьютера 192.168.0.100 в поле InternalIP (внутренний IP-адрес).
Нажмите ОК, чтобы сохранить настройки.
Советы:
1. Рекомендуется сохранить настройки по умолчанию для внутреннего порта и протокола, если вы не знаете, какой порт и протокол использовать.
2. Если служба, которую вы хотите указать, не прописана в Service Type (списке сервисов), то вы можете ввести соответствующие параметры вручную. Необходимо проверить номер порта, который необходим службе.
3. Вы можете добавить несколько правил виртуального сервера, если хотите предоставить несколько сервисов в маршрутизаторе. Пожалуйста, помните, что внешние порты не должны повторяться (дублироваться).
Шаг 4:
Для посещения вашего веб-сайта пользователи в интернете могут входить по адресу http:// WANIP (в этом примере: http:// 218.18.232.154).
Примечание: Ваши настройки не вступят в силу, если функция NAT отключена. Перейдите на страницу Advanced (Дополнительные настройки) > SystemTools (Системные инструменты)> SystemParameters (Параметры системы) чтобы включить NAT.
Рекомендации:
1. WAN IP-адрес должен быть публичным (белым/внешним). Если WAN IP назначается динамически интернет-провайдером, рекомендуется зарегистрировать и использовать доменное имя для WAN IP (см. настройка учетной записи службы DDNS). В дальнейшем вы сможете набрать в адресной строке http:// имя домена, чтобы посетить веб-сайт.
Для справки:
Как настроить DDNS (DynDNS) для Wi-Fi роутеров (новый синий пользовательский интерфейс)
Как настроить DDNS (NO-IP) для Wi-Fi роутеров (новый синий пользовательский интерфейс)
Если вы не уверены в том, как настроить static IP (статический IP) на устройстве, вы можете настроить Address Reservation (резервирование адреса) по инструкции Как настроить резервирование адресов на Wi-Fi роутерах TP-Link (новый синий пользовательский интерфейс), так что один и тот же IP адрес всегда будет присвоен вашему устройству.
2. Если вы изменили внешний порт со значения по умолчанию, вы должны использовать http:// WANIP: Внешний порт или http:// имя домена: Внешний порт для посещения веб-сайта.
3. Убедитесь, что сервер доступен из внутренней сети. Вы можете проверить, получаете ли вы доступ к этому серверу внутри локальной сети. Если вы не можете получить доступ к серверу в локальной сети, проверьте настройки своего сервера.
Узнайте больше о каждой функции и настройки, перейдите в раздел ЗАГРУЗКИна вашем веб-сайте, чтобы загрузить руководство по вашему продукту.
Доброго времени суток. Пару недель назад я решил создать персональный сайт с несколькими страницами о себе, своих достижениях, целях и контактах. Разумеется, одним из этапов его создания стал вопрос выбора хостинга. Отдавать деньги за размещение сайта на чьём-то сервере мне не хотелось, да и оставлять свой домашний компьютер постоянно включенным тоже. Поразмыслив, я вспомнил интересную статью о настройке сервера ip-телефонии Asterisk на маршрутизаторе Mikrotik. Так как у меня дома установлен роутер именно этого проиводителя, не раздумывая, я решил поднять на нём веб-сервер nginx. Итак, мы имеем зарегистрированное доменное имя, «белый» статический ip-адрес и маршутизатор Mikrotik RB751G-2HnD c замечательной функцией MetaRouter. Начнём с выбора образа openwrt для нашего маршрутизатора. Зайдём на роутер через программу winbox и посмотрим на его архитектуру. У модели RB751G-2HnD архитектура mipbse: Скачиваем с сайта последний образ openwrt для mipbse отсюда. Копируем на роутер в Files: Импортируем образ openwrt в метароутер, и добавляем сетевой интерфейс для нашего виртуального образа:
/metarouter import-image file-name=openwrt-mr-mips-rootfs-31411-basic.tar.gz memory=24 enabled=yes /metarouter interface add virtual-machine=mr2 type=dynamic dynamic-bridge=bridge_local
Затем входим в консоль образа и первым делом устанавливаем пароль на пользователя root. Редактируем настройки сети для получения сетевых реквизитов по dhcp от самого роутера:
vi /etc/config/network config interface lan option ifname eth0 option proto dhcp
Добавляем службу сети в автозагрузку и перезапускаем:
/etc/init.d/network enable /etc/init.d/network restart
Мы получили сетевые реквизиты, и теперь у нас есть доступ к системе по ssh. Редактируем конфигурационный файл пакет-менеджера для обновления репозитория и установки необходимых программ:
vi /etc/opkg.conf src/gz snapshots http://openwrt.wk.cz/trunk/mr-mips/packages dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /overlay
Далее, обновляем репозиторий и устанавливаем nginx и php:
opkg update opkg install nginx php5 php5-fastcgi
Переходим к настройке веб-сервера.
mv /etc/nginx/nginx.conf /etc/nginx/nginx_example.conf vi /etc/nginx/nginx.conf user nobody nogroup; worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; index index.php index.html index.htm; default_type text/html; sendfile on; keepalive_timeout 65; gzip on; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; gzip_min_length 1k; server { listen80; # слушающий порт server_name 172.16.0.12; # имя или ip-адрес сервера fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 32k; fastcgi_buffers 4 32k; fastcgi_busy_buffers_size 32k; fastcgi_temp_file_write_size 32k; client_body_timeout 10; client_header_timeout 10; send_timeout 60; output_buffers 1 32k; postpone_output 1460; root /srv/www;# Папка с файлами сайта location ~ .php$ { fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; if (-f $request_filename) { fastcgi_pass 127.0.0.1:1026; } } } }
Редактируем параметры php:
vi /etc/php.ini doc_root = "srv/www" cgi.force_redirect = 1 cgi.redirect_status_env = "yes";
И проверяем параметры fascgi:
vi /etc/nginx/fastcgi_params fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
Добавляем службы в автозагрузку и запускаем их:
/etc/init.d/nginx enable /etc/init.d/nginx start /etc/init.d/php5-fastcgi enable /etc/init.d/php5-fastcgi start
Копируем файлы сайта на сервер в указанную папку и проверяем работоспособность сайта внутри локальной сети. Не забываем поменять http порт нашего роутера и пробросить 80 порт сервера во внешку:
/ip service set port=8080 2 disabled=yes # or no /ip firewall nat add chain=dstnat action=dst-nat dst-address=внешний_IP-адрес protocol=tcp dst-port=80 to-ports=80 to-addresses=172.16.0.12 in-interface=ether2 disabled=no # in-interface=WAN порт
На этом настройка закончена.
Заключение
Таким образом, мы получили условно (наличие роутера) беслпаный хостинг для персонального сайта с минимальным энергопотреблением и потреблением ресурсов роутера. Этот пост был написан примерно год назад и вообще для вражеского сайта и не совсем соответствует тематике ЕЕ. Но, думаю, может быть интересен. На вражеском сайте пост стал недоступен после того, как я с гневом выпилил оттуда свой аккаунт после очередного произвола НЛО. Так что пускай тут полежит, в моём персональном блоге. 🙂 Не секрет, что стоимость роутера значительно зависит от возможностей встроенного программного обеспечения. Так что, покупая недорогое устройство, многие пользователи не ждут от родной прошивки ничего хорошего и устанавливают альтернативную прошивку. Но, как правило, на этом всё и заканчивается. Пользователь изучает встроенный веб-интерфейс и радуется новым возможностям поумневшего устройства. Однако, прошивка роутера — полноценная операционная система на базе Linux, позволяющая воплотить многие задумки, выходящие далеко за рамки привычной функциональности роутера. В этом посте я хочу поделиться своим опытом по созданию сервера на основе роутера D-Link DIR-320. На роутере были подняты Веб-сервер, FTP, настроена видеотрансляция. Хотя статья и предполагает использование DIR-320, для другого роутера процесс настройки будет отличаться незначительно.
Аппаратное обеспечение
Я использовал роутер DIR-320. Данный девайсик имеет MIPS32-микроконтроллер Broadcom BCM5354 с тактовой частотой 240 МГц, оперативную память объёмом 32 МБ, энергонезависимую память объёмом 4 МБ. Сетевые интерфейсы, 2.4 ГГц RF-модуль, USB-контроллер интегрированы в микроконтроллер. Ещё в устройстве установлен 100-мегабитный свитч на 4 порта. Кстати, микроконтроллер достаточно сильно грелся, но после того, как на него был посажен на термопасту небольшой медный радиатор, температура снизилась до нормальных 40-50 градусов. Кроме того, на плате не был установлен экран на высокочастотном модуле, хотя и была предусмотрена площадка для его пайки. Впрочем, эти небольшие недостатки конструкции компенсируются сравнительно низкой ценой устройства, хорошим потенциалом для моддинга, поддержкой альтернативных прошивок, лёгкостью восстановления стандартной прошивки после неудачных экспериментов. Кроме роутера был использован 4-портовый USB-хаб Manhattan, UVC-камера A4-Tech PK-750MJ на китайской микросхеме VC0332, USB-флешка Kingston на 2 ГБ, пара патч-кордов по 1,5 м. Питание осуществляется от стандартного блока питания на 2 Ампера из комплекта роутера. Запаса мощности вполне хватает для питания дополнительных устройств. При подключении более серьёзных потребителей (например, HDD) желательно установить блок питания по приличней, Meanwell’овский юнит например.
Выбор прошивки
Первой прошивкой, на которую я обратил внимание, была DD-WRT. Эта прошивка порадовала качеством, стабильностью и обширным набором дополнительных пакетов — Optware. DD-WRT поддерживает множество устройств, легко устанавливается, имеет удобный веб-интерфейс, множество возможностей доступно сразу после заливки прошивки в роутер. Однако DD-WRT основана на старом ядре 2.4, что накладывает серьёзные ограничения. Например, ядро 2.4 не поддерживает модуль uvcvideo, который требовался мне для подключения камеры. Погуглив, я узнал о прошивке OpenWrt. Последний релиз OpenWrt 10.03 под кодовым именем Backfire, вышедший 8 апреля 2010 г, поддерживает ядро 2.6.32. Для этой прошивки создан набор дополнительных пакетов — X-Wrt, в котором можно найти очень много полезного портированного софта и админку WebIf. Главная особенность OpenWrt — перезаписываемая файловая система, которая монтируется поверх стандартной файловой системы, что позволяет устанавливать пакеты в роутер и выполнять конфигурирование привычным редактированием файлов. Возможно монтирование как части энергонезависимой памяти роутера, незанятой прошивкой (с использованием файловой системы JFFS2), так и внешнего носителя. Для установки пакетов используется менеджер opkg. OpenWrt вместе с дополнительными пакетами распространяется в исходниках.
Сборка прошивки
Нам понадобится любая операционная система на основе Linux. Я использовал Arch Linux. Для получения исходников, нужно установить subversion: Скачиваем Buildroot OpenWrt: Скачиваем и устанавливаем дополнительные пакеты и патчи: Проверяем наличие всех нужных для сборки пакетов и инициализируем конфигурацию прошивки: Конфигурируем прошивку: В процессе конфигурирования, нужно выбрать систему, пакеты, и настроить будущую прошивку. В принципе, базовая конфигурация прошивки вполне работоспособна, нам нужно просто доконфигурировать прошивку по вкусу. Выбираем систему: Выбирать пакеты можно как для установки в прошивку, так и просто для сборки. Пакеты, собранные без установки образуют наш мини-репозиторий, из которого их можно будет устанавливать уже после заливки прошивки в роутер. Памяти в DIR-320 всего 4 МБ, причём обязательно должно остаться немного свободного места для использования JFFS2. Так что будем устанавливать минимально необходимый набор пакетов, а остальное соберём для последующей установки на внешний носитель. Чтобы выбрать пакет для установки в прошивку, нужно нажать Y. Я добавил в прошивку пакеты, требуемые для монтирования флешки: Также, добавил веб-админку. Без админки не удастся установить пароль для входа по ssh: Затем, выбираем пакеты для сборки без установки. Не стоит выбирать много лишних пакетов, чтобы время сборки не увеличивалось до неразумных пределов. Чтобы выбрать пакет для сборки без установки, нужно нажать M. Многие пакеты можно установить и из основного репозитория, однако нужные модули ядра стоит собрать, т.к. в репозитории могут быть несовместимые версии. Я выбрал модули ядра, необходимые для подключения UVC-камеры — kmod-video-core и kmod-video-uvc. Также можно настроить некоторые параметры прошивки, например сетевой адрес по умолчанию. Я установил адрес 192.168.0.1 (адрес роутера по умолчанию — 192.168.1.1): Image Configuration -> LAN IP Address -> 192.168.0.1 При необходимости, можно сконфигурировать ядро. Я оставил всё по умолчанию. Собираем прошивку: В процессе сборки прошивки также будут скачиваться и собираться необходимые инструменты для кросс-компиляции, скачиваться исходники ядра, пакетов и т.д. Сборка займёт от 30 минут до нескольких часов, в зависимости от производительности сети и компьютера. После завершения сборки, в папке bin будут находиться созданные образы прошивки в различном формате и собранные пакеты. Нам понадобится образ прошивки в формате squashfs — openwrt-brcm47xx-squashfs.trx.
Заливка прошивки
Для заливки прошивки понадобится TFTP-клиент (неважно, под Linux или Windows), я использовал GUI’шную утилитку под Windows, которую можно найти на сайте DD-WRT. Нужно подключить PC к LAN-порту роутера, выставить на сетевом интерфейсе PC статический IP 192.168.0.10 и маску подсети 255.255.255.0. В TFTP-клиенте выбрать файл прошивки и выставить IP сервера 192.168.0.1. Включить роутер и дождаться линка, затем отправить прошивку в роутер. Загрузчик ждёт прошивку в течении пары секунд, так что, возможно, понадобится несколько попыток, также, при необходимости, стоит сразу разобраться с фаерволом, чтобы отправить прошивку без лишней задержки. После того, как прошивка будет отправлена на роутер, нужно подождать пару минут, пока загрузчик не завершит внутренний цикл прошивки и не включится диагностический светодиод. Перед заливкой новой прошивки стоит запастись оригинальной прошивкой — если заливка пройдёт неудачно, можно будет вернуть оригинальную прошивку через консоль восстановления. Для этого нужно включить роутер, удерживая Reset, затем зайти браузером на 192.168.0.1. После завершения прошивки, настраиваем сетевой интерфейс компа на получения адреса с помощью DHCP, перезагружаем роутер. OpenWrt загружается несколько дольше оригинальной прошивки, причём диагностический светодиод светится во время загрузки и гаснет при завершении. Если всё прошло успешно, заходим браузером на роутер. На этом этапе не обязательно настраивать роутер — после подключения внешнего накопителя, настройки будут храниться на нём и придётся заново настраивать. Достаточно лишь установить пароль.
Подготовка накопителя
Накопитель нужно разбить на разделы fdisk’ом и отформатировать. Я создал 3 раздела — под систему, под домашние директории и под своп. Не забудь заменить /dev/sdb на имя съёмного накопителя в своей системе: Форматируем:
Настройка прошивки для загрузки с внешнего накопителя
Заходим на роутер SSH-клиентом, используя логин root и пароль, установленный через веб-админку. Редактируем файл /etc/config/fstab. Редактируем одну секцию «mount» для монтирования раздела накопителя поверх основной файловой системы. Для монтирования других разделов, будет использоваться файл fstab, хранящийся на внешнем накопителе: Перезагружаем роутер, заходим в веб-админку. Если всё прошло успешно, админка должна снова попросить установить пароль — устройство успешно смонтировалось и настройки теперь хранятся на нём.
Настройка прошивки
Заходим на роутер SSH-клиентом, создаём точку монтирования для домашних директорий: При желании установить собранные вместе с прошивкой пакеты, расшариваем их (папку bin Buildroot’а) FTP-сервером, затем прописываем наш мини-репозиторий в файле /etc/opkg.conf, добавив строку: Обновляем список пакетов: Если при обновлении будут получены списки пакетов из основного репозитория, их можно удалить: Устанавливаем нужные пакеты: Основное конфигурирование удобно выполнять через веб-админку. Устанавливаем имя хоста, часовой пояс, добавляем точки монтирования, настраиваем сетевые интерфейсы и т.д. Я смонтировал раздел для домашних директорий с опциями async и noatime, чтобы продлить жизнь флешке. Перезагружаем роутер и проверяем результат:
Устанавливаем FTP-сервер
Создадим группу админов сервера: Создадим пользователя ftp для анонимного входа, добавим его в группу nogroup (65534), и пользователя ftpadmin для администрирования файлов, доступных по FTP. Зададим пароль для пользователя ftpadmin Установим pure-ftpd — быстрый и лёгкий FTP-сервер Настройки сервера находятся в файле /etc/config/pure-ftpd. Разрешим анонимный вход и выберем отдельный лог отредактировав следующие строки: Также удалим опцию peruserlmits, чтобы убрать ограничения на количество входов пользователей. Запустим сервер: Зайдём в веб-админку на вкладку Services и отметим pure-ftpd для автоматического запуска. Чтобы сервер был доступен из интернета, нужно зайти на вкладку Firewall и открыть 21 порт.
Устанавливаем веб-сервер
Создадим домашнюю директорию для файлов и пользователя, который будет владеть этой директорией: Зададим пароль для пользователя wwwadmin: Установим веб-сервер lighttpd с нужными плагинами: Установим PHP: Сконфигурируем lighttpd. Настройки хранятся в файле /etc/lighttpd/lighttpd.conf. Подключим нужные нам плагины: Установим директорию для документов: Зададим имена документов по-умолчанию: Укажем CGI-обработчик для PHP: Желательно указать UID и GID для сервера, чтобы он не работал с правами суперпользователя: Настроим PHP, отредактировав файл /etc/php.ini. Подключим нужные модули, раскоментировав соответствующие строки: Изменим параметр doc_root на пустую строку, иначе интерпретатор будет искать скрипты не в том месте: Чтобы сервер заработал, нужно сначала перевесить веб-админку роутера с 80 порта на какой-нибудь другой порт. Запустим сервер: Создадим в /home/srv/www файл test.php с таким содержимым: Откроем 192.168.0.1/test.php. Если всё прошло удачно, увидим таблицу с настройками PHP: Перейдём на вкладку Services веб-админки и разрешим автоматический запуск lighttpd. На вкладке Firewall откроем 80 порт чтобы сервер был виден из интернета.
Настраиваем видеотрансляцию
Для начала, нужно установить нужные для камеры модули и убедиться, что камера успешно подхвачена системой: Для видеотрансляции будем использовать пакет MJPEG-Streamer. Это довольно тяжелый пакет, но его можно немного твикнуть. Вернёмся к Buildroot’у. Получим исходники пакета: Поправим код для сжатия в JPEG. Путь может немного отличаться для разных версий пакета и библиотек: Найдём в коде строку инициализации параметров сжатия: После этой строки можно переопределить некоторые параметры сжатия JPEG. Выберем быстрый целочисленный метод для DCT: Сохраним изменения, скомпилируем пакет, обновим индекс пакетов: Подключимся к роутеру по SSH. Включим наш репозиторий в /etc/opkg.conf. Установим MJPEG-Streamer: Настройки пакета находятся в файле /etc/config/mjpg-streamer. Отредактируем нужные строки: Если камера отдаёт поток в формате MJPG, на этом настройка закончена. Моя камера отдаёт несжатый поток в формате YUV, для неё нужно включить JPEG-сжатие. Отредактируем файл /etc/init.d/mjpg-streamer. Найдём командную строку запуска демона: Добавим параметр —yuv для плагина input_uvc: Стартуем демон: Если всё прошло нормально, должен включиться светодиод на камере. Для проверки работы сервера зайдём на 192.168.0.1:310/?action=stream. Не все браузеры нормально поддерживают MJPG-поток. Статическая картинка доступна по адресу 192.168.0.1:310/?action=snapshot. Для отображения видео на веб-странице можно использовать встроенную поддержку браузера (имеется в Firefox, Chrome, частично в Opera), Javascript или Java-апплет. Страничка с примерами есть дистрибутиве MJPEG-Streamer.
Индикация посетителей
Мне хотелось сделать какую-нибудь индикацию приходящих посетителей. Для этого я взял яркий RGB светодиод, подключил его к USB через самодельный переходник на микроконтроллере. Программу для управления написал и отладил в Visual C, затем портировал и собрал под роутер с помощью Buildroot’а OpenWrt. Приходящие посетители, активность веб-сервера и FTP и другие события обозначаются вспышками разных цветов. Впрочем, эта система заслуживает отдельного поста.
Регистрация домена
Я зарегистировал домен для своего проекта в зоне RU у 2domains.ru меньше чем за 100 рублей. Регистратор мне понравился, на верификацию ушло всего 4 часа.
P.S. На всякий случай
Я новичок в мире Linux, к тому же, в первый раз пишу такой большой пост, так что могут быть ошибки. Если так, то они сделаны не из вредности. Вскрытие и перепрошивка роутера лишают тебя гарантии на девайс. Возможны и другие проблемы. Впрочем новые роутеры (например, DIR-320) сложно убить перепрошивкой — загрузчик зашит в энергонезависимую память микроконтроллера (в отличии, например, от RedBoot, использовавшегося в более ранних моделях), так что в любой момент можно сделать откат на оригинальную прошивку. Но в любом случае, ты ковыряешь роутер на свой страх и риск. Удачи!Используемые источники:
- https://www.tp-link.com/ru/support/faq/1106/
- https://habr.com/post/248009/
- http://we.easyelectronics.ru/lifelover/prevraschaem-nedorogoy-router-v-domashniy-server.html