LAN内から自宅公開Webサーバーにアクセスする方法
【Web Stationの設定~DiskStation DS218j】からの続きの記事です。
自宅内にあるサーバーをWebサーバーなどで外部公開する場合、
- 自宅サーバーに固定のローカルIPアドレスを割り当てる。
- ルーターを使ってルーターのグローバルIPアドレスから自宅サーバーのローカルIPアドレスに変換して外部からのアクセス要求を受け付けられるようにする。
- DNSサーバーでルーターのグローバルIPアドレスに対して正引きのホスト名を設定【SynologyのDDNS設定~DiskStation DS218j】し、ホスト名でルーターのグローバルIPアドレスにアクセスできるようにする。
という形をとるのが普通ですね。そこで問題になるのが、
- パブリックなDNSサーバーは、公開に必要なホスト名をグローバルIPアドレスにしか名前解決しない。
- LANの内部の端末から自宅内の公開サーバーにアクセスするにはローカルIPアドレスでアクセスしなければならないのに、端末が参照しているDNSサーバーはグローバルIPアドレスしか返してくれない。
という現象によって、例えばNOMI宅内のパソコンやスマホから、LAN経由で同じくNOMI宅内にあるDS218jのWebサイトを見ようとしてDDNSホスト名"wwq.myDS.me"をブラウズしてもアクセスできない、ということになります。
環境によってはDS218jではなくルーターの管理画面へのアクセスが行われることがあります。ちょっと怖い。
対象がメールサーバーやFTPサーバーなら、ローカルIPアドレス"192.168.100.201″と直打ちで設定すれば良いのですが、DS218jに限らずほとんどのWebサーバーは名前ベースのバーチャルホスト機能でサイトを公開しているので、サイトを閲覧するにはホスト名とIPアドレスをセットで要求しなければならず、うまくいかない、というわけです。
もちろん、いくつか解決方法はあります。
端末のhostsファイルに正引き情報を記述してアクセスできるようにする
多くの端末には、参照DNSサーバーやルーターのDNSキャッシュ、端末内部のDNSキャッシュなどの情報よりも優先して名前解決をやってくれる仕組みとして通称"hosts"ファイルがあります。
hosts
hosts(ホスツ)とは、TCP/IPを利用するコンピュータにおけるホスト名のデータベースで、IPアドレスとホスト名の対応を記述したテキストファイルである。hosts のフォーマットは、4.2BSDで登場した。インターネットの初期には、集中的に管理されている hosts ファイルをコピー(ダウンロード)して、各ノードで使用する、といった単純な運用が行われていた時代もあったが、DNSが一般的になった以後は、hosts ファイルには各ノードでローカルに必要な最低限の対応のみ記述し、外部へのアクセスに必要な名前解決はもっぱらDNSで行う、という運用が普通となっている。
出典:ウィキペディア
例えばWindows10の場合、
- 「メモ帳」を「管理者として実行」する(hostsファイルは管理者にしか書き換えられません)。
- 「メモ帳」で"c:\Windows\System32\drivers\etc"(正確には"%windir%\System32\drivers\etc")の中にあるテキストファイル"hosts"を開く。
- ファイル内のどこかに先頭から、[ローカルIPアドレス][半角スペースまたはタブ][ホスト名]と記述して保存する。
と設定すれば"wwq.myDS.me"で自宅内のDS218j上のWebサイトを見ることができるようになります。
ただしこの方法にはいくつか問題があります。
- 使えないOSがある
“hosts"ファイルはWindows系だけではなく、UNIX系のOS、例えばMacintoshやその派生のiOS、Androidなど多くの端末用OSにすべからく存在しますが、不正なアプリなどで勝手に書き換えられないように、書き換えには管理者の権限が必要になります。そのため、ユーザーに管理者権限が与えられていないiOSでは修正不可ですし、Androidではrootをとるかadbコマンドを使えるようにするとかしない限り修正できません。
- 切り替えが面倒
せっかく"hosts"ファイルを修正してローカル環境からWebサイトを見れるようになっても、その端末を外に持ち出して外部インターネット環境からアクセスするには"hosts"ファイルの設定を無効にしなければなりません。自宅に置きっぱなしのパソコンなら問題ありませんが、モバイルの場合は面倒ですね。
ルーターの優先名前解決機能を利用してアクセスできるようにする
自宅のネットワークを管轄しているルーターに、参照DNSサーバーよりも優先的に名前解決して端末に返す機能が備わっている場合、その機能を利用するのがベストです。
例えばYAMAHAのルーターの場合「静的DNSレコードの登録」という機能があって、
ip host wwq.myds.me 192.168.100.201
とコマンドを一行追加するだけで済みます。このルーターの下にある端末なら、パソコンであれスマホであれこの名前解決が優先されますから面倒がありません。端末を外に持ち出した場合はこの名前解決は無効になりますから、自動的に外部のDNSサーバーを参照するようになります。
この方法の利点は、端末には何の設定もいらないことですが、最大の問題点はこういう機能を持っている市販のルーターが非常に少ないことです。残念ながら普及機ではまずお目にかかれません。
自宅内にプライベートなDNSサーバーを設置してアクセスできるようにする
ハードルは高くなりますが、自宅内にキャッシュDNSサーバーを設置し、特定のホスト名のみローカルIPアドレスに正引きしてしまうという方法があります。
この方法は「ルーターの優先名前解決機能を利用する」のと同じ機能を、キャッシュDNSサーバーにやらせるだけなので、同じくhostsファイルの書き換えなどの面倒な仕事は不要です。
DS218jはDNSサーバーを構築することが可能なので、ルーターに優先名前解決機能がない場合はベターな方法かもしれません。
問題があるとすれば、自宅内でDS218jが常に稼働状態になっていなければならないことですが、よく考えてみればWebサイトを公開する以上、常にDS218jは稼働状態になっているわけですから、事実上の問題はないといえます。
DS218jでのDNSサーバー構築方法については、【自宅内DNSサーバーの構築~DiskStation DS218j】を参考にしてください。
ディスカッション
コメント一覧
下記の方法は完璧ですよ。
http://freebsd.vn102.space/2019/08/04/ef_bc_ac_ef_bc_a1_ef_bc_ae_e5_86_85_e9_8_89
コメントありがとうございます。
うわぁ、そんな方法もあるのですね。知りませんでした。
勉強になります!。