
Иногда может потребоваться удаленно включить домашний компьютер. Например, вы находитесь на работе, и надо забрать кое-какие документы с домашнего компьютера - а домашних, кто мог бы тыкнуть на кнопку включения, как на зло, нет дома.
В поисках решения этой задачи было принято решение поставить wakeonlan
на MBL, т.к. он всё равно постоянно включен, и на борту у него находится почти полноценный хоть и немного устаревший, но Debian. По идее этот функционал можно просто купить в виде целого комплекса решений под именем fpkmgr
, но нам интересно самостоятельно разобраться, и слегка “заточить” под себя. В результате мы получим:
- Возможность включать любые компьютеры в локальной сети, к которой подключен MBL, если они поддерживают эту функцию, и она на них, разумеется - включена;
- Делать это откуда угодно, только был бы доступ к глобальной сети.
Первое с чем мы будем разбираться - это доступ к MBL из интернета. Нам необходимо иметь некоторый адрес, к которому мы будем обращаться и попадать на роутер, который как раз к интернету то и подключен, и который будет перенаправлять наши запросы к MBL. Существует такая служба - DDNS, позволяющая привязывать серый (динамический) IP адрес (который выделяет провайдер при подключении к глобальной сети) к статичному DNS имени. Таким образом, при даже при изменении IP адреса - DNS имя ссылается на конкретную железку, а в нашем случае - на наш роутер. Данную функцию поддерживают на данный момент большинство роутеров, и заострять на этом внимание мы не будем, считая, что определенное DNS имя уже имеется (далее по тексту - home_router.ddns.com
). Проверяем чтоб адрес откликался на echo-пакеты (успешно отвечал на ping; некоторые модели роутеров по умолчанию блокируют icmp трафик; проверять необходимо из другой сети, например, воспользовавшись 3G интернетом; после всей настройки это можно отключить), и переходим к настройке проброса портов. Проброс портов - это функция, которая в нашем случае будет связывать запросы приходящие “извне” — с MBL, который находится “внутри” домашней сети. Все пакеты, который будут приходить на 81
порт home_router.ddns.com
- необходимо перенаправлять на адрес нашего MBL, имеющий адрес 192.168.1.2
, тоже на 81
порт (на 80
у нас работает веб-интерфейс). Скриншот ниже демонстрирует пример настройки:
После всех описанных выше действий мы считаем, что обращаясь по адресу home_router.ddns.com:81
наши запросы успешно перенаправляются на 81 порт MBL, и нам остается научить его их получать, и выполнять необходимые действия. Подключаемся к нему, и создаем VirtualHost
на уже установленном Apache
, который будет слушать как раз 81 порт. Для этого создадим домашнюю директорию для нашего виртуального хоста /var/wol/
, и создадим файл /etc/apache2/sites-available/wol
описывающий виртуальный хост:
Listen 81
<VirtualHost *:81>
ServerAdmin [email protected]
DocumentRoot /var/wol/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
</VirtualHost>
И после этого этого создадим симлинк на него в директории /etc/apache2/sites-enabled
с последующим перезапуском Apache, для чего выполним:
$ ln -s /etc/apache2/sites-available/wol /etc/apache2/sites-enabled/000-wol
$ /etc/init.d/apache2 restart
Теперь создадим файл /var/wol/index.php
с избитой фразой “Hello World” и проверим - отображается ли она в браузере при запросе адреса http://home_router.ddns.com:81/
. Если так оно и есть - то продолжаем. Ставим необходимым минимум с которым будем работать, и проверяем корректность установки пробным запуском приложения wakeonlan
, которое и будет включать необходимые компьютеры в локальной сети:
## putty.exe [email protected] -pw welc0me
$ apt-get update
$ apt-get install nano wakeonlan
$ wakeonlan -v
wakeonlan version 0.41
Остается лишь научить index.php
принимать переданные параметры и выполнять необходимые действия. Наполняем его следующим содержимым:
<?php
$ip = preg_replace('/\[^0-9.\]+/i', '', $_GET['ip']);
$mac = preg_replace('/\[^a-f0-9:\]+/i', '', $_GET['mac']);
echo "<html><head><title>Wake up!</title></head><body><p>".
"Syntax: script.php?ip=8.8.8.8&mac=aa:bb:cc:dd:ee:ff</p><pre>n";
echo shell_exec('wakeonlan -i '.$ip.' '.$mac);
echo "n</pre><small><i>";
echo shell_exec('wakeonlan -v');
echo "</i></small></body></html>";
Теперь, вместо “Hello World” ты должен увидеть вывод выполнения приложения wakeonlan
. Для того, чтоб включить определенную машину необходимо знать её IP и MAC адреса. Вооружившись этими данными мы подставляем их в строку запроса (чтоб получилась строка вида http://home_router.ddns.com:81/?ip=8.8.8.8&mac=aa:bb:cc:dd:ee:ff
), и начинаем проверять путем анализа вывода wakeonlan
и успешного включения подопечного компьютера. А на этом всё, если будут возникать вопросы - смело спрашивайте в комментариях.