min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi3 外部公開している自宅サーバにLAN内からドメイン指定でアクセスする(dnsmasqで家庭内の名前解決)

自宅サーバを外部に公開している。外出先からはDDNSドメイン名でアクセスできている。 

 

しかし、そのドメイン名に家庭内からアクセスしようとすると名前解決できずエラーになってしまう

f:id:min117:20181103203639p:plain

 

家庭内のローカルIPアドレスで指定すれば正常にアクセスできる(当たり前)が

f:id:min117:20181103203716p:plain

同じコンテンツなのに、家庭内と外出先とでアクセスするアドレスが違うのが不便すぎる。いちいちアドレスを打ち変えたくない。

 

自宅サーバを公開している人はみんなぶつかる悩みのはずなんだけど、あまり記事がない。見つけてもこれくらい。dnsmasqという(bindよりは気楽に扱えそうな)DNSソフトウェアがあるらしいが、記事は fedora 用だ。

mo.kerosoft.com

 

RaspberrPi だとこの記事が良さそう。

qiita.com

 

DNSサーバにする RaspberryPi 3 はこれ。有線LANも無線LANも両方有効にしてある。

f:id:min117:20181103221954j:plain

 

記事どおり進めるが、その前に update しとく(これやらないとインストール失敗することあり)。

$ sudo -s

# sudo apt-get update

f:id:min117:20181103211208p:plain

 

まずは resolvconf のインストール。

f:id:min117:20181103221108p:plain

# sudo apt-get -y install resolvconf 

f:id:min117:20181103215521p:plain

 

ゾルバ設定を入れるが、/etc/resolv.conf じゃなく /etc/network/interfaces を編集すればいいみたい。

f:id:min117:20181103221205p:plain

# sudo vim /etc/network/interfaces

f:id:min117:20181103220535p:plain

dns-nameservers の行の記述を変える。

変更はこう。

f:id:min117:20181103221015p:plain

 

変更はこうした。

f:id:min117:20181103221526p:plain

末尾が1192.168.3.1) はドコモ光のルーターDNS機能を持っている。

 

反映するためサービス再起度。

# sudo service networking restart

f:id:min117:20181103233953p:plain

 

 

 

次は dnsmasq のインストール。

f:id:min117:20181103222115p:plain

$ sudo apt-get -y install dnsmasq

f:id:min117:20181103211450p:plain

無事インストールされたようだ。

 

/etc/dnsmasq.conf を書いて設定を入れる。

f:id:min117:20181103222213p:plain

書き間違ったときに備えて、オリジナルファイルを(ファイル名末尾に.orgをつけて)保存してから編集することにする。

# ls -shal /etc/ | grep dnsmasq

# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.org

# vim /etc/dnsmasq.conf

f:id:min117:20181103212205p:plain

 

記事の指定どおり

19行目、21行目、74行目、135行目、144行目(計5箇所)

の行頭シャープ#を消し(設定が有効になる)して保存する。

f:id:min117:20181103212514p:plain

f:id:min117:20181103212605p:plain

 

さらに74行目と144行目は自分の設定に書き換える。

f:id:min117:20181103213747p:plain

f:id:min117:20181103213804p:plain

 

書き換わった行だけ確認。

$ cat /etc/dnsmasq.conf | grep -v "^#" | grep -v "^$"

f:id:min117:20181103222837p:plain

ちゃんと5行だけ書き換わってるのが分かる。

 

/etc/hosts も書き換えないといけないらしい。

f:id:min117:20181103223010p:plain

 

編集前に、自分自身(DNSサーバになるRaspberryPi3)のホスト名(コンピュータ名)とIPアドレスを確認しておく。

# hostname

f:id:min117:20181103224149p:plain

ホスト名が pi3 で、IPアドレスが 192.168.3.141 と 192.168.3.41 の2つあると分かる。

 

もう1台、DNSクライアントにする RaspberryPi ZERO W のホスト名とIPアドレスも確認しておく。

$ hostname

$ ifconfig | grep 192

f:id:min117:20181103223949p:plain

ホスト名が pi0w で、IPアドレスが 192.168.3.81 と分かる。

 

DNSサーバに戻って /etc/hosts を編集する。

# vim /etc/hosts

f:id:min117:20181103223600p:plain

 

DNSサーバとDNSクライアントの分の2行書き足す。

f:id:min117:20181103224729p:plain

 

 

f:id:min117:20181103224855p:plain

 

# ip addr | grep inet | fgrep -v "127.0.0.1"

f:id:min117:20181103225104p:plain

inet6(以前試したIPv6の設定)が残っているが気にしない。なぜか 192.168.3.170 も設定されているが気にしないで進める。

 

# cat /etc/hosts | fgrep "192.168.3.41"

f:id:min117:20181103225452p:plain

 

# cat /etc/network/interfaces | grep "dns-nameservers"

f:id:min117:20181103225431p:plain

 

f:id:min117:20181103225922p:plain

# sudo service dnsmasq start

f:id:min117:20181103225908p:plain

 

sudo netstat -anp | fgrep ":53" | grep "dnsmasq"

f:id:min117:20181103230010p:plain

 

f:id:min117:20181103230154p:plain

DNSクライアント(RaspberryPi ZERO W)の /etc/network/interfaces を編集する。念のためバックアップを取ってから進める。

sudo cp /etc/network/interfaces /etc/network/interfaces_20181103

$ sudo vim /etc/network/interfaces

f:id:min117:20181103230720p:plain

 

変更はこう。

f:id:min117:20181103231051p:plain

 

変更はこうした。

f:id:min117:20181103231426p:plain

反映するためサービス再起度。

# sudo service networking restart

f:id:min117:20181103233625p:plain

 

記事の構成と確認を参考に、DNSの動作確認を行う。

f:id:min117:20181104002722p:plain

f:id:min117:20181103231504p:plain

 

 

nslookup を使いたいので dnsutils をインストールする。

$ nslookup pi3

$ sudo apt-get -y install dnsutils

f:id:min117:20181103231613p:plain

f:id:min117:20181103232633p:plain

 

$ nslookup pi3

f:id:min117:20181103233143p:plain

あれ?うまくいかない。/etc/resolv.confが効いていない?

 

$ cat /etc/resolv.conf

f:id:min117:20181103234705p:plain

/etc/network/interfaces に記載した内容 /etc/reslov.conf に反映されるはずなんだけど。反映されてない。

qiita.com

 

調べる。

 

DNSクライアント側に resolvconf をインストールしてなかった。これが原因か?

$ sudo apt-get -y install resolvconf

f:id:min117:20181103235829p:plain

インストール完了。

 

サービス再起動してresolv.confに反映されているか見てみるが

f:id:min117:20181104000640p:plain

やはり反映されていない。

 

このへんの情報を頼りに解決を探る。

Ubuntu日本語フォーラム / 名前解決が出来ません

f:id:min117:20181104001057p:plain

f:id:min117:20181104001125p:plain

f:id:min117:20181104001352p:plain

DNSサーバにて。

# cat /etc/resolv.conf

# dig +noall +ans +stats google.com

# ip route

# ping 8.8.8.8

# traeceroute -n 8.8.8.8

f:id:min117:20181104001638p:plain

 

DNSクライアントにて。

$ sudo -s

# cat /etc/resolv.conf

# dig +noall +ans +stats google.com

# ip route

# ping 8.8.8.8

# traeceroute -n 8.8.8.8

f:id:min117:20181104002118p:plain

 

分からん。とりあえず DNSクライアントを再起動してみるか。

# sudo reboot

f:id:min117:20181104002309p:plain

再起動後のDNSクライアントにて

$ sudo -s

# cat /etc/resolv.conf

# nslookup pi3(DNSサーバ名)

# nslookup pi3.*********.jp(DNSサーバのドメインFQDN

# nslookup 192.168.3.41(DNSサーバのIPアドレス

# dig +short pi3

# dig +short pi3.*********.jp

# dig +short -x 192.168.3.41

f:id:min117:20181104003154p:plain

DNSクライアントでは

 /etc/network/interfaces の値が /etc/resolv.conf に転記はされるようになったけど

ドメイン名での解決が全然できてない。なぜだ。

 

分からんのでDNSサーバも再起動してみる。

f:id:min117:20181104003746p:plain

再起動後のDNSサーバにて

$ sudo -s

# cat /etc/resolv.conf

# nslookup pi3(DNSサーバ名)

# nslookup pi3.*********.jp(DNSサーバのドメインFQDN

# nslookup 192.168.3.41(DNSサーバのIPアドレス

# dig +short pi3

# dig +short pi3.*********.jp

# dig +short -x 192.168.3.41

f:id:min117:20181104004457p:plain

DNSサーバでは

  /etc/network/interfaces の値が /etc/resolv.conf に転記がされない

ドメイン名での解決はできた。

 

DNSクライアントの①②  DNSサーバの③④ とで現象が逆だ。どうも歯がゆい。

たぶんだけど ③を解決すればうまくいく気がする。