私は家の台所にあるRaspberry PiをWi-Fiブリッジとして使用して、イーサネット専用デバイスへのネットワーク接続を提供します。
私はWill Haleyのガイドを使用し、それは素晴らしい仕事をしました。その部分は解決しましたが、デバイスがNASをスムーズに起動できるようにしたいのですが、クライアントデバイスではその機能を使用できません。
etherwake
[NAS用のMACADDRESS]はうまく機能し、ターミナルを使用してRaspberry PiブリッジからNASを完全に目覚めさせることができるので、トリガーに基づいてそれを自動化したいと思います。
メディアアプリがクライアントデバイスにロードされたときにNAS(閉じている)に接続しようとすると、次のことが発生します。私はpktstat
以下を表示しようとしました。
603.8 0% tcp 192.168.84.100:52787 <-> 192.168.84.2:21
192.168.84.2はNAS、.100はクライアントデバイスです。私はプライマリLAN FTPサーバーを使用して家の中でメディアを共有するので、ポート21を使用します。
そのTCPトラフィックを受信し、そのトラフィックがキャプチャされたときにセカンダリスクリプトを開始する永続スクリプト/サービスをどのように生成しますか(すでにWOLがあります)。
また、NASへのping応答が絶えず目覚めようとするのを防ぐために失敗した場合にのみスクリプトを実行する必要がありますか?
Piでこれを行うことができれば、誰かが台所でメディアプレーヤーをオンにするたびにNASがオフになっても目が覚めるでしょう。これは私たちの家族にとってとても良いです。
最近の電気価格は、不要なときにNASをオフにしてスリープ状態にするのが良いことを意味します。他のほとんどのデバイスにはWOL機能があるので、ここでは手動で作成してみました。
答え1
以下は、Ljm Dullaartの助けのおかげで問題を解決するソリューションです。
#!/bin/bash
interfacename=eth0
IPofNAS=192.168.84.2
MACADDRESSofNAS=AA:BB:CC:DD:EE:EE
timeout=300
while : ; do
tcpdump -nt -i $interfacename -c1 dst $IPofNAS and port ftp
if ! ping -c1 $IPofNAS ; then
etherwake -i wlan0 $MACADDRESSofNAS
fi
sleep $timeout
done
最初は、tcpdumpがNAS IPに対するARPリクエストを探していたので、スクリプトは私のNASを目覚めさせました。これらの要求は、クライアントデバイスがオフになっているときに発生し、Piでのみ発生しました。これを発見するのに時間がかかりました。また、tcpdump はポート 21 を「ftp」に書き込むので、スクリプトをフィルタリングするためにポート 21 を追加すると動作が停止します。生のtcpdump出力でftpがプレーンテキストであることを確認した後、次のように追加しました。
とても感謝しています!
答え2
1つの可能なアプローチは、Piを通過してNASに移動するすべてのトラフィックを監視することです。トラフィックがある場合は、NASを目覚めさせてください。スクリプトでは次のようになります。
#!/bin/bash
interfacename=eth0
IPofNAS=192.168.84.2
MACADDRESSofNAS=00:11:22:etc
timeout=600
while : ; do
tcpdump -nt -i $interfacename" -c1 dst $IPofNAS
if ! ping -c1 $IPofNAS ; then
etherwake $MACADDRESSofNAS
fi
sleep $timout
done
説明:NAS()に送信された単一のtcpdump -nt -i $interfacename -c1 dst $IPofNAS
パケットをダンプします。 DNS検証とタイムスタンプなし()。-c1
dst $IPofNAS
-nt
ping
これらのパケットが受信されると、NASが応答していることを確認するためにテストが行われます。それ以外の場合、etherwake
NAS が起動します。
$timeout
その後、NASがPingでいっぱいになるのを防ぐために、再起動する前にしばらく待ってください。$timeout
NASがスリープモードに移行するまでのタイムアウト時間でなければなりません。一度試してみることもできます。
systemd
このスクリプトの起動を要求できます。/etc/systemd/system/wolNAS.service
コンテンツにする
[Unit]
Description=WOL of the NAS
[Service]
ExecStart=/bin/bash /usr/local/bin/the_script_above.sh
[Install]
WantedBy=multi-user.target
(免責事項:テストされていません)