Задача:
Осуществить возможность пробуждения (Wake on Lan) из интернета удаленного
компьютера, находящегося дома за роутером марки D-Link (DIR-300, DIR-320).
Решение:
Использование команды ip, имеющейся в стандартных сборках BusyBox'a в роутерах D-Link.
Предисловие:
Дома стоит роутер D-Link DIR-320/NRU ревизии B1, а до этого был DIR-300/NRU
ревизии B5, для которых (на данный момент) нет альтернативных готовых прошивок
(в том числе и горячо всеми любимой DD-WRT). На роутере стоит BusyBox 1.12.
Проблема состояла в том, что встроенное в веб-интерфейс средство переброса
пакетов не позволяют переадресацию в широковещательный канал - broadcast
(x.x.x.255), а хитровыделанный D-Link обновляет arp-таблицу каждые 15-30
секунд, так что непосредственно в выключенный длительное время компьютер Magic
Packet тоже не перебросить. Тайваньские ребята решили отказаться от компиляции
arp, sudo и прочих печенюшек в BusyBox, поскольку iptables тоже не позволяет
POSTROUTING на широковещательный канал.
Решение после недели напряженного поиска было найдено случайно на ныне
почившем форуме сборки линукса для старых компьютеров под роутер.
Пример:
Для начала настройте BIOS вашей материнской платы (в разделе настроек питания
есть пункт о пробуждении из выключенного состояния) и вашей сетевой карты (уже
из операционной системы в свойствах карты). Для проверки выключите компьютер и
посмотрите, если индикация сетевого разъема мигает, значит все в порядке.
1. Подключаемся telnet-ом к роутеру (логин и пароль те же, что и для веб-интерфейса):
Dlink-Router login: admin Password: Welcome to _______ ___ __ ____ _ _ ___ | ___ \\ | | |__|| \\ | || | / / | | | || ___ | |__ __ | \\| || |/ / | |___| || |___| | || || |\\ || \\ |_______/ |______||__||_| \\____||_|\\___\\ = Ebuilding Networks for People = BusyBox v1.12.1 (2011-05-13 14:42:48 MSD) built-in shell (ash) Enter 'help' for a list of built-in commands. #
2. Если компьютер в данный момент присоединен к роутеру, то ищем его mac-адрес, набираем:
# ip neigh show <Внешний_ip> dev eth2.5 lladdr 01:23:45:67:AB:CD DELAY ! Внешний адрес 192.168.0.50 dev br0 lladdr 11:22:33:44:55:66 REACHABLE ! Настольный компьютер 192.168.0.90 dev br0 lladdr 77:88:99:00:AA:BB REACHABLE ! Ноутбук
3. Поскольку в данный момент уже уже есть запись для нашего mac-адреса, то мы
не добавляем, а просто изменяем текущую:
# ip neigh change 192.168.0.50 lladdr 11:22:33:44:55:66 nud permanent dev br0
4. Смотрим результат, снова набираем:
# ip neigh show <Внешний_ip> dev eth2.5 lladdr 01:23:45:67:AB:CD DELAY ! Внешний адрес 192.168.0.50 dev br0 lladdr 11:22:33:44:55:66 PERMANENT ! Настольный компьютер 192.168.0.90 dev br0 lladdr 77:88:99:00:AA:BB REACHABLE ! Ноутбук
После этого уже заходим на веб-интерфейс нашего роутера и в разделе "межсетевой
экран" в пункте "Виртуальные серверы" добавляем проброс 9 (или 7, в зависимости
от вашей сетевой карты) порта роутера на порт ip вашего компьютера.
Послесловие:
Совет: настройте через веб-интрефейс роутера DHCP для mac'а вашего компьютера
статический IP (по умолчанию DIR-300(320)/NRU выдает их в диапазоне от
192.168.0.2 - 192.168.0.100)
так же есть еще и вот такая инструкция
D-Link DIR-300 - удаленное включение компьютера
Должен поделиться опытом.
Встала задача: удаленно включать сервер.
Теория проста: посылать из любого интернета «магический» (Wake On Lan) udp-пакет на IP-адрес DLink'a, работающего в режиме «роутер». А DLink должен переправить в сеть широковещательный пакет и «разбудить» комп с заданным MAC-адресом.
Практика оказалась кровавее:
1) заходим в админку DIR-300: http://192.168.1.1 (имя admin, пароль по умолчанию пустой)
2) переходим в рубрику «ADVANCED-Port forwarding»
3) включаем новое правило: имя «WOL», все порты - 4009, протокол «udp», IP-адрес «192.168.1.255»
4) жмем «Save settings» и ВНЕЗАПНО «Invalid IP address !»
5) вводим в адресную строку браузера java-патч:
javascript:function is_valid_ip2(ipaddr, netmask){return true;};
(этим мы временно отключаем*** проверку адресов!!!)
жмем Enter в конце этого текста, он исчезает
6) снова жмем «Save settings», ждем 5 сек и.. СЛАВА ВСЕВЫШНЕМУ! Настройки сохраняются!
Ну а дальше дело техники.
== На сервере делаем так:
aptitude install ethtool ifconfig (в этом месте запишите на бумажку HWaddr, т.е. MAC) ethtool eth1 ethtool -s eth1 wol g poweroff
Уезжаем в Мухосранск.
== В Мухосранске на ноутбуке делаем так:
aptitude install wakeonlan wakeonlan -p 4009 -i 222.222.222.222 aa:33:bb:44:cc:55
где последние два значения - внешний IP роутера и MAC сервера.
После чего, если повезет, сервер включается 😉
*** Если у вас другая модель D-Link, то функцию java-скрипта, проверяющего broadcast адрес, можно поглядеть в браузере «Просмотр HTML кода» на странице «ADVANCED PORT FORWARDING RULES». Например, можно было бы дать такой более жесткий хак:
javascript:function check(){return true;};