본인의 윈도우 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
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는 외부 스크립트 실행을 비주얼베이직을 통해 실행 가능하다는 내용