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アドレス使用
DNSの resolver の設定
GL-AXT1800が DHCPで得たネームサーバーが使われるように設定を確認する。
LuCI の Network/DHCP and DNS/の Resolv and Hosts Files タブの
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 の値を取り出すように修正した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#!/bin/sh /etc/rc.common START=95 STOP=10 PROG=/usr/lib/ddns/dynamic_dns_updater.sh bypassvpn=`uci -q get vpnpolicy.global.service_policy` if [ $bypassvpn = 1 ];then PROG="sudo -g nonevpn /usr/lib/ddns/dynamic_dns_updater.sh" else PROG=/usr/lib/ddns/dynamic_dns_updater.sh fi boot() { # add next line $PROG -- start return 0 } reload() { $PROG -- reload return 0 } restart() { $PROG -- stop sleep 1 # enable=`uci -q get ddns.glddns.enabled` enable=`uci -q get ddns.myddns_ipv4.enabled` if [ "$enable" = 1 ];then $PROG -- start fi } start() { # enable=`uci -q get ddns.glddns.enabled` enable=`uci -q get ddns.myddns_ipv4.enabled` if [ "$enable" = 1 ];then $PROG -- start fi } stop() { $PROG -- stop return 0 } |
動作確認とトラブルシューティング
「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 で接続後に次のコマンドを実行する。
1 |
nslookup XXXXXX-ivy1.duckdns.org |
また、念のために 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 の設定」の項を確認する。