РСС

Ношу шлем, тяжело дышу…

Меня зовут Антон Шувалов. Я работаю в Lazada. Кроме программирования я пишу музыку и иногда занимаюсь дизайном интерфейсов. Я есть в Twitter, Facebook, и на GitHub. Вы можете написать мне email.

Если вы задумали порадовать меня небольшим подарком (не может быть!) — вот список моих мещанских мечт.

Как я использую статический IP

Я решил купить статический IP. Решил купить давно. Больше года назад. Но купил только сейчас. В принципе, цена, вполне меня устраивает — 450 рублей за подключение и 20 рублей в месяц за аренду IP. Статический IP адрес мне понадобится для того, что бы привязать к домену сайт или сервис, который я буду размещать на своем сервере. Кроме этого я решил осуществить давнишнюю мечту — иметь доступ к своим домашним устройствам и сервисам из любого места.

Устройств и сервисов, которые я бы хотел видеть снаружи, у меня немного есть. А есть у меня роутер NetGear 3500L с DD-WRT на борту. В нем жесткий диск на 320Gb и торрент-клиент. И есть у меня домашний сервер, за состоянием которого я хочу иногда присматривать. Есть немного интересных штук, но я пока не добрался до них.

Подытожу. Я хочу привязать к своему домену такие штуки, как:

План

Во-первых, нужно привязать субдомены (например, torrents.anton-shuvalov.info, webmin.anton-shuvalov.info) к своему статическому IP адресу, потом подвинуть с 80 порта веб-интерфейс DD-WRT, а на 80-ом поднять nginx. На nginx пробросить прокси ко всем сервисам, вроде:

torrents.anton-shuvalov.info > 192.168.0.1:9091

Как привязать домен к IP

Привязка домена к IP делается с помощью A записи на NS-сервере к которому привязан домен. Мой домен привязан к NS-серверам selectel. Создать там A запись очень просто, хотя я не думаю, что где-то это будет сложнее. В панели управления нужно перейти на вкладку домены, дальше выбрать домен, ну и нажать на кнопку “добавить запись”. В значении “хост” пишу webmin.anton-shuvalov.info, “тип” — A, “Значение” — указываю свой IP.

SSH

На MacBook я создал пару профилей SSH — до консоли роутера, и до консоли домашнего сервера. Создаются такие профили в файле ~/.ssh/config. Два моих профиля выглядят примерно так:

Host ayanami
	# My home server
	HostName myip
	RemoteForward 52698 127.0.0.1:52698 # для rmate
	User user
	Port 11132 # В DD-WRT нужно пробросить этот порт на локальный IP сервера на 22-ой порт
	
Host router
	# My home router
	HostName myip
	User root
	Port 22

В файле /etc/hosts я сделал запись такого вида:

44.144.244.233 myip # home

Это нужно для того, что бы в конфиге SSH зарезолвить myip в корректный IP-адрес.

Настройка DD-WRT

В DD-WRT нужно сделать две вещи для того, чтобы запрос к субдомену доходил до моего еще не установленного проксирующего сервера на nginx, который, собственно, и будет разбираться с тем, что и куда перенаправить.

Меняем порт веб-интерфейса

Что бы сменить порт интерфейса нужно выполнить в консоли роутера следующие строки

nvram set http_lanport=81
nvram commit
reboot

После перезагрузки интерфейс откроется по адресу http://192.168.0.1:81.

Пробрасываем 80-ый порт

Здесь нет ничего сложного. Нужная форма находится в NAT/QoS > Port Forwarding. Слева направо название, входящий порт, протокол (TCP, UDP или оба), внутренний IP и его порт. Внутренний IP сервера у меня 192.16810.101, порт 80-ый.

проброс портов dd-wrt

Установа nginx в debian

Установка nginx была не особенно гладкой. Ну как, не особенно. Я решил поставить из aptitude, после этого часа два пытался настроить nginx proxy_pass, и, в итоге, измученного и злого, меня озорило:

rei@ayanami:~/$ /usr/sbin/nginx  -v
nginx version: nginx/0.7.67

Уже вышел nginx/1.2.6. Версия в сорцах жутко смердила. Для того, что бы поставить актуальную версию, нужно добавить в /etc/apt/sources.list следующие строчки:

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

Так как я ставлю ngixn исключительно для проксирования запросов внутрь моей локальной сети, то ни php-fpm, ни mysql я не устанавливаю. Следовательно я удалил старую версию с помощью aptitude remove --purge nginx, а дальше все просто:

sudo aptitude install nginx

nginx proxy pass

После того, как установка nginx на мой debian сервер успешно завершилась, нужно настроить проксирование запросов в мой маленький интранет. Для каждого субдомена нужно писать отдельный конфиг. Возможно в чем-то эти конфиги могут отличаться. У меня же они одинаковые. Конфигурация сервера помещается в директиву http.

server {
  server_name router.anton-shuvalov.info; # субдомен
  listen 80;
  location / {
    proxy_pass http://192.168.1.1:81; # локальный адрес
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

Я добавил такие конфиги для веб-интерфейса роутера и торрент-клиента.

В Webmin не работают cookies

С webmin не заладилось. После того, как я настроил проксирование по адресу webmin.anton-shuvalov.info меня встретила форма логина, но, введя имя пользователя и пароль, я увидел такую ошибку:

Error - No cookies
	
Your browser does not support cookies, which are required for this web server to work in session authentication mode

Надо отметить, что proxy_pass у меня вел на https://192.168.1.101:10000. Но на самом деле, SSL webmin’а нужно выключить. Для этого в файле sudo rmate /etc/webmin/miniserv.conf нужно поменять ssl=1 на ssl=0. Ну и ниже конфиг сервера в /etc/nginx/nginx.conf:

server {
  server_name webmin.anton-shuvalov.info; 
  listen 80;
  location / {
    proxy_pass http://192.168.1.1:10000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

После этого все должно было заработать. Хотя нет. Webmin очень расстроился из-за подозрительного домена, с которого я до него добрался. Во всех своих фреймах он только об этом и говорил мне. Что бы порадовать старика нужно зайти в webmin через локальный адрес, у меня это 192.168.1.101:10000 перейти в Webmin > Настройка Webmin > Проверка ссылок и вписать, куда влезает, название своего домена. Что-то типа webmin.anton-shuvalov.info. Теперь-то все.

Реприза

Сейчас я очень доволен — я могу добраться до консоли роутера или сервера, который я спрятал в чулане, до интерфейса роутера, до торрент-клиента, до состояния сервера из любой точки мира. Это очень здорово. Позднее я планирую поднять доступ до ftp (хотя, это должно решится с помощью установки нужного optware пакета на роутер). Ну и попробую перенести свой блог на домашний сервер, что бы посмотреть, что из этого выйдет. А на сегодня, вроде как все.

«Как рушатся комплексные системы», Ричард И. Кук
О фундаментальных проблемах больших запутанных систем
7 паттернов для рефакторинга JavaScript-приложений
Перевод отличной серии статей о проектировании и рефакторинге проектов
Музыка для работы
Мои плейлисты: теплый glitch, нежные девичьи голоса, интересная электроника и chillwave
Ссылколог
Коллекционирую полезные ссылки