
질문에 대해 자세히 알아보기 전에 몇 가지 간단한 배경 정보를 살펴보겠습니다.
저는 Windows 7을 실행하는 컴퓨터와 함께 작동하는 작은 실험을 만들었습니다. 이 컴퓨터에는 실험에서 나오는 상태 정보로 지속적으로 업데이트되는 웹 페이지를 제공하는 작은 웹 서버가 있습니다. 이제 이 실험은 일부 이벤트(MakerFaire 등을 상상해 보십시오)에서 표시될 것이며 사람들이 스마트폰(또는 노트북)을 사용하여 가능한 한 적은 구성으로 이 웹 페이지를 직접 표시할 수 있으면 좋겠습니다.
기본적으로 내가 달성하려는 것은 다음과 같습니다.
Wi-Fi 액세스 포인트 생성컴퓨터에 내장된 Wi-Fi 어댑터를 사용하여사람들이 연결할 수 있는 곳(열기 또는 비밀번호로 보호됨)
브라우저(예: 캡티브 포털)를 열 때 실험 웹페이지가 표시되도록 DNS 및/또는 HTTP 요청을 가로채고 리디렉션합니다.
지금까지 저는 Wi-Fi AP 부분에 아주 잘 작동하는 Windows 7의 호스팅 네트워크 기능을 사용하여 1번 항목을 달성할 수 있었습니다. 그러나 모든 트래픽을 내 웹 서버로 전달하는 사용자 지정 DNS 서버를 제공하기 위해 DHCP 응답을 수정해야 할 때 막혔습니다. 이를 수행할 수 있는 방법이 있습니까?
내가 가지고 있는 몇 가지 제약 사항(그렇지 않으면 너무 쉬울 것입니다 ;-)):
- 저는 Windows 7을 사용하고 있습니다. (Linux를 사용했다면 이 문제는 오래 전에 해결되었을 것입니다!)
- 컴퓨터는 독립형 시스템입니다. 즉, 다른 네트워크나 인터넷에 액세스할 수 없습니다.이는 또한 라우터나 기타 외부 장치가 없다는 것을 의미합니다!
어떤 도움이나 제안이라도 대단히 감사하겠습니다!
답변1
- MaraDNS 받기
MaraDNS는 무료이고 가볍고 비교적 구성하기 쉬운 Windows 및 Linux용 DNS 서버입니다. 여기에서 다운로드한 후 특정 폴더에 압축을 풀어보세요.
- MaraDNS 구성
“secret.txt”를 열고 값을 다른 값(임의의 문자)으로 변경하세요.
MaraDNS 구성은 동일한 디렉터리의 "mararc" 파일에 있습니다. DNS 서버에는 두 가지 기능 세트가 있습니다. 이는 "신뢰할 수 있는 이름 서버" 또는 "재귀/캐싱 이름 서버"로 작동할 수 있습니다.
신뢰할 수 있는 이름 서버는 도메인 이름에 대한 IP 주소를 지정합니다. 재귀 이름 서버는 권한 있는 이름 서버의 정보를 저장하고 재귀적인 방식으로 쿼리를 전달합니다.
MaraDNS에서 권위 있는 기능과 재귀적인 기능을 모두 구성할 것입니다.
2.1 권한 있는 구성
LAN 도메인 이름의 신뢰할 수 있는 이름을 제공하도록 서버를 구성합니다. 도메인을 선택하고 저는 “local.com”을 선택했습니다(기존 도메인 이름을 선택하면 실제 “local.com” 웹사이트에 액세스할 수 없다는 점에 유의하세요).
다음과 같이 "mararc"에 구성 줄을 추가합니다.
csv2 = {}
csv2["local.com."] = "db.lan.txt"
여기서 local.com은 선택한 도메인 이름이고 db.lan.txt는 다음에 생성할 두 번째 구성 파일의 이름입니다(두 번째 구성 파일의 이름을 지정하려면 변경하세요).
MaraDNS와 동일한 디렉터리에 "db.lan.txt"라는 새 파일을 만듭니다.
이름을 확인하려는 각 컴퓨터에 대해 "db.lan.txt"에 줄을 추가합니다. 예를 들어 하나는 "dev.local.com"이고 다른 하나는 "blog.local.com"인 두 개의 시스템에 대해 다음 줄을 추가합니다.
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 서버입니다.
완료!
- 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 서버 주소가 정확합니까?). 두 번째 쿼리에서 오류가 발생하면 권한 있는 설정을 망친 것입니다.
- LAN의 쿼리에 응답하도록 MaraDNS를 변경하세요.
MaraDNS 창을 종료하고 "mararc"의 처음 두 줄을 다음과 같이 변경합니다.
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를 다시 시작하고 실행 상태로 둡니다.
- 새 DNS 서버를 배포하도록 라우터를 설정하세요.
라우터의 웹 인터페이스를 열고 DHCP 서버 설정을 찾으세요. DNS 서버를 설정하는 옵션이 있어야 합니다. DNS 서버가 실행될 컴퓨터의 IP 주소를 작성하십시오.
각 컴퓨터에 대해 네트워크 연결을 끊습니다(예: Windows에서 네트워크를 비활성화하고 활성화하거나 Linux에서 "ifconfig eth0 down"/"ifconfig eth0 up"을 사용하여).
이제 도메인 이름으로 LAN 컴퓨터를 참조할 수 있습니다.