グローバルIPが降ってこない環境で外部からWOLする

Node.js雑記
この記事は約3分で読めます。
スポンサーリンク

背景

  • 集合住宅に住んでいるのでグローバルなIPが降ってこない
  • なので外からアクセスできない
  • だけどWakeOnLanしたい
  • 常時電源が入っててインターネットに繋がっている機器はルーターぐらいしかない

検討したやつ

  • ラズパイを買う
    • これが一番確実
    • 正直WOLをするためだけに買うのはなんか違う
  • ルーターのファームウェアをOpenWrtにする
    • お金が掛からない
    • Linuxベースなのでわりとなんでもできる
    • しかし(当たり前だが)容量が少ないのでかなりカツカツ

OpenWrtを導入した

ルーターのファームウェアをOpenWrtに変え(てい)たので以下のことができるようになった

  • トンネルを張れる
    • SSHTunnel
    • ngrok
    • cloudflared
  • シェルスクリプトが叩ける
  • その他Linuxでできること色々

試したこと

SSHでReverseTunnelを張る

この記事ではSSHのReverseTunnelに関する説明は省きます(この記事が分かりやすいのでオススメです)

数日運用してみましたが、イマイチ動作が不安定で上手く接続出来ないことがありました。

Cloudflaredでトンネルを張る

割と可用性が高く、使い勝手も良かったので一時期はこの方法を使用していました。

しかしながらこれらのデメリットがあります。

  • OpenWrtの公式パッケージではcloudflaredは提供されていないため、自力でビルドする必要がある
  • バイナリがデカい(20MB)のでルーターで動かそうとすると工夫が必要
    • サービス開始時にメモリ上にバイナリを落としてきて動かすようにしていた
    • メモリ上に落としてきているからかは分からないが、ルーターの動作が不安定になったので結局この方法はやめた

この方法で試したいという人はこの記事を見てみることをオススメします。

シェルスクリプトで解決する

シェルスクリプトから自前のAPIを叩いてレスポンスに合わせてWOLをする方法で、一番安定していたので採用しました。

この方法で運用するためにはどこかしらにAPIを生やす必要がありますが、この記事を読んでいる人であれば生やせると思うので詳細は割愛します。

一応自身の環境で動いているコードのサンプルを載せておきます。

(wol.shがルーター側で動いているコード、server.jsがnode.jsで動かしているAPIサーバーです)

ルーター側ではcronで5分おきにAPIを叩いて監視しています。(裏を返すと最大で5分の遅延が生じます)

高頻度で叩いても問題ないのであれば1分おきとかでも良いかもしれません。

まとめ

グローバルIP降ってきてくれ~~~~~

コメント

タイトルとURLをコピーしました