web-dev-qa-db-ja.com

Windows 7でwifiホットスポットを作成し、ローカルWebページにリダイレクトする方法は?

質問に飛び込む前に、いくつかの簡単な背景情報:
Windows 7を実行しているコンピューターと連携する小さな実験を作成しました。このコンピューターには、実験からのステータス情報で継続的に更新されるWebページを提供する小さなWebサーバーがあります。この実験はいくつかのイベント(MakerFaireなどを想像してください)で表示されます。スマートフォン(またはラップトップ)を使用して、できるだけ少ない構成でこのWebページを直接表示できるといいのですが。

基本的に私が達成しようとしていることは次のとおりです。

  1. Wifiアクセスポイントを作成するコンピューターの組み込みwifiアダプターを使用ユーザーが接続できる場所(オープンまたはパスワードで保護)

  2. DNSやHTTPリクエストをインターセプトしてリダイレクトし、ブラウザを開いたときに実験のWebページが表示されるようにします(キャプティブポータルなど)。

これまでのところ、WifiAP部分に最適なWindows7のホスト型ネットワーク機能を使用してポイント1を達成することができました。しかし、DHCP回答を変更してカスタムDNSサーバーを提供し、それがすべてのトラフィックをWebサーバーに転送することになったとき、私は立ち往生しています。それを行う方法はありますか?

私が持っているいくつかの制約(そうでなければそれは簡単すぎるでしょう;-)):

  • 私はWindows7で立ち往生しています(Linuxでは問題はずっと前に解決されていたでしょう!)
  • コンピュータはスタンドアロンマシンです。つまり、他のネットワークやインターネットにアクセスすることはできません。 これは、ルーターやその他の外部デバイスがないことも意味します!

どんな助けや提案も大歓迎です!

7
Federico
  1. MaraDNSを入手する

MaraDNSは、WindowsおよびLinux用の無料で軽量で比較的構成が簡単なDNSサーバーです。ここからダウンロードして、いくつかのフォルダに解凍します。

  1. MaraDNSを構成する

「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サーバーです。

完了!

  1. MaraDNSを実行し、askmara.exeを使用してテストします

「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番目のクエリでエラーが発生した場合は、権限のある設定を台無しにしました。

  1. LANからのクエリに応答するようにMaraDNSを変更します

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を再度起動し、実行したままにします。

  1. 新しいDNSサーバーを配布するようにルーターを設定します

ルーターのウェブインターフェースを開き、DHCPサーバーの設定を見つけます。 DNSサーバーを設定するオプションがあるはずです。 DNSサーバーを実行するコンピューターのIPアドレスを書き込みます。

コンピュータごとに、ネットワークを切断します(たとえば、Windowsでネットワークを無効にしてから有効にするか、Linuxで「ifconfigeth0down」/「ifconfigeth0up」を使用します)。

これで、LANコンピュータをドメイン名で参照できるようになります。

ソース

2
Everett