Wol и dualboot на MSI 970 Gaming

Настраиваем удаленный доступ к домашнему ПК за роутером

Не так давно я озадачился вопросом дистанционного пробуждения своего домашнего компьютера (WOL - wake on lan). Нужно мне это было для удаленного доступа к нему по SSH или TeamViewer. Таким образом при достаточной скорости интернет соединения можно работать за своим компьютером с привычной рабочей средой, получить доступ к нужным файлам (забытым дома), включить торрент-клиент и поставить на загрузку любимый сериал, чтобы по приходу домой не терять время на его скачивание. 

Ну и у этого в принципе есть множество преимуществ. Только вот настроить Wake On Lan на домашнем ПК у меня никак не получалось.

Исходные данные

Операционные системы установлены Windows 7 и Debian 9. Загрузчик Grub2. Основной системой использую Linux.

Материнская плата MSI 970 Gaming. В настройках BIOS выставил:

  • LAN Option ROM = Enabled
  • EuP 2013 = Disabled
  • Resume by PCI-E device = Enabled

К сетевой карте подходит провод от роутера. Роутер Beeline SmartBox One. Интернет провайдер соответственно Билайн.

Технология Wake on Lan

По идеи система должна получать Magick Packet от телефона через WiFi и загружаться. В идеале из глобального интернета, ip статический, но тут немного сложнее, об этом чуть позже (нужно пробрасывать порты и организовывать туннель).

Теперь разберемся, как работает технология WOL, обязательно ли лезть в настройки Операционной системы, или она может запускаться только биосом?

Немного побегав по интернету я сделал выводы:

Настройки БИОС'а были выставлены верно. Так как сетевая карта у этой материнской платы находится на шине PIC-e, пункта Resume by PCI-E device = Enabled достаточно.

Настройки сетевой карты в ОС

Так же стало ясно, что немаловажную роль в технологии WOL играют настройки операционной системы. А вернее те настройки, которые ОС посылает сетевой карте во время выключения. ОС дает директиву сетевой карте оставаться в режиме "прослушивания" сетевого трафика и ожидания Магического Пакета. Если такой настройки в системе нет, то компьютер обесточивается полностью, вместе с сетевой картой. Это очень важный момент, на котором я надолго застрял.

Дальше я начал ковырять Debian.
tcpdump успешно выявлял магические пакеты, но утилита ethtool не выводила поддержку WOL на данной сетевой карте в принципе.

$ sudo ethtool eth0

Settings for eth0: 
 Supported ports: [ MII ] 
 Supported link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 1000baseT/Full 
 Supported pause frame use: No 
 Supports auto-negotiation: Yes 
 Advertised link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 1000baseT/Full 
 Advertised pause frame use: No 
 Advertised auto-negotiation: Yes 
 Speed: 100Mb/s 
 Duplex: Full 
 Port: MII 
 PHYAD: 1 
 Transceiver: external 
 Auto-negotiation: on 
 Link detected: yes

Хотя там должны быть строки :

Supports Wake-on: g 
Wake-on: g

Где g значит, что WOL включен. Выяснилось, что для моей сетевой карты нет подходящих драйверов под Linux которые раскрыли бы все ее возможности.

Я пошел в Windows 7. Выставил настройки сетевой карты на поддержку WOL, завершаю работу Windows.

Настройка роутера

Отправляю с телефона Магический пакет через WiFi сеть. Компьютер включается. Я обрадовался, но рано. Это говорит о том, что все предыдущие настройки работают. Технология поддерживается аппаратным обеспечением и остается только разобраться в нюансах. Только рано радоваться было вот почему: естественно при отправке пакета из глобального интернета никакой реакции на магический пакет не происходило.

Полез в настройки роутера Beeline SmartBox One. Настроил проброс 9 порта (порт по умолчанию для wol) с ip адреса роутера на локальный ip моей машины. Заработало. Теперь компьютер так же включается из глобальной сети. Но радовать вновь рано.

ARP таблицы роутера

И тут начинается самое интересное...

Все работает исправно минут 15-20. После простоя компьютер перестает принимать Магический пакет, и никак не реагирует на внешнее воздействие.
На одном из форумов вычитал, что роутеры примерно раз в 15 минут обновляют значения своих ARP таблиц. Стал исследовать.

ARP (Address Resolution Protocol — протокол определения адреса) — протокол канального уровня, предназначенный для определения MAC-адреса Получателя в TCP/IP сетях.

Полез в настройки роутера вновь.
Там нет даже упоминания об этих ARP-таблицах. Раскопал в интернете, что можно зайти от SuperUser'а на роутер. Там будет доступно больше настроек.

Логин: SuperUser; Пароль: серийный номер SmartBox'a.

Да, действительно появился пункт "Arp таблицы". Захожу, но там только одна таблица на которую можно только посмотреть. Ни добавить запись, ни удалить нельзя. Что же делать?...

Путь к роутеру через SSH

Сидел на работе и размышлял. До этого я видел в настройках роутера от суперпользователя графу удаленное управление. Там был протокол SSH. Т.к. я на работе, и обычным способом перейдя на 192.168.1.1 подключиться к роутеру не могу, решил попробовать пробиться на роутер по SSH.

Оказываюсь в настройках роутера в консоли. Там нахожу команду arp. Она отображает текущие записи таблицы.

Одна из которых: (192.168.1.64) at <incomlete> on br0

Вместо <incomplete> должен быть физичиский адрес сетевой карты (MAC адрес).
Попытался изменить запись, ничего не вышло. Но удалось подключиться к базовой операционной системе Linux роутера командой SH.
Она меня отправила прямиком в консоль администратора системы. Тут то уже можно что-то предпринять.

Благодаря информации о работе с ARP взятой отсюда
добавляю постоянную запись в таблицу командой:

# arp -s 192.168.1.64 d8:cb:8a:9b:c2:17

Где 192.168.1.64 - ip пробуждаемого компьютера;
00:09:34:2c:36:9d - MAC адрес его сетевой карты через которую мы будим.

Результат

Выхожу из SH, закрываю SSH, с рабочего компьютера отправляю Магический пакет - вижу в TeamViewer'e появился мой домашний компьютер. Это успех.

В общем и целом как доставить Magick Packet стало ясно. Но остается один не решенный вопрос - как же быть с Linux Debian? Для данной материнской платы, к сожалению, я так и не нашел нужный драйвер сетевой карты, который поддерживал бы WOL. Но для моих целей в принципе достаточно и удаленного включения компьютера с помощью Windows 7. Но так, как загрузчик ОС стоит grub, в нем по умолчанию пунктом загрузки выбран Linux, что в конкретной ситуации меня не устраивает. Нужно изменить файл конфигурации загрузчика и отдать приоритет Windows, иначе после выключения компьютера я потеряю к нему доступ.

Итак, выводы:

Алгоритм успешной настройки удаленного включения компьютера в общем и целом выглядит так:

  1. Необходимо понять, поддерживает ли сетевая карта технологию WOL;
  2. Зайти в BIOS и включить ее;
  3. Загрузиться в ОС и выставить настройки сетевой карты;
  4. Убедиться в правильности выставленных настроек - выключить ПК, посмотреть на сетевую карту (должен мигать светодиод, означающий, что сетевая карта ждет магический пакет);
  5. Настроить статический ip адрес роутеру и пробросить магический пакет на сетевую карту целевого компьютера;
  6.  Сгенерировать магический пакет любым удобным средством и направить его на статический ip роутера;
  7. Наслаждаться результатом.