質問に飛び込む前に、いくつかの簡単な背景情報:
Windows 7を実行しているコンピューターと連携する小さな実験を作成しました。このコンピューターには、実験からのステータス情報で継続的に更新されるWebページを提供する小さなWebサーバーがあります。この実験はいくつかのイベント(MakerFaireなどを想像してください)で表示されます。スマートフォン(またはラップトップ)を使用して、できるだけ少ない構成でこのWebページを直接表示できるといいのですが。
基本的に私が達成しようとしていることは次のとおりです。
Wifiアクセスポイントを作成するコンピューターの組み込みwifiアダプターを使用ユーザーが接続できる場所(オープンまたはパスワードで保護)
DNSやHTTPリクエストをインターセプトしてリダイレクトし、ブラウザを開いたときに実験のWebページが表示されるようにします(キャプティブポータルなど)。
これまでのところ、WifiAP部分に最適なWindows7のホスト型ネットワーク機能を使用してポイント1を達成することができました。しかし、DHCP回答を変更してカスタムDNSサーバーを提供し、それがすべてのトラフィックをWebサーバーに転送することになったとき、私は立ち往生しています。それを行う方法はありますか?
私が持っているいくつかの制約(そうでなければそれは簡単すぎるでしょう;-)):
どんな助けや提案も大歓迎です!
MaraDNSは、WindowsおよびLinux用の無料で軽量で比較的構成が簡単なDNSサーバーです。ここからダウンロードして、いくつかのフォルダに解凍します。
「secret.txt」を開き、値を別の値(ランダムな文字)に変更します。
MaraDNS構成は、同じディレクトリの「mararc」ファイルにあります。 DNSサーバーには2セットの機能があります。これらは、「権威ネームサーバー」または「再帰/キャッシュネームサーバー」として機能できます。
権威ネームサーバーは、ドメイン名のIPアドレスを指定します。再帰ネームサーバーは、信頼できるネームサーバーからの情報を格納し、再帰的な方法でクエリを渡します。
MaraDNSで権限のある機能と再帰的な機能の両方を構成します。
2.1信頼できる構成
LANドメイン名の信頼できる名前を提供するようにサーバーを構成します。任意のドメインを選択します。「local.com」を選択しました(ただし、既存のドメイン名を選択すると、実際の「local.com」Webサイトにアクセスできなくなります)。
次のように「mararc」に構成行を追加します。
csv2 = {}
csv2["local.com."] = "db.lan.txt"
ここで、local.comは選択したドメイン名であり、db.lan.txtは次に作成する2番目の構成ファイルの名前です(2番目の構成ファイルに名前を付ける場合は変更します)。
MaraDNSと同じディレクトリに「db.lan.txt」という名前の新しいファイルを作成します。
名前に解決するコンピューターごとに、「db.lan.txt」に行を追加します。たとえば、1台が「dev.local.com」でもう1台が「blog.local.com」の2台のマシンの場合、次の行を追加します。
dev.% 192.168.1.4 ~
blog.% 192.168.1.6 ~
完了!
2.2再帰的構成
他のすべてのドメイン名を正しいIPアドレスに解決できるように、他のすべてのドメインをデフォルトのネームサーバーに要求するようにMaraDNSを設定します。
ISPのDNSサーバーアドレスを調べます。これらは、ルーターのステータスページに表示されるか、ネットワークアダプターの詳細を確認することで表示される可能性があります。
次に、ISPのDNSサーバーを「mararc」のアップストリームサーバーとして追加します。
upstream_servers = {}
upstream_servers["."] = "xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy"
ここで、xxx.xxx.xxx.xxxとyyy.yyy.yyy.yyyはISPのDNSサーバーです。
完了!
「runmara.bat」をダブルクリックして、サーバーを実行したままにします。
コマンドプロンプトを開き、MaraDNSディレクトリに移動して、次のコマンドを実行してみてください。
askmara.exe Agoogle.com.
そして
askmara.exe Ablog.local.com.
次のような返信があります。
# Querying the server with the IP 127.0.0.1
# Question: Agoogle.com.
google.com. +300 a 74.125.67.100
google.com. +300 a 74.125.53.100
google.com. +300 a 74.125.45.100
# NS replies:
# AR replies:
そして:
# Querying the server with the IP 127.0.0.1
# Question: Ablog.local.com.
blog.local.com. +86400 a 192.168.1.6
# NS replies:
#local.com. +86400 ns synth-ip-7f000001.local.com.
# AR replies:
#synth-ip-7f000001.local.com. +86400 a 127.0.0.1
最初のクエリで問題が発生した場合は、再帰DNS設定を台無しにし(ISP DNSサーバーアドレスは正しいですか?)、2番目のクエリでエラーが発生した場合は、権限のある設定を台無しにしました。
MaraDNSウィンドウをシャットダウンし、「mararc」の最初の2行を次のように変更します。
ipv4_bind_addresses = "192.168.1.2
recursive_acl = "192.168.1.0/24"
ここで、192.168.1.2はサーバーが実行されるコンピューターのIPアドレスであり、recursive_aclの「192.168.1」の部分はネットワーク上のものと同じです(192.168.0.0/24の場合があります)。
MaraDNSを再度起動し、実行したままにします。
ルーターのウェブインターフェースを開き、DHCPサーバーの設定を見つけます。 DNSサーバーを設定するオプションがあるはずです。 DNSサーバーを実行するコンピューターのIPアドレスを書き込みます。
コンピュータごとに、ネットワークを切断します(たとえば、Windowsでネットワークを無効にしてから有効にするか、Linuxで「ifconfigeth0down」/「ifconfigeth0up」を使用します)。
これで、LANコンピュータをドメイン名で参照できるようになります。