こちらの記事で紹介したようにtailscaleを使ってラズパイをVPNサーバとして使っていますが、VPNできたら当然自宅NASにもアクセスしたくなりますよね

でも、以前書いたようにNAS(DS118)は常時電源を入れていないので、使うときには起こす必要があります

ですので、必要な時にNASを起こせるようにラズパイをwolサーバに仕立てます

NAS(DS118)のwolを有効にする

使っているNAS↓

まず、NASがwol信号を受け付けられるように、wolを有効にします

https://support.ask-corp.jp/hc/ja/articles/360051678474-Wake-on-LAN-を設定したい

ラズパイに WOLサーバ を建てる

参考(大感謝!)

構成は Flask + uWSGI + Nginx となっています

ラズパイのCPU温度とクロック周波数を追加していますが、すべてそのまま使わせていただきました

便利に使えており、大変感謝しております!

構築に関して、自分のつまずいた点などを書いています

出来上がり見た目↓

pip install -r requirements.txt のインストール方法

https://note.nkmk.me/python-pip-install-requirements/

文字化けしたがインストールできたっぽい

たぶんteratermの設定のせいで文字化けした

起動など

ファイルは大体をPCで作って、FTPソフト(filezillaを使用)でラズパイに転送し、手直しはSSH接続して直接ファイルを弄った

ubuntu@ubuntu:~$ pwd

/home/ubuntu

/home/ubuntu の下にファイルを作って配置する


サービス起動

sudo systemctl start wakeonlan-server

サービス自動起動(起動時)

sudo systemctl enable wakeonlan-server

実行したのでbootで自動実行される


サービスのステータス確認

sudo systemctl status wakeonlan-server

active(running)になっているのでおけ

プログラム(wol.py)のエラー箇所もわかる

ValueError(“Incorrect MAC address format”) が出ていることがわかった

たぶんwol.htmlから変数(MACアドレス)をwol.pyに渡す時におかしくなってるのだが、検証できなかった

なので、MACアドレスを直書きすることにした(当面は同じNASしか使わないし)

MACアドレスは:で区切る

# wol.py 一部抜粋
def wol():
    # addr = request.args.get('addr', '')
    addr = "XX:XX:XX:XX:XX:XX" # NASのMACアドレス直書き
    message = ""

    if request.method == 'POST':
        send_magic_packet(addr)
        message = 'Sent magic packet'

    return render_template('wol.html', message=message, addr=addr)

WOLの方法

ubuntuのアドレス/wol

例えば↓

http://192.168.100.126/wol

tailscale越しなら

http://100.XX.XX.XX/wol

アドレスはtailscaleで確認する

WOL確認のあれこれ

上記のエラーでラズパイからwolができないとき、原因切り分けのために別の方法でwolを試みた

WindowsからはnWOLを使用し動作を確認した

ラズパイからwakeonlanのパッケージならできた

https://zenn.dev/murachi/articles/cf0be8cb206e15f631ac

そこでMACアドレスは:で区切ることがわかった

定期再起動

ラズパイをサーバで使う時は毎日夜に再起動するようにしている

いままで使ってきた中で、毎日再起動するのが調子が良いみたい

こちらを参照

以上😋