Разбудить компьютер через Интернет, используя другой компьютер в той же локальной сети
450
ivanp7
У меня есть два компьютера на базе Arch Linux, «A» и «B», подключенные к Интернету через один и тот же маршрутизатор. Я настроил и протестировал Wake-on-WAN на обоих из них. Оба компьютера выключены большую часть времени.
Я хотел бы подключиться к ним, не отправляя волшебные пакеты извне. Сетевая карта компьютера «А» поддерживает пробуждение от одноадресной активности, поэтому я включил его. Проблема в том, что это не относится к компьютеру «B» - его может разбудить только волшебный пакет.
Могу ли я заставить компьютер «А» автоматически разбудить компьютер «Б» при попытке подключения к TCP / UDP последнему? Я думаю о решении, как это:
Настройте маршрутизатор и компьютер «B» так, чтобы весь трафик «B» (через определенные порты) проходил через компьютер «A».
Установите сценарий для «A», который каким-либо образом инициирует соединение с «B», проверяет состояние «B» и отправляет магический пакет.
Может быть, есть более простой способ?
РЕДАКТИРОВАТЬ:
Было бы хорошо, если бы можно было перенаправить все, чтобы трафик «B» не проходил через «A» после пробуждения первого, поэтому последний мог автоматически отключиться.
2 ответа на вопрос
0
VL-80
Вы можете создать bash-скрипт на компьютере, Aкоторый генерирует и отправляет волшебный пакет на компьютер Bпо локальной сети.
Как только вы разбудите компьютер Aодноадресным трафиком, сценарий может сработать автоматически, или вы можете Aзапустить SSH на компьютере и запустить его.
Этот ответ на StackOverflow описывает, как сделать такой скрипт.
Я не хочу, чтобы «Б» проснулся, когда я получил доступ к «А». Сценарий должен определить, есть ли соединение с портами, зарезервированными для 'B'. Во всяком случае, этот ответ является уточнением моего решения, спасибо.
ivanp7 5 лет назад
0
«Я не хочу, чтобы« Б »проснулся, когда я получил доступ к« А ». ХОРОШО. Тогда не заставляйте скрипт запускаться автоматически. Всякий раз, когда вам нужно разбудить `B`, вы сначала разбудите` A`, вставьте SSH и запустите скрипт, который разбудит `B`. Таким образом, пробуждение `A` не приведет к автоматическому пробуждению` B`.
VL-80 5 лет назад
0
Это то, что я делаю сейчас, но я хочу избавиться от ручной процедуры пробуждения.
ivanp7 5 лет назад
0
Я собираюсь попробовать что-то вроде `if [[" $ (ss -anp | grep $ PORT | grep ESTAB | wc -l) "-gt" 0 "]]; затем wakeup.sh; fi`
ivanp7 5 лет назад
0
@ ivanp7 Почему вы не позволяете маршрутизатору отправлять волшебный пакет? У вас есть хороший маршрутизатор с поддержкой оболочки, по крайней мере, с busybox?
Xen2050 5 лет назад
1
@ Xen2050 Это было бы лучшим решением, если бы я сам купил роутер. Это дешевый Huawei HG8245H-256M, установленный моим провайдером. Когда-нибудь я куплю настоящий роутер, но сейчас я хочу получить как можно больше от нынешнего оборудования.
ivanp7 5 лет назад
0
@ivanp7 Could try using your own router (or any other low power device with a shell, raspberry?) connected to the ISP's Huawei as another client, or daisy-chain your own router after the Huawei & have all your devices connected to your router
Xen2050 5 лет назад
0
0
dirkt
Могу ли я заставить компьютер «А» автоматически разбудить компьютер «Б» при попытке подключения к TCP / UDP последнему?
Вам нужно будет передать запросы ARP на B, пока B спит, затем прослушать попытки подключения для IP B и отправить пакет пробуждения.
Это выполнимо, но достаточно сложно, я бы написал небольшую программу на C, используя пакетные сокеты для первоначального прокси ARP и попытки отслеживания соединения. Также необходимо управлять состоянием о B, сообщая, если B спит или нет, например, проверяя, отправляет ли B что-нибудь и отвечает на запросы ARP.
Вам понадобится немало понимания сетевых протоколов, чтобы написать это (или смотреть на перехваты Wireshark достаточно долго, пока вы не поймете, что происходит.
I have static ARP entries for A&B, therefore, I believe, the router won't send ARP packets? Why not just NAT some reserved port (let it be X) on A to B and have a daemon on A that detects connections to X, sending magic packet if neccesary? The main drawback of this approach is that A won't shut down while B is still in use.
ivanp7 5 лет назад
0
У вас есть статические записи ARP для B на всех компьютерах, которые находятся в локальном сегменте и могут делать запросы или пересылать пакеты B? Если да, то вам не нужно иметь дело с ARP, но я бы просил актуальный запрос, чтобы убедиться. Эта небольшая программа на C в основном ** была бы ** демоном на A, который обнаруживает соединения с B (и обрабатывает ARP сверху, если это необходимо). Если вы можете перенаправить (NAT) все запросы к B на A на каком-либо маршрутизаторе перед A и B, то да, вы можете сделать это тоже (и NAT обратно на B на A), но вы не указали, где запросы могут поступать. Также со статическим ARP вам придётся NAT.
dirkt 5 лет назад
0
Запросы поступают извне, и в локальной сети есть только два компьютера, A и B. У меня есть все оборудование, никаких ограничений по эксплуатации.
ivanp7 5 лет назад
0
Тогда у меня возникнет соблазн выполнить пробуждение в маршрутизаторе - маршрутизатор все равно будет включен, вам не придется иметь дело с ARP (или даже использовать отсутствующий ответ ARP в качестве индикатора для отправки пакета WoL). Опять же, C-программа с сокетами пакетов, мониторинг ARP-запросов и ответов, состояние тайм-аута. Я не удивлюсь, если кто-то уже написал это где-то ...
dirkt 5 лет назад
0
Боюсь, мой маршрутизатор Huawei HG8245 с Dopra Linux не позволит мне сделать это. Он имеет твердую статическую встроенную прошивку и слишком мало памяти для установки OpenWrt. В противном случае это был бы предпочтительный способ.
ivanp7 5 лет назад
0
Но NATing B к A на HG8245 будет работать? Как насчет общих правил iptables?
dirkt 5 лет назад
0
Извините за задержку. Он поддерживает простую переадресацию портов, а не многое другое.
ivanp7 5 лет назад
0
Если вы не можете подключить NAT B к A на HG8245, статический ARP не будет работать (попытки подключиться к B закончатся только на B, а не на A), поэтому я бы использовал оригинальную идею в ответе ( ARP прокси, пока B не проснется). Если вам все равно придется перенести пересылку на B, вы можете все перенаправить на A, а затем собрать что-нибудь вместе, чтобы либо прослушать и отправить WoL, либо активировать NAT через iptables, но я не уверен, будет ли это проще.
dirkt 5 лет назад
0