본인의 윈도우 Server 2016 VM에서 발생한 현상으로,

cmd창에서 nslookup으로 특정 도메인에 대한 쿼리를 reply 받아서 ip까지 확인이 된다.

C:\WINDOWS\system32>nslookup projects.engineering.redhat.com
서버:    infoblox-trust01.nrt.redhat.com
Address:  10.64.255.25

권한 없는 응답:
이름:    jira-01.hosts.prod.upshift.rdu2.redhat.com
Address:  10.0.13.82
Aliases:  projects.engineering.redhat.com

 

하지만 해당 도메인에 ping 또는 웹페이지 접근 등에 대해서는 아래와 같이 실패를 한다.

C:\WINDOWS\system32>ping projects.engineering.redhat.com
Ping 요청에서 projects.engineering.redhat.com 호스트를 찾을 수 없습니다. 이름을 확인하고 다시 시도하십시오.

 

해당 도메인은 업무상 OpenVPN을 통해 VPN 연결 후 접근하는 회사 내부 시스템에 대한 것이다.

아래 유사 케이스의 내용대로 해 보았지만 해결이 되지 않았다.

 

Similar case:

- Full Fix: Nslookup works but ping fails on Windows 10, 7
https://windowsreport.com/nslookup-works-but-ping-fails/

- Why is 'ping' unable to resolve a name when 'nslookup' works fine?
https://superuser.com/questions/495759/why-is-ping-unable-to-resolve-a-name-when-nslookup-works-fine/508057

위 유사 사례들은 추 후 비슷한 문제가 있을 시 참고하면 좋을 듯 함.

 

결국엔 패킷캡쳐를 통해 원인을 확인했고, 보조 DNS (168.126.63.1 - KT DNS)를 제거함으로써 해결이 되었다.

이더넷 어댑터 이더넷:

   연결별 DNS 접미사. . . . :
   설명. . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection
   물리적 주소 . . . . . . . . : 00-0C-60-DD-1F-EB
   DHCP 사용 . . . . . . . . . : 아니요
   자동 구성 사용. . . . . . . : 예
   링크-로컬 IPv6 주소 . . . . : fe80::d15b:f8bd:8a96:5ac6%5(기본 설정)
   IPv4 주소 . . . . . . . . . : 192.168.0.159(기본 설정)
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . : 192.168.0.1
   DHCPv6 IAID . . . . . . . . : 301993001
   DHCPv6 클라이언트 DUID. . . : 00-01-00-01-25-CF-9D-7B-00-0C-29-AD-1F-EA
   DNS 서버. . . . . . . . . . : 10.64.255.25
                                 168.126.63.1   ---> ** 보조 DNS 삭제함 **
   Tcpip를 통한 NetBIOS. . . . : 사용

Windows '네트워크 연결' 설정에서 Gateway 역활을 하는 이더넷 아답터의 'TCP/IPv4' 설정의 보조 DNS를 제거.

 

제거 후 아래와 같이 flushdns -> nslookup -> ping

C:\WINDOWS\system32>ipconfig /flushdns
Windows IP 구성
DNS 확인자 캐시를 플러시했습니다.

C:\WINDOWS\system32>nslookup projects.engineering.redhat.com
서버:    infoblox-trust01.nrt.redhat.com
Address:  10.64.255.25

권한 없는 응답:
이름:    jira-01.hosts.prod.upshift.rdu2.redhat.com
Address:  10.0.13.82
Aliases:  projects.engineering.redhat.com

C:\WINDOWS\system32>ping projects.engineering.redhat.com

Ping jira-01.hosts.prod.upshift.rdu2.redhat.com [10.0.13.82] 32바이트 데이터 사용:
10.0.13.82의 응답: 바이트=32 시간=421ms TTL=55
10.0.13.82의 응답: 바이트=32 시간=420ms TTL=55

ping reply가 된다. 그리고 해당 도메인의 웹페이지 접근도 가능.

 

참고로,

Windows 10과 RHEL 7 OS에서는 Gateway 역활의 NIC에 보조 DNS가 168.126.63.1으로 설정되어 있어도 문제가 없다.

그리고 문제가 되었던 Windows Server 2016에서 Gateway 역활의 NIC에 KT 인터넷이 아닌 SK 인터넷으로 연결하면 보조 DNS에 168.126.63.1로 설정이 되어 있어도 문제가 없다.
(SK 인터넷을 Gateway로 사용시엔 본인 시스템 네트워크 구조상 다른 NIC에 연결함)

 

근본 원인은 잘 모르겠지만 Windows Server 2016 에서는 문제의 도메인을 질의하면 1차 DNS인 10.64.255.25 가 아닌 2차 DNS 168.126.63.1 로 된다.
(Windows 10, RHEL 7은 2차 DNS를 설정해도 문제가 없음)

* 아래는 보조 DNS 유무에 따른 DNS 쿼리에 대한 패킷캡쳐 내용

No.     Time               Source                Destination           Protocol Length Info
    809 11:57:49.744654    192.168.0.160         168.126.63.1          DNS      75     Standard query 0x794a AAAA ime.windows.com
    810 11:57:49.746760    168.126.63.1          192.168.0.160         DNS      140    Standard query response 0x794a No such name AAAA ime.windows.com SOA ns1.msft.net
   1089 11:57:56.519588    192.168.0.163         168.126.63.1          DNS      86     Standard query 0xf5cb PTR 98.229.22.184.in-addr.arpa
   1091 11:57:56.522412    168.126.63.1          192.168.0.163         DNS      296    Standard query response 0xf5cb PTR 98.229.22.184.in-addr.arpa PTR 184-22-229-0.24.nat.sila1-cgn02.myaisfibre.com NS ns2.myaisfibre.com NS ns1.myaisfibre.com A 58.64.49.151 A 58.64.57.151 AAAA 2405:9800:b011:144::151 AAAA 2405:9800:b019:144::151
   1092 11:57:56.522570    192.168.0.163         168.126.63.1          DNS      106    Standard query 0x7f68 A 184-22-229-0.24.nat.sila1-cgn02.myaisfibre.com
   1093 11:57:56.524838    168.126.63.1          192.168.0.163         DNS      246    Standard query response 0x7f68 A 184-22-229-0.24.nat.sila1-cgn02.myaisfibre.com A 58.64.57.151 NS ns1.myaisfibre.com NS ns2.myaisfibre.com A 58.64.49.151 A 58.64.57.151 AAAA 2405:9800:b011:144::151 AAAA 2405:9800:b019:144::151
   1094 11:57:56.524873    192.168.0.163         168.126.63.1          DNS      106    Standard query 0x15a7 A 184-22-229-0.24.nat.sila1-cgn02.myaisfibre.com
   1095 11:57:56.528461    168.126.63.1          192.168.0.163         DNS      246    Standard query response 0x15a7 A 184-22-229-0.24.nat.sila1-cgn02.myaisfibre.com A 58.64.57.151 NS ns2.myaisfibre.com NS ns1.myaisfibre.com A 58.64.49.151 A 58.64.57.151 AAAA 2405:9800:b011:144::151 AAAA 2405:9800:b019:144::151
   1699 11:58:23.871512    192.168.0.159         168.126.63.1          DNS      91     Standard query 0x6f36 A projects.engineering.redhat.com
   1701 11:58:23.875147    168.126.63.1          192.168.0.159         DNS      145    Standard query response 0x6f36 A projects.engineering.redhat.com SOA a1-68.akam.net
--> 보조 DNS에 168.126.63.1로 설정 시 위와 같이 168.126.63.1로 쿼리를 함.

--> 보조 DNS를 삭제,
   3016 11:58:45.064805    192.168.0.159         10.64.255.25          DNS      77     Standard query 0xfe70 A sb-talk.kakao.com
   3054 11:58:46.075808    192.168.0.159         10.64.255.25          DNS      77     Standard query 0xfe70 A sb-talk.kakao.com
   3155 11:58:53.748321    192.168.0.160         168.126.63.1          DNS      75     Standard query 0x874f A ime.windows.com
   3156 11:58:53.751041    168.126.63.1          192.168.0.160         DNS      140    Standard query response 0x874f No such name A ime.windows.com SOA ns1.msft.net
   3157 11:58:53.751090    192.168.0.160         168.126.63.1          DNS      75     Standard query 0x9b60 AAAA ime.windows.com
   3158 11:58:53.752646    168.126.63.1          192.168.0.160         DNS      140    Standard query response 0x9b60 No such name AAAA ime.windows.com SOA ns1.msft.net
   3159 11:58:53.752681    192.168.0.160         168.126.63.1          DNS      75     Standard query 0x85cd A ime.windows.com
   3160 11:58:53.755504    168.126.63.1          192.168.0.160         DNS      140    Standard query response 0x85cd No such name A ime.windows.com SOA ns1.msft.net
   3161 11:58:53.755543    192.168.0.160         168.126.63.1          DNS      75     Standard query 0x3140 AAAA ime.windows.com
   3162 11:58:53.757364    168.126.63.1          192.168.0.160         DNS      140    Standard query response 0x3140 No such name AAAA ime.windows.com SOA ns1.msft.net
   3203 11:58:55.402003    192.168.0.159         10.64.255.25          DNS      91     Standard query 0xbdd3 A projects.engineering.redhat.com
   3219 11:58:56.392372    192.168.0.159         10.64.255.25          DNS      91     Standard query 0xbdd3 A projects.engineering.redhat.com
   3244 11:58:57.111741    192.168.0.159         10.64.255.25          DNS      76     Standard query 0xe7aa A dns.msftncsi.com
   3300 11:58:57.407976    192.168.0.159         10.64.255.25          DNS      91     Standard query 0xbdd3 A projects.engineering.redhat.com
   3339 11:58:58.111105    192.168.0.159         10.64.255.25          DNS      76     Standard query 0xe7aa A dns.msftncsi.com
   3420 11:58:59.126747    192.168.0.159         10.64.255.25          DNS      76     Standard query 0xe7aa A dns.msftncsi.com
   3448 11:58:59.423545    192.168.0.159         10.64.255.25          DNS      91     Standard query 0xbdd3 A projects.engineering.redhat.com
--> 10.64.255.25 로 쿼리를 함

 

 

2차 DNS를 8.8.8.8(Google DNS) 또는 1.1.1.1(Cloudflare DNS)로 셋업해도 마찬가지이다.

projects.engineering.redhat.com 도메인은 Red Hat 직원을 위한 시스템에 연결되는 도메인이므로 10.64.255.25 DNS 서버를 통해서만 IP reply가 된다.

따라서 이 현상은 어떠한 이유로 해당 도메인 질의 시 2차 DNS로 질의가 되고 2차 DNS 서버는 자신의 ZONE(또는 캐시에)에는 명시되어 있지 않는 unknown 도메인 이므로 IP를 응답 주지 못해서 발생하는 현상이다.

 

VPN 연결 시엔 아래와 같이 Windows 2016 Server에 DNS 설정 중

1차 : 10.68.5.26  (응답 속도가 더 좋음)

2차 : 10.64.255.25 (기존 KT DNS -> 기존 1차 DNS로)

모두 Red Hat 내부 DNS 이기 때문에 VPN 연결 전에는 위 DNS로 쿼리를 할 수 없다.

따라서 VPN 미연결/연결에 따라 DNS를 변경해 줘야 한다.

 

간단하게 bat 파일을 작성하여 VPN 연결 유무에 따라 실행하여 DNS 서버를 변경

- NOVPN.bat

@echo off
title DNS Add
color 5F
mode con cols=20 lines=1
#netsh -c int ip set dns name="Ethernet0" source=static addr=168.126.63.1 register=PRIMARY
netsh -c int ip set dns name="이더넷" source=static addr=168.126.63.1 register=PRIMARY
netsh -c int ip add dns name="이더넷" addr=10.68.5.26 index=2
exit

 

- ONVPN.bat

@echo off
title DNS Del
color 5F
mode con cols=20 lines=1
#netsh -c int ip set dns name="Ethernet0" source=static addr=none register=PRIMARY
netsh -c int ip set dns name="이더넷" source=static addr=none register=PRIMARY
netsh -c int ip set dns name="이더넷" source=static addr=10.68.5.26 register=PRIMARY
netsh -c int ip add dns name="이더넷" addr=10.64.255.25 index=2
ipconfig /flushdns
exit

 

최종적으로는 아래와 같이 적용하였다.

1) batch 파일을 작성

   netsh 명령을 통해 vpn 연결 상태 확인 후

  '미연결/연결'에 따라 dns 설정을 달리하도록 함.

2) visual basic script 작성

   batch 파일을 실행 할 수 있는 batch 파일 작성.

  vb를 통해 간접 호출 하는 이유는 OpenVPN 2.4 버전부터 ovpn config 파일을 통해서 batch 파일을 실행할 수 없기 때문.

3) ovpn 설정

    Tokyo로 VPN 연결되면 script security level을 올리고 vbs 실행되도록 함.

 

아래는관련 파일들임

VPN_CHK.bat

@echo off
title DNS Config for VPN
color 5F
mode con cols=25 lines=1

netsh interface ipv4 show interfaces | findstr "로컬" | findstr disconnected
if %ERRORLEVEL% == 0 (
color 4F
mode con cols=60 lines=10
echo 'VPN_ovpn-NRT-udp 연결 해제가 감지됨'
echo.
echo '1차 DNS에 168.126.63.1 설정 중'
echo '2차 DNS에   10.68.5.26 설정 중'
echo '!잠시만 기다리세요!'
@echo off
netsh -c int ip set dns name="이더넷" source=static addr=168.126.63.1 register=PRIMARY
netsh -c int ip add dns name="이더넷" addr=10.68.5.26 index=2
goto NEXT
) else (
color 3F
mode con cols=60 lines=10
echo 'VPN_ovpn-NRT-udp 연결이 감지됨'
echo.
echo '1차 DNS에   10.68.5.26 설정'
echo '2차 DNS에 10.64.255.25 설정'
echo '!잠시만 기다리세요!'
timeout 2 > NUL
@echo off
netsh -c int ip set dns name="이더넷" source=static addr=none register=PRIMARY
netsh -c int ip set dns name="이더넷" source=static addr=10.68.5.26 register=PRIMARY
netsh -c int ip add dns name="이더넷" addr=10.64.255.25 index=2
ipconfig /flushdns
goto NEXT
)
:NEXT
exit

 

dns-change.vbs

Set WinScriptHost = CreateObject( "WScript.shell" )

WinScriptHost.Run Chr(34) & "C:\VPN_CHK.bat" & Chr(34), 0

Set WinScriptHost = Nothing

 

ovpn-NRT-udp.ovpn

script-security 2
up 'C:\\Windows\\System32\\wscript.exe C:\\dns-change.vbs'

파일 위치 - C:\Program Files\OpenVPN\config\Tokyo NRT udp\

 

위와 같이 적용 시 Tokyo opvn Profile을 통해 VPN 연결하면 자동으로 1/2차 DNS설정이 Red Hat 내부 DNS 서버 주소로 변경된다.

 

- Reference manual for OpenVPN 2.4

Reference manual for OpenVPN 2.4

As of OpenVPN 2.3 it is now a strict requirement to have full path to the script interpreter when running non-executables files. This is not needed for executable files, such as .exe, .com, .bat or .cmd files. For example, if you have a Visual Basic script, you must use this syntax now:

--> OpenVPN 2.4는 외부 스크립트 실행을 비주얼베이직을 통해 실행 가능하다는 내용

 

nslookup works but ping fails on Windows
태그:                 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다