
Прежде чем углубляться в вопрос, немного краткой справочной информации:
я построил небольшой эксперимент, который работает вместе с компьютером под управлением Windows 7. На этом компьютере есть небольшой веб-сервер, обслуживающий веб-страницу, постоянно обновляемую информацией о состоянии, поступающей из эксперимента. Теперь этот эксперимент будет отображаться на некоторых мероприятиях (представьте себе MakerFaire, ...), и я был бы рад, если бы люди могли использовать свои смартфоны (или ноутбуки) для непосредственного отображения этой веб-страницы с минимальной настройкой с их стороны.
По сути, я пытаюсь добиться следующего:
Создать точку доступа Wi-Fiс помощью встроенного в компьютер адаптера Wi-Fiк которым могут подключаться люди (открытые или защищенные паролем)
Перехватывать и перенаправлять DNS- и/или HTTP-запросы таким образом, чтобы при открытии браузера отображалась веб-страница эксперимента (как портал авторизации)
До сих пор мне удавалось достичь пункта 1 с помощью функции Hosted Network в Windows 7, которая отлично работает для части Wifi AP. Однако я застрял, когда дело доходит до изменения ответов DHCP для предоставления пользовательского DNS-сервера, который, в свою очередь, будет пересылать весь трафик на мой веб-сервер: есть ли способ сделать это?
Вот несколько ограничений, которые у меня есть (иначе было бы слишком просто ;-) ):
- Я застрял на Windows 7 (я знаю, что с Linux эта проблема была бы решена давно!)
- Компьютер является автономной машиной, т.е. не имеет доступа к другим сетям или Интернету.Что также означает отсутствие маршрутизатора или любого другого внешнего устройства!
Любая помощь или предложения будут высоко оценены!
решение1
- Получить MaraDNS
MaraDNS — бесплатный, легкий и относительно простой в настройке DNS-сервер для Windows и Linux. Загрузите его отсюда и распакуйте в какую-нибудь папку.
- Настроить MaraDNS
Откройте «secret.txt» и измените значение на что-то другое (случайные символы).
Конфигурация MaraDNS находится в файле «mararc» в том же каталоге. DNS-серверы имеют два набора функций. Они могут функционировать как «Авторитетный сервер имен» или «Рекурсивный/кэширующий сервер имен».
Авторитетные серверы имен определяют IP-адреса для доменных имен. Рекурсивные серверы имен хранят информацию от авторитетных серверов имен и передают запросы рекурсивным образом.
Мы настроим как авторитарный, так и рекурсивный функционал в MaraDNS.
2.1 Авторитетная конфигурация
Мы настроим сервер для предоставления авторитетных имен доменных имен локальной сети. Выберите любой домен, я выбрал «local.com» (хотя учтите, что вы не сможете получить доступ к фактическому веб-сайту «local.com», если выберете существующее доменное имя).
Добавьте строки конфигурации в «mararc» следующим образом:
csv2 = {}
csv2["local.com."] = "db.lan.txt"
Где local.com — это выбранное вами доменное имя, а db.lan.txt — это имя второго файла конфигурации, который мы создадим следующим (измените его, если хотите дать имя второму файлу конфигурации).
Создайте новый файл с именем «db.lan.txt» в том же каталоге, что и MaraDNS.
Для каждого из компьютеров, которые вы хотите разрешить в имя, добавьте строку в «db.lan.txt». Например, для двух машин, одна «dev.local.com» и другая «blog.local.com», добавьте следующие строки:
dev.% 192.168.1.4 ~
blog.% 192.168.1.6 ~
Сделанный!
2.2 Рекурсивная конфигурация
Мы настроим MaraDNS так, чтобы он обращался к вашим серверам имен по умолчанию для всех остальных доменов, чтобы вы могли преобразовывать все остальные доменные имена в их правильные IP-адреса.
Узнайте адреса DNS-серверов вашего интернет-провайдера. Они, скорее всего, будут указаны либо на странице состояния маршрутизатора, либо при проверке сведений о вашем сетевом адаптере.
Теперь добавьте DNS-серверы вашего интернет-провайдера в качестве вышестоящих серверов в «mararc»:
upstream_servers = {}
upstream_servers["."] = "xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy"
Где xxx.xxx.xxx.xxx и yyy.yyy.yyy.yyy — DNS-серверы вашего интернет-провайдера.
Сделанный!
- Запустите 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 (верны ли адреса DNS-серверов вашего интернет-провайдера?), а если вы получили ошибку со вторым запросом, вы напутали с настройками авторитарного DNS.
- Измените MaraDNS для ответа на запросы из вашей локальной сети
Закройте окно MaraDNS и измените первые две строки «mararc» на что-то вроде:
ipv4_bind_addresses = "192.168.1.2
recursive_acl = "192.168.1.0/24"
Где 192.168.1.2 — это IP-адрес компьютера, на котором будет работать сервер, а часть «192.168.1″ recursive_acl такая же, как в вашей сети (может быть 192.168.0.0/24).
Запустите MaraDNS еще раз и оставьте его работать.
- Настройте маршрутизатор для предоставления нового DNS-сервера
Откройте веб-интерфейс вашего маршрутизатора и найдите настройки DHCP-сервера. Должна быть опция настройки DNS-сервера. Напишите IP-адрес компьютера, на котором будет работать DNS-сервер.
На каждом из ваших компьютеров отключите сеть (например, отключив и включив ее в Windows или используя «ifconfig eth0 down»/«ifconfig eth0 up» в Linux).
Вот и все, теперь вы можете обращаться к компьютерам вашей локальной сети по их доменным именам.