내가 일하고 있는 곳에서는 개발 환경을 폐쇄망으로 구축해놓았다.
즉, 내가 개발하고 있는 환경은 인터넷이 전혀 되지 않는 사설망이다.
이 환경에서 여러 가지 가끔 네트워크 문제가 발생한다.
인터넷이 연결되어 있지 않으면 네트워크 문제인지 서버 문제인지 파악하는 것이 어렵다.
또 복구 작업 시 네트워크가 정상 작동하는 지 확인하는 게 어간 어렵지 않을 수 없다.
그때 Windows의 NCSI(Network Connectivity Status Indicator) 기능을 활용할 수 있으면 굉장히 편할 것 같다.
그래서 이를 폐쇄망 환경에서 인위적으로 작동시켜 보기로 하였다.
흔히 보이는 '인터넷 액세스', 이것이 NCSI (Network Connectivity Status Indicator)
NCSI와 관련된 정보는 MSDN에 잘 정리되어 있다.
( https://technet.microsoft.com/en-us/library/cc766017(WS.10).aspx )
이 글을 정리하면 Windows NCSI는 다음 두 가지 요청을 통해 인터넷에 연결되어 있는지 확인한다.
요청 종류 |
요청 방법 |
HTTP |
http://www.mstfncsi.com/ncsi.txt 의 HTTP 본문이 Microsoft NCSI (다른 내용, 빈 줄 없이) |
DNS | dns.msftncsi.com 의 DNS 이름이 131.107.255.255 |
그래서 위에서 제시한 방법을 실제로 시도해보았다.
먼저 간단하게 HTTP 서버를 만들었다.
이후 로컬 테스트를 위해 hosts 파일(X:\Windows\System32\drivers\etc\hosts)에 다음 줄을 추가했다.
127.0.0.1 www.mstfncsi.com
131.107.255.255 dns.msftncsi.com
(DNS 서버가 있기는 했지만 설정하기 귀찮아서 일단 hosts 파일로 적당히···)
그런데 여전히 네트워크 아이콘에는 느낌표가...
위 글을 다시 읽어보니 NCSI는 다음 상황에서 작동한다고 한다.
- 컴퓨터가 재시작되어 사용자가 처음 로그온할 때
- 컴퓨터가 다른 네트워크에 연결할 때
- 공용 무선 네트워크가 사용자 인증을 요청할 때
그래서 어쩔 수 없이 컴퓨터를 재시작하자 느낌표가 사라졌다!
제대로 작동하는 것을 확인하였으니 로컬에서 서버로 환경을 옮겨보았다.
위에서 hosts 파일에 추가한 두 줄을 제거하고 DNS 서버에 두 항목을 추가했다.
(나는 Windows Server 2012 R2 의 DNS 서버를 사용하기 때문에 리눅스계열의 bind는 사용할 줄 모른다)
오오 잘 된다!
이것으로 만사 해결.
그런데 DNS Lookup이 진짜 필요한지 의문이 들었다.
폐쇄망에 따라서는 DNS 서버를 운영하지 않는 경우도 있기 때문에 한 번 테스트할 가치가 있을 것 같다.
그래서 위의 DNS 설정을 모두 삭제했다.
그래도 정상적으로 인터넷에 연결되었다고 NCSI가 알려준다.
그럼 반대로 웹 서버가 꼭 필요한가 테스트해보았다.
우선 DNS 설정은 원래대로 되돌렸다.
다음 두 가지 경우를 테스트해보았다.
- 웹 서버 자체가 없는 경우
- 웹 서버는 있으나 ncsi.txt를 반환하지 않는 경우
결과는 두 가지 전부 “인터넷에 연결되어 있지 않습니다”
뭔가 이상하다.
nslookup을 해봐도 DNS 결과는 정상이다.
로컬 테스트로 사용했던 hosts로 설정을 해봐도 같은 결과.
음... 모르겠다.
굳이 해결할 필요도 없을 것 같아서 더 이상 테스트는 진행하지 않았다.
어쨌건 여기서 결론은 폐쇄망에서 NCSI를 작동시키려면 ncsi.txt 를 반환하는 서버를 만들면 된다는 것이다.
혹시나 폐쇄망 환경에서 NCSI 기능을 활성화시킬 필요가 있다면 아주 간단한 웹 서버를 만들라.