スリープモードを有効にしてLANから目覚めさせる方法はありますか?

スリープモードを有効にしてLANから目覚めさせる方法はありますか?

しばらくすると、サーバーをスリープ状態にしてもLAN要求を受信できるかどうか疑問に思います。私は私をメディアサーバーとして使用し、1日3〜4時間使用しますが、常に動作させるのは本当に電力の無駄です。しかし、映画を見たいときに映画を見るために2階に走りたくありません。この問題が発生しないようにする投稿を見たことがありますが、どのように有効にしますか?

答え1

Wake on LANは、オペレーティングシステムの機能ではなく、BIOSおよびNICの機能です。つまり、これを行うにはBIOSとNICのサポートが必要です。

BIOSでこれを有効にすると(可能であれば)、出力を確認してNICでWOLサポートが有効になっていることを確認できますethtool [interface]

値がSupports Wake-on含まれている場合、gネットワークカードはWOLマジックパケットをサポートします。

実際に有効になっていることを確認するには、値を確認してくださいWake-on。その場合はg、NICでマジックパケットサポートが有効になっています。

有効になっていない場合は、次のコマンドを実行します。

ethtool -s [interface] wol g

このコマンドはシステムが起動するたびに実行する必要があるため、適切な場所に追加してください。 Ubuntuでは、一般的に最高の場所はNetwork Managerupまたはそれに対応する場所です。/etc/network/interfaces

答え2

この質問は1年前に提起されたことを知っていますが、いくつかの解決策が見つかりました。まず、powernapスクリプトを使用して実行中の特定のプロセスを確認して見つけることができます。ここ

2番目にオンラインで見たものLinuxの問題。これは他のシステムへのpingを使用します。

また、試みるためにDD-WRTでルータをフラッシュしました。dd-wrt ​​wiki。これは非常に優れたエレガントなソリューションですが、問題は、ログがネットワーク外で許可されたパケットのみをキャプチャするため、内部メディアサーバーには適していないことです。内部専用メディアサーバーが必要な場合は機能しません。

dd-wrtの場合これVLANを使用すると、これに非常に良いソリューションが提供されます。デフォルトでは、サーバーを独自の内部サブネットに配置し、そのVLANのトラフィックを監視すると、古いスクリプトが機能します。これはうまく機能しますが、私の経験では、VLAN機能DHCPを使用するたびにルーターとdd-wrtビルドがクラッシュします。

私はdd-wrtに頼らず、アクセス時にメディアサーバーを自動的に起動し、一時停止するソリューションが必要だと判断しました。私はラズベリーパイがあってそれを使っています。私が見つけた最後の解決策は、小さなbashスクリプトを書くことでした。 raspberry-piの依存関係はetherwakeとtcpdumpです。どちらもデフォルトでRasbianにインストールされていません。

sudo apt-get install etherwake
sudo apt-get install tcpdump

覚醒スクリプトは次のとおりです。

#!/bin/bash

pingInterval=60 #time interval, in seconds, between checks that the server is still awake.
target=192.168.x.x  #WOL target ip address
targetMAC=00:11:22:33:44:55  #WOL target MAC

wake () {
tcpdump -i eth0 -c 1 -p host $target
etherwake $targetMAC
#echo WOL sent to $target at $targetMAC
return
}

while sleep $pingInterval; do
varPing=`ping -s 1 -c 2 $target > /dev/null; echo $?`
if [ $varPing -eq 0 ]; then
#echo ping success
else
#echo ping fail
wake
fi
done

主なアイデアは、これが私のラズベリーパイで実行され、サーバーへの単一のARP要求を見つけた場合、サーバーを目覚めさせることです。サーバーが起きている場合は、arp要求を受け取らず、代わりに時々pingを送信して、まだ目が覚めていることを確認してください。

ファイル名をwol.shとして指定し、実行可能にしました。それからsudo crontabに入れて@rebootをrootで始めます。これは、eth0とetherwakeを受信するために高いアクセス権を必要とするtcpdump用です。

sudo chmod +x /home/pi/wol.sh
sudo crontab -e

下部に追加

@reboot sh /home/pi/wol.sh > /dev/null

スリープスクリプトは、同じ原則を使用してメディアサーバー上で実行されます。スキャン間隔(icmpまたはarpを除く)中にサーバーにトラフィックがない場合は、1分を選択します。その後、「Sleepy」という名前のカウンターに追加されます。眠気が10または20に達したときに20分間入って来る車両がない場合は、眠気を0に設定してpm-suspend睡眠コマンドを発行します。パケットを受信したsleepiness!=0後、sleep-1を実行します。したがって、ルータから迷子になったパケットや一部のパケットをキャプチャする場合は、カウントをゼロにリセットせずにカウンタで-1のみを実行します。 20分連続したパケットがまったくない状態ではなく、一定時間の間、パケットが減少したときにゆっくり省電力モードに切り替わる猶予期間を許容するため、ここに入れました。

ディスクへの継続的な書き込み(サーバー側)に関しては、両方のシステムでtcpdumpを呼び出す必要があるため、これはおそらく最善ではありません。ディスクへの書き込みのために実際のHDDの磨耗を防ぐために、キャプチャファイルが保存されている犠牲USBをマウントしました。

関連情報