我が家は家計簿を自宅サーバーのデータベースに格納し、WebサーバーとPHPのプログラムを使ってブラウザで閲覧できるようにしています。
各費目ごとに予算と実績が見れるだけのシンプルなページです。
この家計簿システムのサーバーが自宅LAN内にあり、自宅内でも自宅外でもドメイン名指定のURLでアクセスができるようになっています。ドメイン名はDDNS(動的DNS)による割り当てです。
しかし、最近ルーターをELECOM WRC-2533GSTに変えたら、自宅外はOKだけど自宅内はNGという現象が発生するようになりました。
少し調べたところ、どうやらルーターがヘアピンNATとかNATループバックと呼ばれる機能に対応していないといけないようで、以前使っていたルーター(ELECOM WRC-1167GHBK2とWRC-1750GHBK2-I)はたまたま対応していたようです。
ヘアピンNATについては下記のサイトで丁寧に解説していただいています。
https://greenworksjp.com/blog/hairpin-nat/
上記のサイトに記載がありますが、ヘアピンNATに対応していないルーターを使う場合、ドメイン名ではなくプライベートIPアドレスでURLを指定する必要があります。
我が家では色んなパターンでこの事象の対処を行いましたのでご紹介します。
デスクトップPCの場合
デスクトップPCの場合は自宅外に動かすことがまれだと思われますので、素直にプライベートIPアドレスでアクセスするようにします。
hostsファイルをいじるという手もありますが、すべてのデスクトップPCのhostsファイルを変更するのも面倒なので不採用としました。
ノートPCの場合
自宅ではプライベートIPアドレス、外出先ではドメイン名でアクセスする必要がありますので、自宅用(プライベートIPアドレス)、外出先用(ドメイン名)それぞれのブックマークを登録しておきます。
スマホ・タブレットのブラウザの場合
ノートPCと同じです。
スマホ・タブレットのアプリの場合
は?アプリ?と思われたかもしれませんが、実はカミさんがブラウザの使い方を知らないため、下記のような家計簿サイトを参照する専用のAndroidアプリを作っています。
Androidでは簡単にWeb参照アプリが作れるWebViewという便利な部品がありまして、それに渡しているURLがドメイン名指定になっているのです。
自宅ではWifiを使うので、このままだといちいちWifiを切らないと家計簿が見れません。
そこで、Wifi接続時のIPアドレスを取得し、 LAN内であればプライベートIPアドレスでURLを指定するように修正しました。これで自宅でも外出先でも家計簿が見れます!よかった~
Wifi接続時のIPアドレス取得方法は下記のサイトを参考にさせていただきました。
https://gist.github.com/myamamic/5046776
ただし、我が家と同じネットワークアドレス(192.168.0.n)を使うWifiに接続した場合は、プライベートIPアドレスで接続しにいってしまい、アクセスに失敗します。。が、自宅以外のWifiにつなぐことはそう無いの大丈夫でしょう!
以上、LAN内のサーバーにドメイン名指定のURLでアクセスできないときの対処方法でした(^▽^)/
おまけ(家計簿システムの実装)
ちなみに家計簿システムの実装は下記のようになっています。
1.データ入力
LibreOfficeのCalcで作った家計簿をcsv形式で保存。
2.データ登録
Pythonアプリでcsvファイルを読み込み、MySQLに登録。
3.Webサーバー側
Docker上の Apache + MySQL + PHP で稼働。MySQLに入っている家計簿データをPHPで取得&計算してHTMLで出力。
本当はCalcでいちいちcsv形式で保存するのが面倒だったので、Calc標準のods形式で保存したファイルを自動でcsvに変換したかったのですが、やり方が分からず断念しました。
(2020/08/30追記)
最近PythonでExcelファイル(.xlsx)のデータを操作できることを知りました。
そこでCalc標準のods形式ではなくExcel互換形式(.xlsx)で家計簿を保存し、そこから自作のPythonアプリでcsvに変換するようにしました。
これでいちいちcsv形式にする手間が省けます。いやー、世の中には便利なものがありますね。ホントありがたいです。
下記のサイトを参考にさせていただきました。
また、データ入力をCalcにしたのは私が表計算ソフトに慣れていたからです。Webからの入力も考えましたが、使い勝手のよいインタフェースにする自信が無かったので。。