🐕

[Lua] YAMAHAルータでグローバルIPアドレスをDDNSに通知 (MyDNSJP)

2022/08/06に公開

要約

  • YAMAHAルータ (Lua実装)でグローバルIPアドレスをDDNSのMyDNSJPに通知するLua script
  • 実施環境はYAMAHA RTX830 (Lua5.1系実装)
  1. 自身のグローバルIPアドレス(v4)を表示するサイトから情報を取得
  2. DDNSへグローバルIPアドレスを通知する

Lua Script内容

  • GitHub Gistから参照

使用方法

  1. YAMAHAルータにファイルを転送する準備
    YAMAHAルータ側で実施
    1.1. ルータ側にスクリプト保管ディレクトリ作成
    make directory /ディレクトリ名
    例:make directory /lua
    1.2. ディレクトリ作成後の確認
    show file list /
    ※ファイルの削除
    delete ファイルのフルパス
    1.3. tftpを有効にする
    tftp host 許可するインターフェースorIPアドレスorIPアドレス空間等
    例:tftp host lan1/1
    参考:http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/setup/tftp_host.html

  2. Lua scriptを記述し、ファイルを保存する (.lua)

  3. ルータにファイル転送 (tftp)

$ tftp IPアドレス
tftp> put 転送ファイル名 /ルータ側ファイルのフルパス/ルータのパスワード
tftp> quit
  1. Luaスクリプト実行
    YAMAHAルータ側で実施
    # lua luaファイルのフルパス
    例:# lua /lua/rtx_update_mydnsjp.lua
  2. 実行状況確認
    # show status lua
    ※Syslogの確認
    # show log
  3. YAMAHAルータでのスケジュール登録
    NTP同期の登録
    例: schedule at 1 */* *:50 * ntpdate ntp.nict.jp
    Lua scriptの登録
    例: schedule at 10 */* *:55 * lua /lua/rtx_update_mydnsjp.lua
    参考:http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/schedule/schedule_at.html

コード説明

処理の流れ

  1. グルーバルIPアドレス情報を取得し、変数に入れる
    rsp_gipv4 = rt.httprequest(req_gipv4)
  2. グローバルIPアドレス情報取得時のHTTPステータスコードで成功 (200)したことをチェック、成功以外の場合はSyslogにメッセージを追記しscriptを終了
    rsp_gipv4.code ~= 200
  3. DDNSのMyDNSJPに通知するURLを生成し変数に入れる
    IPアドレスはHTTP bodyから取得:rsp_gipv4.body
  4. DDNSのMyDNSJPにグロ=バルIPアドレスを通知する
    rt.httprequest(req_update_ddns)
  5. DDNSのMyDNSJPに通知後、HTTP body内容にLogin and IP address notify OK.の文字列があるかチェックする
    string.match(rsp_update_ddns.body,"Login.and.IP.address.notify.OK\.")
  6. チェックの結果をSyslogにメッセージを追記し、scriptを終了

Discussion