GL.iNet GL-AXT1800 (Slate AX) で DDNS を DuckDNS に対して設定する

OpenWrt を内部で利用している GL.iNet GL-AXT1800 (Slate AX) において、DuckDNS.org を使った Dynamic DNS (DDNS)の設定を行ったので、備忘録として残しておく。IPv4 のみを使っている。

基本的には、「GL.iNet GL-MV1000 の Dynamic DNS で DuckDNS.org を使う 」と同じである。

GL.iNet のミニルータを使って同一セグメントのLAN内の独立した複数地点を SoftEther で Layer 2 Bridge するための準備である。複数地点のIPアドレスはDHCPで割り当てる必要があり、変化することがあるので、DDNSでそのIPアドレスをDNSに登録し、SoftEther で参照できるようにする。

以下のような構成のうちの破線部分の設定を示す。SoftEther の設定はこの記事には含まれない。

使用機材

GL.iNet GL-AXT1800 (Slate AX)

ファームウェアのバージョンは、4.0.2 release2 であった。

内部的には、以下のバージョンを利用している。

  • LuCI openwrt-22.03 branch (git-21.284.67084-e4d24f0)
  • OpenWrt 21.02-SNAPSHOT r16399+157-c67509efd7

luci-app-ddnsのインストール

OpenWrt で DDNSの設定をWeb画面から行うために、luci-app-ddnsをインストールする。

GL.iNet Admin Panel の MORE SETTINGS の Advanced からOpenWrt の Web インタフェースである LuCI にログインし、System の Software から luci-app-ddns をインストールする。

使用したddns-scriptsのバージョンは2.8.2-12

luci-app-ddns のバージョンは、git-21.187.20976-699b7f0 であった。

これ以降は、LuCI もしくは ssh を利用する。

DNSの設定

LuCI を使って DNS の設定を行う。

DNSでのプライベートIPアドレス使用

想定している環境では、DDNS で登録するIPアドレスがプライベートIPアドレスである。設定によってはこの情報がDNSで得られないので、プライベートアドレスでも得られるように、設定の確認を行う。
LuCI の Network/DHCP and DNS/General Settingsタブの Discard upstream RFC1918 responses) のチェックを外した状態にすることでDDNS で登録したプライベートIPアドレスもDNSから得られるようになる。
これ以降では煩雑になるので書かないが、変更したら [Save & Apply]ボタンを押す必要がある。

DNSの resolver の設定

GL-AXT1800が DHCPで得たネームサーバーが使われるように設定を確認する。

LuCI の Network/DHCP and DNS/の Resolv and Hosts Files タブの

Dynamic DNS

LuCI の Services メニューから Dynamic DNS ページを開いて設定していく。

ここでは、XXXXXX-ivy1.duckdns.org を登録していくとする。

non-public IP の許可の確認

想定している環境では、DDNSに登録する IPアドレスは LAN内のプライベートアドレスであり、LuCI では、Dynamic DNS のページ中のGlobal Settings タブの Allow non-public IP's にチェックが入っているようにする。一般的なグローバルIPアドレスを DDNS に登録する場合には不要である。

DDNSの設定

IPv4 アドレスの場合には、Dynamic DNS のページ中の Overview に示されている。 myddns_ipv4 を利用するので、その Edit ボタンを押して設定の編集を行う。

まず、Basic Settings タブに必要な情報を設定する。

ここでは、DDNS にduckdns.org を利用する。 provider に duckdns.org を選択して、Change providerボタンを押す。

DuckDNS に登録するための情報を入力する。このDDNSを利用するので Enabled にチェックを入れる。

Advanced Settings タブとTimer Settings タブは、変更していないが以下のようになっていた。

Dynamic DNS のページ中の Overviewの myddns_ipv4 の Start ボタンを押すことで DDNS を起動して試すことができる。しかし、このままではリブートすると DDNS が起動されない。DDNSの起動スクリプトの修正が必要になる。

ブート時に DDNS が正常に起動されるようにする

ブート時や起動時に利用されるスクリプト /etc/init.d/ddns が、 GL.iNetのDDNS用になっていて、そのままでは、LuCIの Dynamic DNS ページで設定した DDNSがうまく起動されない。このため、/etc/init.d/ddns を変更する必要がある。

ssh で GL-AXT1800 に接続する。 ssh 接続には、PuTTY などを使うことができる。

/etc/init.d/ddns の修正

/etc/init.d/ddns の修正点は、boot() で何もしないことになっていたものを $PROG  — start で起動する行を追加。

restart() や start() の中で OpenWrt の uci (Unified Configuration Interface) コマンドで DDNS が enabled になっているかを取り出しているが、元は GL.iNet の DDNS用になっていたので、ここでは DuckDNS用の myddns_ipv4 から enabled の値を取り出すように修正した。


動作確認とトラブルシューティング

GL.iNet GL-MV1000 の Dynamic DNS で DuckDNS.org を使う 」の最後に書いたように、動作確認を行い、必要に応じてトラブルシューティングを行う。

DDNSがブート時に起動されることを確認するために、System / Reboot を選択するなどして、GL-AXT1800 を再起動する。起動して少し時間が経過後に、DDNSが更新されていることを確認する。

 

動作確認

DDNSとDNSが適切に動作していることを確認するために、ssh で GL-AXT1800 に接続して、DuckDNS に登録したGL-AXT1800のWAN側のIPアドレスが DNS によって得られることを確認する。

ここでは、XXXXXX-ivy1.duckdns.org とすると ssh で接続後に次のコマンドを実行する。

また、念のために GL-AXT1800のLAN側につないだ端末でも nslookup でIPアドレスが得られることを確認しておく。次は、Windows PCの PowerShell で nslookup を実行した例である。

トラブルシューティング

DDNS に登録するアドレスがプライベートアドレスのために、うまくDNSで IPアドレスが得られないことがあった。上記の設定がわかるまでに時間を費やした。

nslookup などでFQDNから IPアドレスを得ようとした場合に、

SSH の console では、「*** Can't find XXXXX.duckdns.org: No answer」

Windows のPowerShell では、「*** XXXXX..duckdns.org には利用できる internal type for both IPv4 and IPv6 Addresses (A+AAAA) レコードがありません」

まず、DDNSにアドレスが登録されているか確認する。最新のIPアドレスが登録されていない場合には、DDNSがブート時に起動されていることを確認し、起動されているのであればDDNSの「non-public IP の許可の確認」の項の設定を確認する。

DDNSにアドレスが登録されているのに、IPアドレスを取得できない場合には、DNSの「DNSの resolver の設定」の項を確認する。