メルカリ880円のルータに組み込みLINUXのOpenWrtで内部DNSを動かす!

じゃんくはっく
じゃんくはっく

やっとPixel3に引っ越しできたよ!

おめでとー! 何をそんなに苦労してたの?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

いやー、ローカルにDNSを立ち上げようとあれこれとね!

結局、どうやってローカルDNS立ち上げたの?

ぴー
ぴー

ということで、今見ているこのWordPressブログはUMIDIGI F2から Google Pixel3のスマホに引っ越ししました!

 一番嬉しいのは、ローカルからブログを書く時、もうVPNを繋げて書かなくてもよくなった点ですね! 今まではUターンNATの問題で内部ネットワークからはこのブログにアクセスできなかったのです。ブログ記事を書く時もVPN経由で外からアクセスしていたので、記事を書くのが少し面倒だったんです。今回は、Pixel3に引っ越ししてローカルDNSを立ち上げた事を記事にしようかなと思います。

ローカルDNSを立ち上げろ!

なぜローカルDNSを立ち上げる必要があったかは、このあたりを見ていただくとその経緯がわかるかなと思います。

ポートフォワードの経路で、Uターン NATとかヘアピンNATが使えないルータの場合のあれこれ

Link

ローカルにDNSを立ち上げれば、UターンNATがダメなルータを使っていても迂回した経路が作れます。そして、Termuxの1024以下ポートが使えない問題は、root化した Pixel3を使って回避しました。つまり、今動いているNGINXは、port80とport443で動作しています。こんな感じ!

# ps axu | grep nginx
root     12762  0.0  0.0 10868580 2144 ?       Ss   02:14   0:00 nginx: master process nginx
u0_a218  12763  0.0  0.1 10869584 3912 ?       S    02:14   0:00 nginx: worker process
::
u0_a218  12771  0.0  0.0 10868708 2312 ?       S    02:14   0:00 nginx: cache manager process

# netstat -an | egrep ':80 |:443 ' | grep LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN  

当初は、このroot化したPixel3にDNSを起動させる予定だったんですが、思いの外うまく動かなくて結局、安いルータをメルカリでゲットしました。なんとお値段、送料込み880円!

I-O DATA WN-AC1167GR

11ac対応867Mbps(規格値)Wi-Fiルーター
WN-AC1167GR

https://www.iodata.jp/product/network/wnlan/wn-ac1167gr/index.htm

このルータに、OpenWrtというオープンソースな組み込み用Linuxがあって、このI-Oデータのルータにも適合したファームウェアがあります。これを使って、dnsmasqというDNSが使えるので、ローカルDNSとして活用してみました。

I-O DATA WN-AC1167GRにOpenWrtを!

まずは、OpenWrtを入れます。このファームウェアは以下にあります。

OpenWrt Project Techdata: I-O Data WN-AC1167GR

https://openwrt.org/toh/hwdata/i-o_data/i-o_data_wn-ac1167gr

Firmware OpenWrt Install URL から、ファクトリーイメージがあるので、これを純正のファームウェアアップデートから書き込みするだけです。LANポートは、デフォルトで192.168.1.1/24 のネットワークになっていてDHCPサーバも動いています。

このCPUは、MediaTek MT7620Aが載っているようですね。32bitのarmで1coreのようです。

MediaTek MT7620N/A

https://www.mediatek.jp/products/mt7620n-a

詳細な設定は、省きますがLAN側のネットワークに上位ルーター側で使っているネットワークを割り振っているだけです。DHCPはこのルータでは止めてあります。WAN側の青いLANは使っていません。FireWallも全部外してあります。うまく設定すれば、WAN側とLAN側をブリッジさせて同一ネットワークで使うこともできると思いますが、なぜかうまくいかず結局、シンプルな設定にしました。

 あと、とりあえず、いろいろ試して5Ghz帯の無線LANは安定しなかったので、2GHZの無線LANにしています。何か設定の勘所があるのかもですが、ちょっと追うのはヤメておきます。

このようにインターフェイスはLAN側のポートだけ使って、あとは無線LANの設定をLANに紐づけているだけです。いわゆるブリッジ接続(アクセスポイント的な)で使っている感じですね。

OpenWrtで、DNSMASQの設定を!

OpenWrtルータは、SSHも出来ますのでログインしてdnsmasqがどの設定ファイルを見ているか確認してみます。管理画面からも設定はできるんですが、どの設定項目がどのパラメータなのかわかりにくいので、直接設定ファイルを見てみました。

psコマンドは、BusyBoxのやつを使っているようですね。オプションは効きませんでした。こんな感じでdnsmasqの起動オプションを確認。

root@OpenWrt:~# ps | grep dnsmasq
  847 dnsmasq   1344 S    /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf.cfg01411c -k -x /var/run/dnsmasq/dnsmasq.cfg01411c.pid

-C オプションが設定ファイルです。このファイルの中は、こんな感じです。

# auto-generated config file from /etc/config/dhcp
conf-file=/etc/dnsmasq.conf
filterwin2k
no-negcache
strict-order
localise-queries
read-ethers
enable-ubus
expand-hosts
bind-dynamic
quiet-dhcp
domain=gpl.jp
server=/gpl.jp/
server=8.8.8.8
server=192.168.1.1
dhcp-leasefile=/tmp/dhcp.leases
resolv-file=/etc/resolv.conf
stop-dns-rebind
rebind-localhost-ok
dhcp-broadcast=tag:needs-broadcast
addn-hosts=/tmp/hosts
conf-dir=/tmp/dnsmasq.d
user=dnsmasq
group=dnsmasq


dhcp-ignore-names=tag:dhcp_bogus_hostname
conf-file=/usr/share/dnsmasq/dhcpbogushostname.conf


bogus-priv
conf-file=/usr/share/dnsmasq/rfc6761.conf

あとは、hostsの内容はWEB GUI画面から管理できます。

リモートのmacから、digで確認してみます。

$ dig @192.168.1.100 hack.gpl.jp

; <<>> DiG 9.10.6 <<>> @192.168.1.100 hack.gpl.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2575
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hack.gpl.jp.			IN	A

;; ANSWER SECTION:
hack.gpl.jp.		0	IN	A	192.168.1.47

;; Query time: 0 msec
;; SERVER: 192.168.1.100#53(192.168.1.100)
;; WHEN: Mon Oct 26 03:55:29 JST 2020
;; MSG SIZE  rcvd: 56

管理外のドメインも引いてくれるか確認しておきます。なんとか大丈夫そうなので、設定はよしとします。ハマった点としては5Ghz帯の無線LANだとどうしても、接続が切れてしまうようでした。何か、設定があるのかもですが解決できなかったので2Ghz帯のにしています。無線LANとスマホは近くに置いてあるのでまぁ実質問題ないでしょう。Pixel3からスピードテストすると以下のようです。

監視サイトからの読み込みも 2秒くらいなのでまぁ良いかなと。

まとめ

今回、なんとなくわかったのは以下となります。

・OpenWrtは、iptablesも設定できるようなのでうまく応用すればいろいろ使えそう
・今回は、5Ghzの無線LANは通信が切れてしまう現象が起きた
・なので、2Ghzの無線LANで運用することに
・DNSMASQは、それなりに動いているようだ
・無線LANの機器なので消費電力は5Wくらい。省電力
・違う無線LAN配下からは、pingが通らない。これはなぜか?
・上位ルータからはPingは通る
・引っ越ししたroot化したpixel3は今の所、調子良さそう

あとがき

無線LANがぶつぶつ切れて、設定がぜんぜん進まず、どうしようかと思ったんですが2Ghzにしてなんとか安定しているように見えます。組み込みのLinuxと無線LANドライバーは、弄れる知識がないのでいつかチャレンジしてみようとは思いますが、今はもうお腹いっぱいです。設定疲れました!でも、なんとか当初の目標がクリアできてよかったです。たかが、内部DNSですが、消費電力が少なくて今のところ便利に使えています。あとは、そのくらい安定して動作するか検証ですね。

著者にメッセージ

コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。