단순한 구성부터 복잡한 구성까지, 그 안에서 DNS가 작동하는 방식을 확인해야 하는 경우가 있습니다. 다행히 컴퓨터에는 이를 도와주는 유틸리티가 내장되어 있습니다. 이 글에서는 Windows 명령 프롬프트와 PowerShell의 유용한 명령어를 알아보고, 두 셸(shell)의 차이점에 대해서도 살펴보겠습니다. 준비되셨나요? 당연히 그러실 거라 믿습니다. 여기까지 찾아오셨으니까요. 물어볼 필요도 없겠죠? 어차피 이 부분은 안 읽고 바로 명령어 설명으로 넘어가셨을 텐데 말이에요. 좋습니다. 여러분 마음대로 하세요.
참고: 모든 예시는 Windows 10 실행 시스템에서 가져온 것입니다.
Windows는 1981년에 처음으로 Microsoft 운영 체제용 명령 프롬프트(CMD)를 도입했습니다. 이는 Windows '이면'에서 작동하면서 시스템을 더 효과적으로 제어할 수 있도록 해주는 프로그램으로, 프롬프트가 표시되는 단순한 검은색 창에서 실행됩니다. 프롬프트는 사용하는 컴퓨터에 따라 C:\> 또는 C:\Users\example의 형식을 띄며, 이러한 도구를 사용하면 한 줄 명령을 실행할 수 있습니다.
PowerShell은 Windows가 2006년에 처음 출시한 셸로, 파란색 창에서 실행되며 CMD 또는 MS-Dos 명령 대신 cmdlet(command-lets로 발음)을 사용합니다. 스크립팅 시스템과 기본적으로 제공되는 관리 기능을 갖추고 있으며, 일괄 처리(batch) 명령을 실행할 수 있습니다. 즉, 한 번에 하나의 명령만 실행하는 것이 아니라 일련의 cmdlet을 완료할 수 있는 거죠. PowerShell은 명령 프롬프트와 달리 콘솔 프로그램에만 국한되지 않으며, 현재 릴리스는 Linux와 macOS를 지원하는 .Net 5.0에서 실행됩니다. 또한 PowerShell은 다양한 시스템의 여러 라이브러리에 액세스할 수도 있습니다.
Windows 명령 프롬프트를 시작하는 방법에는 여러 가지가 있는데, 그중 하나는 작업 표시줄에서 검색 아이콘을 클릭하고 ‘command prompt’ 또는 ‘cmd’를 입력하는 것입니다. 그러면 검색 창 상단의 ‘최적의 일치 항목’ 아래에 앱이 표시됩니다.
한편, 저처럼 키보드 단축키를 좋아하신다면 Win + R을 눌러 실행 명령을 불러올 수 있습니다. cmd를 입력하고 ‘확인’을 클릭하면 열립니다!
PowerShell에 액세스하는 방법도 Windows 명령 프롬프트와 똑같습니다. cmd 대신 검색 또는 명령 실행 창에 PowerShell을 입력하면 되죠. 다른 점은 검색 옵션을 사용한다는 것인데요, 검색 경로를 선택하면 Windows PowerShell 및 PowerShell ISE 옵션이 표시됩니다. 여기서는 기본 Windows PowerShell을 사용하겠습니다.
아니면 Win + X를 눌러 새 메뉴를 불러올 수도 있는데, 이렇게 하면 관리자 권한으로 PowerShell에 액세스할 수 있는 옵션이 제공됩니다. 또한 이 메뉴에는 실행 및 그밖에 다양한 Windows 유틸리티도 포함되어 있습니다.
알고 계셨나요? PowerShell ISE는 Windows PowerShell의 호스트 애플리케이션입니다. 참고로, ISE는 Integrated Scripting Environment(통합 스크립팅 환경)의 줄임말이죠. 표준 PowerShell은 명령 프롬프트와 비슷하게 생긴 반면 이 옵션은 인터페이스를 제공합니다.
그럼 이제 진짜 중요한 부분으로 들어가 보죠! 다음은 DNS 문제를 해결하거나 확인하는 데 도움이 될 수 있는 몇 가지 Windows CMD 명령어입니다. 걱정하지 마세요. 제가 워낙 상상력이 뛰어나거든요. 위에서 열심히 설명한 내용은 건너뛰고 바로 여기부터 보고 계시더라도 모른 척할게요.
Nslookup은 DNS 이름 해석 문제를 진단하는 데 유용한 명령으로, Mac 또는 Linux의 dig 기능과 비슷합니다. 이 명령어는 호스트의 IP 주소를 찾거나 역방향 DNS 조회(IP의 도메인 이름 찾기)를 수행할 수 있으며, 도메인의 DNS 레코드에 대한 정보도 제공할 수 있습니다.
Nslookup 명령의 형식은 C:\Users\username>nslookup dnsmadeeasy.com과 같습니다.
이 예에서는 DNS Made Easy의 IP 주소를 알려 달라는 간단한 요청을 했고, 그에 대한 응답으로 해당 도메인의 IPv6 및 IPv4 주소를 받았습니다. 'non-authoritative answer(권한 없는 응답)'라고 표시된 이유는 재귀 서버를 사용하여 쿼리를 수행하고 있기 때문입니다.
IP 주소에 대한 도메인 이름을 알고자 하는 경우 역방향 DNS 조회를 수행할 수 있습니다. 짐작하셨겠지만 위의 예시와 동일한 형식을 사용하되
C:\Users\username>nslookup 162.243.68.201과 같이 정반대로 조회하는 거죠.
명령줄에서 도메인의 네임서버를 찾거나 특정 파라미터를 설정하고자 한다고 가정해 보겠습니다. 이 경우 Windows set 명령을 사용하면 됩니다. 다음은 그 예시입니다.
C:\Users\username>nslookup
>set q=ns
>dnsmadeeasy.com
(각 명령어 입력 후에 Enter 키를 누릅니다.)
그러면 다음과 같은 결과가 표시됩니다.
nslookup 및 set 명령을 사용하여 도메인의 DNS 레코드를 확인하거나 문제를 해결할 수도 있습니다. 프로세스는 위의 예와 동일하지만 이 경우에는 쿼리할 레코드를 지정하게 되며, 해당 정보에서 발견한 오류나 문제를 신속하게 해결할 수 있습니다. 아래 스크린샷은 MX, PTR, SOA 레코드에 대한 조회를 수행한 경우를 보여주지만, 이러한 레코드에만 국한되는 것은 아닙니다.
C:\Users\username>nslookup
>set q=mx
>dnsmadeeasy.com
(각 명령어 입력 후에 Enter 키를 누릅니다.)
팁: 다수의 레코드 유형을 확인하는 경우 각 레코드 유형에 대해 일일이 'nslookup'을 입력할 필요 없이 최초 nslookup 명령 실행 후 각 레코드에 대해 set 명령을 실행하면 됩니다. 이는 다른 도메인의 레코드 확인을 시작하는 경우에도 적용됩니다.
팁: 명령을 수행하기 전에 DNS 캐시를 삭제하는 것이 도움이 될 수 있습니다. 이를 위해서는 ipconfig/flushdns를 입력한 다음 Enter 키를 누르면 캐시가 삭제됩니다.
도메인의 DNS에 대한 추가적인 세부 정보를 얻으려면 debug 명령을 사용할 수 있으며, 이를 통해 DNS 서버 요청의 헤더 정보를 받을 수 있습니다(아래 스크린샷 참조).
C:\Users\username>nslookup
>set debug
>example.com
CMD에서 ping 명령을 실행하여 네트워크 진단을 수행할 수 있습니다. ping은 대상 위치에 대한 연결 대기 시간을 측정합니다. 시범적으로 Google의 퍼블릭 DNS 주소인 8.8.8.8을 사용하여 ping 테스트를 실행해 보겠습니다.
C:\Users\username>Ping 8.8.8.8
이제 ping 대상 서버로부터 응답을 받는 데 걸리는 왕복 시간을 알게 되었습니다.
네트워크 진단에 유용하게 사용할 수 있는 또 다른 명령은 traceroute 명령입니다. traceroute는 시작점에서 목적지까지 패킷의 경로를 추적하는 명령어로, 연결 문제를 해결할 때 특히 유용합니다. 아래 그림에서는 도메인 이름 www.example.com 및 해당 IP 주소에 대한 경로 추적을 수행했습니다.
C:\Users\username>tracert 127.0.0.1
C:\Users\username>tracert www.example.com
traceroute 명령은 패킷이 목적지에 도착하기 위해 거치는 경로를 확인하는 작업을 수행합니다. 이때 경유하는 구간을 홉(hop)이라고 합니다. 홉의 개수를 통해 쿼리 확인 시간을 알 수 있으며, 이러한 정보는 DNS 속도를 개선하거나 문제가 있는 라우터를 식별하는 데 도움이 될 수 있습니다.
팁: 명령 프롬프트는 최근 명령 기록을 보관합니다. 상단의 화살표 키를 눌러 스크롤하면 세션에서 이전에 입력한 명령을 손쉽게 확인할 수 있습니다. 작동 방식의 예는 아래 GIF를 참조하세요.
Windows PowerShell이 선호하신다면 이 섹션이 도움이 될 것입니다. 다음은 앞서 설명한 Window 명령과 동일한 PowerShell 명령입니다.
PowerShell의 Resolve-DnsName 명령은 CMD의 nslookup 명령과 동일합니다.
PS C:\Users\username>Resolve-DnsName dnsmadeeasy.com (또는 C:\Users\username>Resolve-DnsName 162.243.68.201)
팁: PowerShell에서 cmdlet의 처음 몇 글자를 입력한 다음 Tab 키를 누르면 나머지가 명령어가 자동 완성되어 시간을 절약할 수 있습니다. 예를 들어 'reso'를 입력한 다음 탭을 누르면(reso + tab) PowerShell이 Resolve-DnsName을 자동 완성해 줍니다. Test-Connection과 같은 다른 cmdlet도 마찬가지로 'test-con'까지만 입력한 다음 탭을 누르면 Test-Connection이 자동 완성됩니다.
PowerShell에서는 Resolve-DnsName 명령어를 사용하여 레코드를 조회할 수 있는데, 이때 어떤 레코드인지 지정하려면 명령어에 '-type'을 추가해야 합니다.
PS C:\Users\username>Resolve-DnsName dnsmadeeasy.com -Type MX (또는 원하는 레코드).
참고로 대소문자 구분 없이 -Type이나 -type 어떤 것을 입력해도 cmdlet는 동일하게 실행됩니다.
PowerShell의 Ping = Test-Connection
PS C:\Users\username>Test-Connection dnsmadeeasy.com
결과는 다르게 보이지만 이 경우에도 소스(컴퓨터 이름)와 홉, 응답을 받는 데 걸린 시간을 확인할 수 있습니다.
PowerShell의 tracert은 CMD의 tracert입니다. 네, 맞습니다. 이번에는 cmdlet와 CMD 명령이 동일합니다.
C:\Users\username>tracert example.com
DNS 문제를 효과적으로 해결하기 위해 온라인 리소스를 사용할 수도 있습니다. 특히 이러한 도구는 장소를 불문하고 어떤 디바이스로든 액세스할 수 있기 때문에 매우 유용합니다. 예를 들어, DigiCert의 자매 기업인 Constellix의 DNS 조회 도구를 사용하면 지리적 위치를 기반으로 DNS 레코드를 검색하고 검사를 실행할 수 있습니다. 또한 사용자가 지정한 네임서버에 대해 쿼리를 수행할 수도 있습니다. 지원되는 레코드는 A, AAAA, CNAME, MX, TXT, NS, SOA, SRV입니다.
Constellix의 DNS 조회 도구를 사용하면 몇 가지 추가적인 이점이 있습니다. 우선 동일한 세션에서 다른 도메인 및 네임서버에 대해 검사를 실행할 수 있습니다. 그뿐만 아니라 그 결과를 도메인, 레코드 타입, 리졸버(resolver) 또는 위치별로 필터링하고, 각 검사를 확장하거나 최소화할 수 있습니다. 또한 결과의 URL을 복사하여 팀에 이메일로 보낼 수 있어 많은 시간을 절약할 수 있는 매우 편리한 도구입니다.
위의 옵션들을 사용하면 DNS를 확인하고 문제를 해결할 수 있습니다. 요점을 정리하자면, 명령 프롬프트와 PowerShell, 온라인 DNS 도구는 네임서버와 레코드 명령 및 그 밖의 DNS 정보를 제공해 주지만 그 작동 방식은 다릅니다. CMD는 한 줄 명령을 사용하는 한편, PowerShell은 cmdlet을 사용하며 일괄 명령을 실행할 수 있습니다. Constellix의 온라인 DNS 조회 도구와 같은 리소스는 사용자가 입력한 세부 정보를 기반으로 검사를 수행합니다.
물론 이 글에서 명령 프롬프트나 PowerShell의 모든 것을 다룬 것은 아니며, 여기에 언급되지 않은 훨씬 다양한 기능이 있습니다. 아래는 두 가지 유틸리티를 더 깊이 이해하는 데 도움이 되는 몇 가지 링크입니다.
이 글이 마음에 드셨다면 아래의 링크도 도움이 될 것입니다.