IGMP и Wake On Lan

563
strubbly

У меня есть сервер Windows 10, который некоторое время работал хорошо, используя Wake On Lan. Адаптер Realtek настроен с включенным Wake On Magic Packet и отключенным Wake On Pattern Match Match. Точно так же для Windows установлено «Пробуждение только на Magic Packet». Обычно это хорошо работает в моей домашней сети: у меня есть пара WoL-клиентов, каждый из которых может разбудить сервер, когда им это нужно, и сервер быстро переходит в спящий режим, когда он больше не нужен.

Недавно я включил IGMP Proxy на домашнем маршрутизаторе для поддержки приложения IPTV. Однако теперь, когда сервер спит, он снова включается через несколько секунд, вызванный сигналом пробуждения от сетевого адаптера. Отключите IGMP Proxy, и он перестанет просыпаться.

Я довольно уверен, что это какой-то пакет многоадресной рассылки, который запускает пробуждение. Я использовал Wireshark, чтобы прослушать пакеты, вызывающие пробуждение, но я не могу найти виновника: на момент пробуждения нет Магических Пакетов, но много многоадресных.

Так, что происходит? Почему адаптер просыпается от пакетов, которые не похожи на Magic? И как я могу это исправить?

Обновить:

Я взял пакетный захват (всего 28 пакетов), который охватывает период от сна до пробуждения на сервере и поэтому должен содержать пакет с ошибками. Я отмечаю, что ни один из фреймов не содержит MAC-адрес сервера (как это сделал бы волшебный пакет), но большинство из них являются пакетами UDP -> RTTP -> ISO / IEC 13818-1 -> DVB-EIT, которые содержат много " FF "начинка (как волшебный пакет).

Существует также 1 пакет ICMP v6 и 2 кадра STP. Я не думаю, что они делают это, так как я думаю, что видел захваты следа без них - но я могу ошибаться.

Однако обратите внимание, что захват пакета осуществлялся через коммутатор. Таким образом, он будет видеть любой магический пакет, который транслируется (как те, которые я отправляю намеренно), но он не будет захватывать гипотетический магический пакет, отправленный непосредственно в MAC-адрес сервера. С другой стороны, когда я фиксирую на сервере (в условиях, при которых он пробуждается, но когда он не спит - конечно), я не вижу ничего похожего на волшебный пакет, направленный на его MAC-адрес.

Исполнитель является Realtek 8168 PCI GbE адаптер, поставляемый на моем Asus P плате LX 8Z77-V с последними драйверами от здесь .

ОБНОВЛЕНО БОЛЕЕ ТОЧНЫМИ СИМПТОМАМИ

Таким образом, IGMP не была прямой причиной. Я могу достаточно точно воспроизвести проблему, не используя Multicast. Если я просто отправляю определенный пакет UDP (полезную нагрузку) несколько раз адаптеру как широковещательную рассылку UDP, я в конечном счете могу заставить его проснуться. Обычно это занимает 300 или 400 отправок. Пакет был скопирован из перехвата многоадресного потока и типичен для вида пакетов, видимых в нем.

Это код Python 3, который я использовал для отправки пакета (и байты пакета показаны как шестнадцатеричный дамп):

import time from socket import * cs = socket(AF_INET, SOCK_DGRAM)  hex_dump = ''' 0000 01 00 5e 51 82 fb 78 24 af 98 f3 30 08 00 45 88 0010 05 4c 00 00 00 00 3a 11 a8 31 6d 9f f7 fb ea 51 0020 82 fb 16 aa 16 aa 05 38 00 00 80 21 0c a1 f9 47 0030 9b 2e 00 00 00 2d 47 40 12 13 00 4f f0 37 04 6d 0040 fb 01 01 04 6d ff 00 01 4f d0 35 e4 1c 17 30 00 0050 00 30 00 20 1c 4d 1a 65 6e 67 15 52 75 67 62 79 0060 20 54 6f 6e 69 67 68 74 20 4f 6e 20 54 6f 75 72 0070 00 9b fe ae 4d ff ff ff ff ff ff ff ff ff ff ff 0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00f0 ff ff 47 1f ff 10 ff ff ff ff ff ff ff ff ff ff 0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0120 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0130 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0140 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0150 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0160 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0170 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0180 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 47 40 01b0 12 14 00 4f f0 3b 04 6e fb 00 01 04 6e ff 00 01 01c0 4f e3 83 e4 1c 16 26 00 02 04 00 80 20 4d 1e 65 01d0 6e 67 19 4c 69 76 65 3a 20 44 61 72 6d 73 74 61 01e0 64 74 20 76 20 48 61 6d 62 75 72 67 00 20 6e 4f 01f0 2b ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0200 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0210 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0220 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0230 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0240 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0250 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0260 ff ff ff ff ff ff ff ff ff ff 47 40 12 15 00 4f 0270 f0 41 04 6e fb 01 01 04 6e ff 00 01 4f e3 87 e4 0280 1c 18 30 00 02 00 00 20 26 4d 24 65 6e 67 1f 4c 0290 69 76 65 3a 20 57 65 72 64 65 72 20 42 72 65 6d 02a0 65 6e 20 76 20 57 6f 6c 66 73 62 75 72 67 00 7b 02b0 ba e0 e7 ff ff ff ff ff ff ff ff ff ff ff ff ff 02c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 02d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 02e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 02f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0300 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0310 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0320 ff ff ff ff ff ff 47 1f ff 10 ff ff ff ff ff ff 0330 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0340 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0350 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0360 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0370 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0380 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0390 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 03a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 03b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 03c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 03d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 03e0 ff ff 47 40 12 16 00 4f f0 2f 04 6f dd 00 01 04 03f0 6f ff 00 01 4f ca b7 e4 1c 17 00 00 00 15 00 80 0400 14 4d 12 65 6e 67 0d 4d 6f 74 6f 47 50 3a 20 49 0410 43 59 4d 49 00 81 93 dc 61 ff ff ff ff ff ff ff 0420 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0430 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0440 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0450 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0460 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0470 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0480 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0490 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 47 40 04a0 12 17 00 4f f0 37 04 6f dd 01 01 04 6f ff 00 01 04b0 4f ca 41 e4 1c 17 15 00 00 15 00 20 1c 4d 1a 65 04c0 6e 67 15 42 54 20 53 70 6f 72 74 20 47 6f 61 6c 04d0 73 20 52 65 6c 6f 61 64 00 9a 07 13 89 ff ff ff 04e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0500 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0510 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0520 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0530 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0540 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0550 ff ff ff ff ff ff ff ff ff ff '''  arr = hex_dump.split('\n')  pkt = bytes() for a in arr: arr1 = a.split() hex_str = "".join(arr1[1:]) pkt += bytes.fromhex(hex_str)  cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)  for i in range(1000): print(i) cs.sendto(pkt[42:], ('192.168.1.255', 5802)) time.sleep(0.01) 
5
какой сетевой адаптер и драйверы вы используете? Albin 5 лет назад 1
Я добавил информацию NIC к вопросу strubbly 5 лет назад 0

1 ответ на вопрос

1
harrymc

Некоторая подсказка может быть найдена в статье службы поддержки Microsoft.
При включении функции пробуждения по локальной сети в Windows 7 или Windows Vista могут возникнуть нежелательные события пробуждения .

Кажется, что волшебный пакет - не единственное сообщение, которое прослушивается при включении Wake On Lan.

По умолчанию Windows 7 и Windows Vista при включении WOL прослушивают следующие пакеты:

  • Направленный пакет на MAC-адрес сетевого адаптера
  • Передача разрешения имени NetBIOS для имени локального компьютера
  • Пакет протокола разрешения адресов (ARP) для IPv4-адреса сетевого адаптера
  • Пакет обнаружения соседей IPv6 для многоадресного адреса запрашиваемого узла сетевого адаптера

Есть два места, где я нашел ссылки на ограничение событий Wake On Lan.

В Панели управления> Сеть и Интернет> Сетевые подключения щелкните правой кнопкой мыши свой адаптер и выберите « Свойства», а затем нажмите « Настроить» . На вкладке « Дополнительно » есть два свойства, которые по умолчанию включены: « Пробуждение по волшебному пакету» и « Пробуждение по совпадению с образцом» . Отключение второго может помочь.

enter image description here

На вкладке « Управление питанием ». Убедитесь, что вы отметили два флажка Разрешить этому устройству пробуждать компьютер и Разрешить только волшебный пакет для пробуждения компьютера .

image

Отключение IPv6 в локальной сети может также ограничить число непреднамеренных событий пробуждения.

Я определенно установил обе эти страницы настроек, как вы предлагаете. strubbly 5 лет назад 0
Не уверен, что вы подразумеваете под выключением IPv6 "в локальной сети". Он выключен на маршрутизаторе, но некоторые устройства все еще используют его. strubbly 5 лет назад 0
Если он выключен на маршрутизаторе, он не будет передавать сообщения IPv6, так что все в порядке. Я должен признать, что я удивлен, что ваш компьютер все еще просыпается от других сообщений, даже если ваши настройки должны отключить его. Какие модели вашего компьютера, материнской платы и сетевого адаптера? harrymc 5 лет назад 0
Я тоже удивлен :-) ПК - это Asus P8Z77-V LX с чипом Realtek GbE. Последняя Windows 10. strubbly 5 лет назад 0
Что говорит `powercfg –lastwake`? Попробуйте также запустить [powercfg -energy] (https://www.howtogeek.com/howto/7638/use-powercfg-in-windows-7-to-evaluate-power-efficiency/), когда компьютер находится в режиме ожидания и работает результат. harrymc 5 лет назад 1
Пробуждение определенно происходит от сетевого адаптера: оно останавливается, когда я снимаю флажок «разрешить этому устройству пробуждение» strubbly 5 лет назад 0
Энергетический отчет может быть полезен. У Realtek совсем недавно [сетевой драйвер] (http://211.75.126.106/downloads/downloadsView.aspx?Langid=1&PNid=5&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false#RTL8111B/RTLT8818888818188888188888188818181818181818181818181818181818181818188181818181818181818188181818181818181818111 / RTL8111CP / RTL8111D% 28L% 29% 3Cbr% 3ERTL8168C / RTL8111DP / RTL8111E% 3Cbr% 3ERTL8168E / RTL8111F / RTL8411% 3Cbr% 3ERTL8111G / RTL8111GUS / RTL8411B% 28Н% 29% 3Cbr% 3ERTL8118AS). [Версия BIOS 2501] (https://www.asus.com/us/Motherboards/P8Z77V_LX/HelpDesk_Download/) довольно старая, начиная с 2015/09/07, но все равно проверьте ее. Делайте резервные копии раньше. harrymc 5 лет назад 0
Я только что обновился до этой версии драйвера - без улучшений. strubbly 5 лет назад 0
Энергетический отчет может помочь точно определить проблемы с пробуждением. harrymc 5 лет назад 0
Вы также можете попробовать драйвер Windows 10 от Realtek для [Realtek 8168] (https://realtek-download.com/realtek-pcie-gbe-family-controller/). harrymc 5 лет назад 0