ASUS TUF-AX5400のether-wakeの実行用及びOpenVPNの起動用のシェルスクリプト等をNVRAMに置くことにした話。

By | 2022年1月14日 , Last update: 2022年4月12日

はじめに

前の記事でASUS TUF-AX5400(以下、単に「TUF-AX5400」)をアクセスポイントモードに設定した際にOpenVPNが使用できるかどうか探りました。

実はTUF-AX5400はUSBポート(Type-A)を1個装備していて、そこにストレージを接続すると簡易NASとして使用することができます。

この記事を最初に書いた時点(2022年1月)では余っているストレージがないため…

とりあえずUSBメモリを接続しています。

USBメモリの近影です。

面構えが違います。

このUSBメモリのファイルシステムのフォーマットはext2ですが、USBポートに接続するとTUF-AX5400側で自動的にmountしてくれます(簡易NASとしての設定もついでに行うようですが、それが仇となってunmount時には少々手間がかかります)。

TUF-AX5400のファームウェアの部分は変更できないため、ファイルやプログラム等を追加するのであれば、USB接続したストレージに置かなければなりません。その一方で、ちょっと実験してみた感じではTUF-AX5400を再起動するとUSBメモリ上のファイルシステムが自動的にmountされないという現象が発生したりしていたので、追加するファイルやプログラムは可能であれば本体側の記憶装置に置くことで、冗長な操作を行うことになる可能性をできるだけ低くしたいところです。

そこで、この記事ではether-wakeの実行用のシェルスクリプト並びにOpenVPNの起動用のシェルスクリプト及び設定ファイル群を本体側の記憶装置に置いて稼働させる方法について調べた結果について書きます。

スポンサーリンク

そもそもアクセス可能なのかどうかの確認。

置き場所の確認

この記事で設定したWake-On-LANのマジックパケットの送付先はTUF-AX5400を再起動しても削除されませんので、どこかしらに格納されているはずです。

そこで、その格納先のファイル名にはWake-On-LANまたはその通称(“wol”)が含まれるという仮説を立てます。


スポンサーリンク

その仮説をもとにしてfindコマンドを実行します。

pandanote@TUF-AX5400-AA38:/tmp/home/root# find / -name \*wol\* -print
/jffs/nvram/wollist

 

いきなりのビンゴでございます。

しかも、パスには”nvram”が含まれているというおまけつきです。

ついでに/jffs/nvram/wollistの中身を確認します。

pandanote@TUF-AX5400-AA38:/tmp/home/root# cat /jffs/nvram/wollist
AA:BB:CC:DD:EE:FF

 

出力結果のMACアドレスの値は意図的に実際の値とは異なる値としていますが、以前Webブラウザ経由でWake-On-LANのマジックパケットの送付先として指定した値が格納されていることが確認できました。

容量の確認


スポンサーリンク

次に、/jffsというパスに着目し、dfコマンドをこのパスに対して実行してみます。

pandanote@TUF-AX5400-AA38:/tmp/home/root# df /jffs
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mtdblock9 48128 3004 45124 6% /jffs

 

デバイス名に”mtd”という文字列が含まれていることから、フラッシュメモリストレージ上に構築されているファイルシステムであることと、約45Mバイト程度の空き容量があることがわかります。

今回置こうとしているシェルスクリプトや設定ファイル群の置き場としては十分過ぎる程の空き容量です。

シェルスクリプト等を書きます。

置き場所の見当がついたところで、シェルスクリプトを書き、設定ファイル群をコピーします。

ether-wakeの実行用のシェルスクリプト

以下のようなシェルスクリプトを書いて”ether-wake.sh”というファイル名で/jffsディレクトリの直下に保存して、chmodコマンドで実行権限を与えます。

#!/bin/sh

/usr/sbin/ether-wake -i br0 AA:BB:CC:DD:EE:FF


スポンサーリンク

 
例によってMACアドレスの値は実際の値とは異なる値としています。

OpenVPNの起動用のシェルスクリプト及び設定ファイル群

次に、以下の手順でOpenVPNの起動用のシェルスクリプトを書き、さらに設定ファイル群をコピーします。

  1. 以下のコマンドを実行し、OpenVPN用のディレクトリ及び設定ファイル群を置くためのディレクトリをまとめて作ります。
    pandanote@TUF-AX5400-AA38:/tmp/home/root# mkdir -p /jffs/openvpn/conf

     

  2. 以下のようなシェルスクリプトを書いて”openvpn_start.sh”というファイル名で/jffs/openvpnディレクトリの直下に保存して、chmodコマンドで実行権限を与えます。
  3. 設定ファイル群を/jffs/openvpn/confの下にコピーします。より具体的には、以下のファイルをコピーします。
    1. easy-rsaで作成したCAの証明書(ca.crt)
    2. クライアントの証明書及び秘密鍵
    3. TLS認証鍵(ta.key)
    4. openvpnのクライアント用の設定ファイル(client.conf)

動作等を確認します。

ether-wake.shの動作確認

スポンサーリンク

TUF-AX5400のコマンドプロンプトで以下のコマンドを入力し、マジックパケットの送付先であるNUCの電源がONになることを確認します。

pandanote@TUF-AX5400-AA38:/tmp/home/root# /jffs/ether-wake.sh

 

openvpn_start.shの動作確認

次に、TUF-AX5400のコマンドプロンプトで以下のコマンドを入力し、OpenVPNでの接続が確立できることを確認します。

pandanote@TUF-AX5400-AA38:/tmp/home/root# /jffs/openvpn/openvpn_start.sh

 
ip addr showコマンドを実行し、tun0インターフェースが作成されていることを確認します。

pandanote@TUF-AX5400-AA38:/tmp/home/root# ip addr show
(中略)
42: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 192.168.aaa.bbb peer 192.168.aaa.ccc/32 scope global tun0
valid_lft forever preferred_lft forever

 

再起動しても削除されないことの確認

最後に、前節までの手順で/jffsの下に作成またはコピーしたシェルスクリプト及びファイル群がTUF-AX5400を再起動しても削除されていないことを確認して、ひとまず作業完了です。

お疲れさまでした。🙇

まとめ

実はTUF-AX5400のファームウェアにはOpenVPNは含まれていないものと思っていたので、Windows11にインストールしたVirtualBoxのゲストOSとしてUbuntu 20.04 LTSをインストールしてaarch64用のstatic linkのOpenVPNをビルドして使用できるかどうか確認したりしてしまいましたが、動作することが確認できたところでファームウェアにOpenVPNが含まれていることが発覚しました。_| ̄|○

よって、ビルド作業自体は冗長な作業となってしまいましたが、OpenSSL 3.0.1を組み込んだOpenVPN(かつaarch64で動くもの)がビルドできましたので、ビルドの方法自体はこちらで公開しております。御用とお急ぎでない方はだまされたとお思いになられた上でご覧いただけると幸いです。

この記事は以上です。