⚠この記事はブログ移転前のアーカイブです

NECのルーター買ってハマったのでメモ

公開するサーバーはDHCP割当範囲外にすること

screenshot.259

ポートマッピング(俗にポート開放)するにはルーターのWEB UIから「ポートマッピングメニュー」を開いて公開したいサーバーのIPとポートを指定するだけ。ただ、設定だけはシンプルなのにこのままでは動かない可能性があります。

それは、公開するIPアドレスはDHCP割当範囲外にすることです。

マニュアルにすごく小さく書いてあったので見逃してました。

「192.168.11.50」の80番を公開するとします。公開したいIPアドレス192.168.11.50はDHCP範囲外にしなくてはなりません。

screenshot.261

例としてはこんな感じです。DHCPで自動的にIPを割り当てる範囲が「192.168.11.100」~「192.168.11.200」の100台分を割り当てるようにしています。

ポートマッピングしたいIPが「192.168.11.150」とかだと上手くポートマッピング出来ません。

NEC製ルーターは内部からグローバルIPへルーティングできない

ポートマッピングもした、DDNSでドメインも割り当てた。さあ自宅内のブラウザで繋いでみよう。

つながらない。正確には応答しない。いつまでもローディングアイコンがグルグルグルグル・・・

グローバルIP直打ちにしてアクセスしてもだめ。パケットそのものが届いてない。

これも初めて知ったのですが、「NEC製ルーターは内部からグローバルIPへルーティングできない」んですね・・・

screenshot.262

グローバルIPが「123.45.67.89」だとして、NAT内の公開サーバー「192.168.11.50」に「192.168.11.55」から「123.45.67.89」でアクセスしてもつながらないのです。VPNで適当なネットワークからアクセスすると正常に繋がることが確認できるはずです。

自宅内だろうが外出先だろうが、ドメインを解決すると「123.45.67.89」に解決されるわけですが、自宅内だと123.45.67.89は192.168.11.50にポートマッピングせず、パケットは到達しません。

自宅内では「192.168.11.50」、それ以外のネットワークでは「123.45.67.89」に名前解決されるようなシステムを作成しなければなりません。

hostsを書き換える方法

C:¥Windows¥System32¥drivers¥etc¥hosts

とか

/etc/hosts

に1行書加えればいいわけです

192.168.11.50  bmemo.pw

hostsを書き換えて対応するのが一番手っ取り早いですね。自宅でしか使わないデスクトップパソコンなら間に合いそうですが、持ち歩きするノートパソコンや、VPNを使用する場合は不便です。

よろしい。ならば 自宅内 BIND だ

公開したいドメインだけ自宅内に設置したDNSサーバーに解決させれば、自宅内にいる時だけ「192.168.11.50」とドメインを解決出来るようになるので正常にアクセスできるようになります。

Docker 使おう

Dockerイメージが配布されています。

cosmicq/docker-bind

Webminつきなので、WEB UIでBINDを設定できるのが嬉しいです。

docker でコンテナを作るときは以下のオプションで起動します。公式の記述に再起動オプションをつけました。基本的に常に起動していてもらわないと困るので。

docker run -d \
-p 53:53 -p 53:53/udp \
-p 10000:10000 \
-v /srv/bind/etc:/etc/bind \
-v /srv/bind/zones:/var/lib/bind \
-v /srv/bind/webmin:/etc/webmin \
--restart=always \
-e PASS=newpass \
-e NET=172.17.0.0\;192.168.0.0\;10.1.2.0 \
--name bind --hostname bind \
cosmicq/docker-bind

環境変数「PASS」はWebminログイン用のパスワードです。好きなパスワード入れてください。

Webminのログインはroot:newpassで入れます。

WebminにおけるBINDの設定はこちらがわかりやすいです

Webmin で作る Linux 自宅サーバー DNSサーバーの構築