Давным давно, когда деревья были гораздо больше, а трава зеленее, сподобило меня сменить место жительства на удаленный от города район. Казалось бы — все хорошо: народа мало, воздух свежий, вид на сосновый лес из окна радует глаз, позволяя неспешно выдавать креатив под сигарету и чашечку кофе. А до центра всего-навсего 30 км, что при наличии автомобиля позволяет добираться туда в любое время.
Но любое творчество, как известно, требует оценки масс, иначе оно остается пустым бумагомаранием. И притом, независимая оценка возможна лишь людьми сторонними. Интернет-публика для этих целей подходит как нельзя лучше — критика по делу и без оного выдается со всех сторон, только и успевай поворачиваться для равномерного обтекания. Окей, будем выкладывать свои мысли и наблюдения в глобальную сеть!
И тут выясняется, что ни один городской провайдер не считает нужным дотянуться до нашей деревни. Лень им, понимаете ли, провести пару технических мероприятий, несмотря на входящую в район оптику, а также наличие у нас собственной АТС. Хоть чуток пошевелиться и организовать какие-нибудь подключения отказываются напрочь.
В то время как цивилизованные городские жители по нескольку раз в год меняют тарифы и скорость, в то время как началось тотальное засилие безлимита по очень вкусным ценам — мне по-старинке приходилось изрядно напрягать электронную часть мобильного телефона, пытаясь выжать из полуживого gprs хоть какие-то движения. Ну да ладно, чаты работают, почта временами ходит, странички без больших картинок смотрятся — на этом все прелести и заканчиваются. Выгрузить объемный креатив в сеть в таких условиях ну очень тяжело.
Далее кратко все пройденные за долгое время этапы моих мучений:
- Интернет через gprs по 8р./Мегабайт. Считается в обе стороны. Скорость никакая. Пользуемся мало, но зарплаты не хватает все равно.
- Ура, Мегафон сделал безлимитку за 19р. в сутки. Переходим на Мегу. Телефон начинает раскаляться от непрерывной работы. Скорость до 4 кб/с. С зарплаты стало возможным позволить себе бутылочку пива. Дозвониться никто не может.
- Ура-ура, слегка дотянулся местный CDMA, в народе SkyLink, у нас под торговой маркой Wellcom. Ставим на балконе внешнюю антенну, подключаем к специально приобретенному модему — скорость до 40 кб/с. Временами. Можно даже посмотреть ролик с ютуба, а заодно приготовить ужин и успеть им насладиться, пока этот ролик закачивается. Цена рупь/метр. Дороговато, но терпимо. Закончились семейные споры, кому в данный момент можно загружать страничку, а кому пока сидеть и читать то, что успело открыться.
- Ура три раза! — Wellcom стал безлимитным! Можно без временных и материальных ограничений тянуть направо и налево! Поехали!
Итак, в общем итоге имеем — домашний сервер, стоящий в кладовке, чтобы не шумел и не мозолил глаза. Домашний комп, в последнее время практически полностью перешедший во владения жены. Рабочий ноутбук, который всегда с собой. Небольшая точка доступа, которая все это объединяет в одну опять же домашнюю локальную сеть. Модем подключаем в десктоп, расшариваем доступ в интернет — первое время все довольны, включая сервер с его лицензионным 2003-м, который наконец-то выпустили обновляться на сайт майкрософта :)
И вот тут начинаются мелкие проблемы — комп ночами якобы «адски шумит», мешая жене спать. Модем до кладовки не дотягивается, потому к серваку его не подключить. Ночные посиделки с ноутбуком на кухне, с заветной чашечкой кофе, превращаются в нереализованную мечту, ибо до кухни модему тянуться в два раза дальше, чем до кладовки.
Долго думал, как "малой кровью" выйти из сложившейся ситуации, пока на глаза где-то не попалась тема про роутеры D-Link и альтернативные прошивки. Тщательное гугление показало, что с их помощью возможности небольшой железячки расширяются примерно до уровня домашнего сервера, если не больше. ВОт оно, решение всех моих проблем!
Не откладывая в долгий ящик, купил D-Link DIR-320. Распаковал, поставил, подключил. Впопыхах «убил» не той прошивкой. Долго гуглил, сумел перепрошиться в официальную. Перепрошился в Олеговскую. Настроил модем. Есть связь! За окном светает, пора и на работу...
Далее инструкция «для ленивых», ежели кому вдруг понадобится реализовать сию конструкцию, не вдаваясь в технические подробности:
- После последнего сброса роутера он прописался в моей сети с адресом 192.168.0.1. Ставим IP-адрес сетевой карты компьютера в 192.168.0.2. Подключаем роутер прилагаемым шнурком к сетевой карте компьютера. Важно - все остальное, ежели вдруг оно есть, от роутера отключаем!
- Качаем проверенную мной прошивку. Переименовываем ее в firmware.bin
- Скачиваем tftp2.exe. Запускаем, указываем в настройках адрес роутера (192.168.0.1, не забыли?) и путь к прошивке. Путь не должен иметь пробелов и отличных от английских символов. Я положил все в c:\temp и запускал оттуда.
- Отключаем питание роутера. Зажимаем reset.
- Не отпуская reset, включаем питание роутера и ждём появления индикатора-"тучки" подключения сетевого устройства.
- Отпускаем reset и одновременно жмакаем на кнопку "Upgrade" в программе tftp2. С первого раза не всегда получается сделать это вовремя, надо потренироваться.
- В случае попадания наблюдаем частое помигивание индикатора LAN (~3-4 сек).
- Ждём порядка 5 минут пока прошивка "развернётся", после этого загорится индикатор "статус".
- Ставим IP сетевой карты компьютера на автоматическое получение адреса.
- Заходим в роутер по протоколу telnet (адрес 192.168.1.1) login/pass: admin/admin. Для работы с telnet под Виндой рекомендую воспользоваться putty.
c:\> telnet 192.168.0.1 Login: adminPassword: adminДальше упражняемся в консоли телнетовской сессии (лучше через copy/paste, чтобы не ошибиться в написании). Для начала нам необходимо определить vendor и product code для нашего модема. Для каждого устройства они уникальны. В открытой сессии telnet даём команду:
$tail -f /usr/tmp/syslog.log - смотрим логи ядра системы в реальном времени.
Теперь вставляем модем (в моём случае это AnyData ADU-300A) в USB-порт роутера и наблюдаем за происходящим. На экране должно появиться нечто подобное:
Okt 29 05:02:09 kernel: hub.c: new USB device 00:03.0-1, assigned address 2Okt 29 05:02:09 kernel: usb.c: USB device 2 (vend/prod 0x16d5/0x6506) is not claimed by any active driver.Записываем параметры vendor и product. Выходим по Ctrl-C.
Проверяем запуск порта модема:
$insmod usbserial vendor=0x16d5 product=0x6506 (не забываем указывать ваши собственные значения!)
$ls -l /dev/usb/*на экране должно появиться что вроде этих строк:
crw------- 1 admin root 188, 0 Okt 29 2009 0crw------- 1 admin root 188, 1 Okt 29 2009 1Отлично! Нам теперь доступны следующие порты:
/dev/usb/tts/0/dev/usb/tts/1из которых нам понадобится первый - tts0.
Теперь добавляем скрипты дозвона ppp-соединения:
Создаём файл
/tmp/ppp/peers/dialup, но сначала недостающий каталог peers:
$mkdir /tmp/ppp/peersЗапускаем редактор и используем обычный "копипаст":
$viВ редакторе vi переходим в режим редактирования, нажав "i", и вставляем код, начиная с верхнего левого угла:
debug/dev/usb/tts/0115200crtsctsnoipdefaultipcp-accept-locallcp-echo-interval 60lcp-echo-failure 5usepeerdnsnoauthnodetachmtu 1400mru 1400user 'cdma'password 'cdma'connect "/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2 > /tmp/chat.log"Жмём "Esc" и сохраняем в файл командой
:w /tmp/ppp/peers/dialupВыходим из редактора
:qдля проверки делаем просмотр созданного файла командой:
$cat /tmp/ppp/peers/dialupРезультат должен быть именно таким, как и в вышеприведенных строках:
debug/dev/usb/tts/0115200crtsctsnoipdefaultipcp-accept-locallcp-echo-interval 60lcp-echo-failure 5usepeerdnsnoauthnodetachmtu 1400mru 1400user 'cdma'password 'cdma'connect "/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2>/tmp/chat.log"Следующий файл
/tmp/ppp/dialup.chat копипастим аналогично:
$vi'' '''' 'ATZ''OK' 'ATD #777''CONNECT' ''Esc -> :w /tmp/ppp/dialup.chat -> :qрезультат:
$cat /tmp/ppp/dialup.chat'' '''' 'ATZ''OK' 'ATD #777''CONNECT' ''Добавляем созданные файлы в
/tmp/local/.files командами:
$echo /tmp/ppp/peers/dialup > /tmp/local/.files$echo /tmp/ppp/dialup.chat >> /tmp/local/.filesСохраняемся в память роутера
$flashfs save && flashfs commit && flashfs enableИ перегружаем роутер командой:
$rebootТеперь можно перекурить, а заодно и проверить работоспособность соединения перед завершающим этапом. Файлы дозвона у нас уже сохранены, необходимо лишь еще раз, вручную, запустить порт модема.
$insmod usbserial vendor=0x16d5 product=0x6506Теперь можем пробовать соединиться. Обратите внимание - в нашем скрипте dialup указан параметр nodetach, поэтому мы будем оставаться в открытой сессии до нажатия Ctrl-C. Таким образом, можно будет увидеть, что происходит в процессе дозвона:
$pppd call dialupПосле ввода команды в нашей телнетовской терминальной сессии должно происходить что-то подобное:
Script /usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2>/tmp/chat.log finished (pid 162), status = 0x0Serial connection established.using channel 2Using interface ppp0Connect: ppp0 <--> /dev/usb/tts/0............................................................local IP address 10.50.29.187remote IP address 10.50.29.148primary DNS address 80.255.144.8secondary DNS address 80.255.1.9Script /tmp/ppp/ip-up started (pid 165)Script /tmp/ppp/ip-up finished (pid 165), status = 0x0Теперь уже можно открыть браузер, спросить что-нибудь у гугля (или яндекса, по вкусу), зайти на любимый сайт... Можно также проверить скорость соединения через http://speedtest.net/ или подобные, чтобы убедиться, что она не ниже, чем было при прямом подключении к компьютеру.
Для завершения соединения возвращаемся в окно telnet и жмём Ctrl-C.
Чтобы постоянно не прописывать все эти интересные и увлекательные штуки при каждом включении роутера, создадим файл автозапуска порта модема и соединения - /tmp/local/sbin/post-boot
$mkdir /tmp/local/sbinНаполняем файл автозагрузки:
$vi#!/bin/shinsmod usbserial vendor=0x16d5 product=0x6506sleep 5pppd call dialupEsc -> :w /tmp/local/sbin/post-boot -> :qЧто бы наш файл мог выполниться системой при загрузке, присваиваем ему атрибут выполнения:
$chmod +x /tmp/local/sbin/post-bootИ не забываем сохраняться
$flashfs save && flashfs commitВсё готово! Перегружаемся и пробуем!
$rebootДля контроля выполнения команд можно открыть сессию телнет с командой:
$tail -f /usr/tmp/syslog.logНаслаждаемся работой системы!
Важно!
Коды Vendor и Product в статье указаны для моего модема! Не забывайте менять их для своих устройств!
Таким образом сервер остался в кладовке, десктоп по ночам не шумит, модем и роутер тихонько разместились себе на подоконнике, а я пишу эту статью на своей любимой кухне под тихую музыку и кофейный аромат.