[RTX810] ヤマハルータで Lua スクリプトを始めてみた。
前書き
RTX810 x 2 台でインターネット VPN (拠点間 VPN) を構成している。どちらのルータも VPN トンネルを張るために使っているグローバル IP アドレスは動的である。
しかし、1 台はダイナミック DNS が機能するが、もう 1 台はダイナミック DNS が機能しない。これは、一方のキャリアの通信網が多段 NAT 構成となっているためだ。
そのため、グローバル IP が変わってしまったとき、ダイナミック DNS でその変更を追従できないため VPN トンネルが切れっぱなしになる事態が発生する。
これを検知するための 1 つの方法として Lua スクリプトを使ってみようと思ったわけである。具体的に実現したいことは VPN トンネルが切れた時にメールで通知する機能である。
ヤマハルータで Lua スクリプトをはじめて使う場合の考え方
まずは、Lua スクリプトを使って簡単な処理を実装できることを目指します。いきなり高度な処理や、今回のような VPN トンネルがダウンした際にメール通知する処理を実装しようとしてはいけない。
簡単な処理を実現するのであっても、そこまでの流れ・手順があり、そこがおぼつかないままで高度なことをやろうとすると挫折する可能性が高まるためだ。
もちろんスクリプト言語を書くことに慣れている人はこの限りではないが、初心者はまず簡単なことができるようになるまでの手順を確立することが先だ。そこまでできたあとに、はじめて Lua スクリプトの中身を高度にしていくのだ。
Lua スクリプトで Hello World 的なやつを実装する
もちろん Hello World でなくても構わないが、ただ単に何かを画面に出力させるという処理が入門編にはちょうどよいのではないかと思う。
前提条件
- Lua スクリプトを作る環境は Linux (Ubuntu) + Vi エディター
- 作った Lua スクリプトは Ubuntu から tftp でヤマハルータに転送する
この環境と違う場合はここから説明する手順に若干の違いがあると思いますが、参考になれば幸いです。
テストスクリプトを作る方法
テストスクリプトを書く
ここからは Ubuntu での作業になる。まずは適当な場所に lua ディレクトリーを作り、そこにスクリプトファイルを保存することにする。
テストスクリプト (Hello World 的なやつ) は test.lua というファイル名にし、以下のようなものだ。
$ cat test.lua.utf8
for i=1,10 do
print(i, "Hello Tokyo!")
end
$
何ということはない。Hello Tokyo! を 10 回出力するだけの単純なものだ。
ファイル名が test.lua.utf8 となっているのは、Ubuntu 上で Lua スクリプトを書いているからだ。ヤマハルータにファイル転送する時、SJIS にしないといけないらしいので、この時点でのファイル名はこのようにしている。
スクリプトファイルの文字コードを SJIS に変換する
$ cat test.lua.utf8 | nkf -s > test.lua $
このように nkf を使って SJIS に変換する。ここで test.lua という名前のファイルができるわけだ。nkf がなければ apt-get install nkf とかでインストールしよう。
ヤマハルータ側に Lua スクリプト用ディレクトリを作る
# make directory /lua #
これで /lua というディレクトリが作られる。ディレクトリを確認するには show file list /lua とすれば良い。
tftp でヤマハルータにファイルを転送する
$ tftp 172.16.100.1 tftp> tftp> put test.lua /lua/test.lua/YamahaPassword Sent 513 bytes in 0.0 seconds tftp> quit $
このように実行する。put コマンドの最後にある YamahaPassword は、ヤマハルータ側のパスワードであるのでご利用の環境に合わせて変更してほしい。
ここでヤマハルータ側で show file list /lua と叩くと以下のようになるだろう。
# show file list /lua 2021/12/05 15:34:21 48 test.lua #
ヤマハルータで Lua スクリプトを実行する。
# lua /lua/test.lua 1 Hello Tokyo! 2 Hello Tokyo! 3 Hello Tokyo! 4 Hello Tokyo! 5 Hello Tokyo! 6 Hello Tokyo! 7 Hello Tokyo! 8 Hello Tokyo! 9 Hello Tokyo! 10 Hello Tokyo! #
以上のように表示されれば Lua スクリプトは正常に実行できたことになる。逆にこのような結果にならなければここまでの手順に何かの誤りがあると考え、その原因を探していけば良い。
show status lua コマンドを確認してみたり、show log の実行結果に何かヒントが残っているかもしれない。
ここまでで一段落です。ここまでできるようになってはじめて Lua スクリプトの中身を高度にしていくことを考えるべきなのです。
参考情報
以下のヤマハのドキュメントは参考になりました。
もう少しLuaスクリプト
http://www.rtpro.yamaha.co.jp/RT/docs/lua/tutorial/advance.html