Anycast DNS 개요
이 토픽에서는 Anycast DNS의 작동 방식에 대한 정보를 제공합니다.
Anycast란?
Anycast는 각각 동일한 IP 주소가 할당된 엔드포인트 그룹에 여러 라우팅 경로를 제공하는 기술입니다. 그룹의 각 디바이스는 네트워크에서 동일한 주소를 보급하고 라우팅 프로토콜을 사용하여 가장 적합한 대상을 선택합니다.
Anycast를 사용하면 동일한 IP 주소 뒤에 여러 노드를 배치하고 ECMP(동일 비용 다중 경로) 라우팅을 통해 이러한 노드 간에 트래픽을 전송하여 DNS 또는 HTTP와 같은 상태 비저장 서비스의 크기를 조정할 수 있습니다. Anycast는 각 엔드포인트에 고유한 별도의 IP 주소가 있는 유니캐스트와 다릅니다.
DNS에서 Anycast를 사용하는 이유는 무엇인가요?
Anycast DNS를 사용하면 DNS 서버 또는 서버 그룹을 사용하도록 설정하여 DNS 클라이언트의 지리적 위치에 따라 DNS 쿼리에 응답할 수 있습니다. 이렇게 하면 DNS 응답 시간이 개선되고 DNS 클라이언트 설정이 간소화됩니다. 또한 Anycast DNS는 추가 중복 계층을 제공하며 DNS 서비스 거부 공격으로부터 보호하는 데 도움이 될 수 있습니다.
Anycast DNS 작동 방식
Anycast DNS는 BGP(Border Gateway Protocol)와 같은 라우팅 프로토콜을 사용하여 DNS 쿼리를 기본 DNS 서버 또는 DNS 서버 그룹(예: 부하 분산 장치에서 관리하는 DNS 서버 그룹)으로 보냅니다. 이 디자인은 클라이언트에 가장 가까운 DNS 서버에서 DNS 응답을 가져와 DNS 통신을 최적화할 수 있습니다.
Anycast를 사용하면 여러 지리적 위치에 있는 서버가 각각 동일한 단일 IP 주소를 해당 로컬 게이트웨이(라우터)에 보급합니다. DNS 클라이언트가 Anycast 주소에 대한 쿼리를 시작하면 사용 가능한 경로가 평가되고 DNS 쿼리가 기본 설정 위치로 전송됩니다. 일반적으로 이 위치는 네트워크 토폴로지를 기반으로 가장 가깝습니다. 다음 예를 참조하세요.
그림 1: Anycast 네트워크 예제
- 네트워크의 서로 다른 사이트에 있는 4개의 DNS 서버(파란색 원)는 각각 동일한 Anycast IP 주소를 로컬 라우팅 디바이스에 알릴 수 있습니다(표시되지 않음).
- 경로는 네트워크의 디바이스 간에 공유됩니다(검은색 화살표).
- DNS 클라이언트 디바이스(녹색 원)는 DNS 쿼리를 Anycast IP 주소로 보냅니다.
- 클라이언트의 DNS 요청은 네트워크의 라우팅 디바이스에서 수신됩니다(표시되지 않음).
- 라우팅 디바이스는 Anycast IP 주소로 사용 가능한 경로를 분석하고 사용 가능한 가장 짧은 경로를 사용하여 DNS 쿼리를 라우팅합니다.
- DNS 쿼리는 가장 가까운 DNS 서버(파란색 화살표)로 전송됩니다.
Anycast DNS는 일반적으로 오늘날 많은 글로벌 DNS 서비스의 DNS 트래픽을 라우팅하는 데 사용됩니다. 예를 들어 루트 DNS 서버 시스템은 Anycast DNS에 크게 의존합니다. Anycast는 다양한 라우팅 프로토콜에서도 작동하며 인트라넷에서만 사용할 수 있습니다.
Windows Server 네이티브 BGP Anycast 데모
다음 절차에서는 Windows Server의 네이티브 BGP를 Anycast DNS와 함께 사용하는 방법을 보여 줍니다.
요구 사항
- Hyper-V 역할이 설치된 물리적 디바이스 1개
- Windows Server 2012 R2, Windows 10 이상
- 클라이언트 VM 2개(모든 운영 체제)
- DIG와 같은 DNS용 BIND 도구를 설치하는 것이 좋습니다.
- 서버 VM 3개(Windows Server 2016 또는 Windows Server 2019)
- Windows PowerShell LoopbackAdapter 모듈이 서버 VM(DC001, DC002)에 아직 설치되지 않은 경우 이 모듈을 설치하려면 인터넷 액세스가 일시적으로 필요합니다.
Hyper-V 설정
다음과 같이 Hyper-V 서버를 구성합니다.
- 2개의 프라이빗 가상 스위치 네트워크가 구성됨
- 모의 인터넷 네트워크 131.253.1.0/24
- 모의 인트라넷 네트워크 10.10.10.0/24
- 클라이언트 VM 2개는 131.253.1.0/24 네트워크에 연결
- 2개의 서버 VM이 10.10.10.0/24 네트워크에 연결됨
- 1개의 서버는 이중 홈이며 131.253.1.0/24 및 10.10.10.0/24 네트워크 모두에 연결됩니다.
가상 머신 네트워크 구성
다음 설정을 사용하여 가상 머신에서 네트워크 설정을 구성합니다.
- Client1, client2
- Client1: 131.253.1.1
- Client2: 131.253.1.2
- 서브넷 마스크: 255.255.255.0
- DNS: 51.51.51.51
- 게이트웨이: 131.253.1.254
- 게이트웨이(Windows Server)
- NIC1: 131.253.1.254, 서브넷 255.255.255.0
- NIC2: 10.10.10.254, 서브넷 255.255.255.0
- DNS: 51.51.51.51
- 게이트웨이: 131.253.1.100(데모에서는 무시 가능)
- DC001(Windows Server)
- NIC1: 10.10.10.1
- 서브넷: 255.255.255.0
- DNS: 10.10.10.1
- 게이트웨이: 10.10.10.254
- DC002(Windows Server)
- NIC1: 10.10.10.2
- 서브넷 255.255.255.0
- DNS: 10.10.10.2*
- 게이트웨이: 10.10.10.254
*DC001에서 Active Directory 도메인을 찾을 수 있도록 DC002에 대한 도메인 조인을 수행할 때 처음에 DNS에 10.10.10.1을 사용합니다.
DNS 구성
서버 관리자 및 DNS 관리 콘솔 또는 Windows PowerShell을 사용하여 다음 서버 역할을 설치하고 두 서버 각각에 정적 DNS 영역을 만듭니다.
- DC001, DC002
- Active Directory Domain Services 설치 및 도메인 컨트롤러로 승격(선택 사항)
- DNS 역할(필요한 경우) 설치
- DC001 및 DC002 모두에서 zone.tst라는 정적 영역(비 AD 통합) 만들기
- "TXT" 형식의 영역에 단일 정적 레코드 이름 서버 추가
- DC001 = DC001에서 TXT 레코드 데이터(텍스트)
- DC002 = DC002에서 TXT 레코드 데이터(텍스트)
루프백 어댑터 구성
DC001 및 DC002의 관리자 권한 Windows PowerShell 프롬프트에서 다음 명령을 입력하여 루프백 어댑터를 구성합니다.
참고 항목
Install-Module 명령을 사용하려면 인터넷에 액세스해야 합니다. 이 작업은 Hyper-V의 외부 네트워크에 VM을 일시적으로 할당하여 수행할 수 있습니다.
$primary_interface = (Get-NetAdapter |?{$_.Status -eq "Up" -and !$_.Virtual}).Name
$loopback_ipv4 = '51.51.51.51'
$loopback_ipv4_length = '32'
$loopback_name = 'Loopback'
Install-Module -Name LoopbackAdapter -MinimumVersion 1.2.0.0 -Force
Import-Module -Name LoopbackAdapter
New-LoopbackAdapter -Name $loopback_name -Force
$interface_loopback = Get-NetAdapter -Name $loopback_name
$interface_main = Get-NetAdapter -Name $primary_interface
Set-NetIPInterface -InterfaceIndex $interface_loopback.ifIndex -InterfaceMetric "254" -WeakHostReceive Enabled -WeakHostSend Enabled -DHCP Disabled
Set-NetIPInterface -InterfaceIndex $interface_main.ifIndex -WeakHostReceive Enabled -WeakHostSend Enabled
Set-NetIPAddress -InterfaceIndex $interface_loopback.ifIndex -SkipAsSource $True
Get-NetAdapter $loopback_name | Set-DNSClient –RegisterThisConnectionsAddress $False
New-NetIPAddress -InterfaceAlias $loopback_name -IPAddress $loopback_ipv4 -PrefixLength $loopback_ipv4_length -AddressFamily ipv4
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_msclient
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_pacer
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_server
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_lltdio
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_rspndr
가상 머신 라우팅 구성
VM에서 다음 Windows PowerShell 명령을 사용하여 라우팅을 구성합니다.
- 게이트웨이
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-RemoteAccess -VpnType RoutingOnly
Add-BgpRouter -BgpIdentifier “10.10.10.254” -LocalASN 8075
Add-BgpPeer -Name "DC001" -LocalIPAddress 10.10.10.254 -PeerIPAddress 10.10.10.1 -PeerASN 65511 –LocalASN 8075
Add-BgpPeer -Name "DC002" -LocalIPAddress 10.10.10.254 -PeerIPAddress 10.10.10.2 -PeerASN 65511 –LocalASN 8075
- DC001
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-RemoteAccess -VpnType RoutingOnly
Add-BgpRouter -BgpIdentifier “10.10.10.1” -LocalASN 65511
Add-BgpPeer -Name "Labgw" -LocalIPAddress 10.10.10.1 -PeerIPAddress 10.10.10.254 -PeerASN 8075 –LocalASN 65511
Add-BgpCustomRoute -Network 51.51.51.0/24
- DC002
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-RemoteAccess -VpnType RoutingOnly
Add-BgpRouter -BgpIdentifier "10.10.10.2" -LocalASN 65511
Add-BgpPeer -Name "Labgw" -LocalIPAddress 10.10.10.2 -PeerIPAddress 10.10.10.254 -PeerASN 8075 –LocalASN 65511
Add-BgpCustomRoute -Network 51.51.51.0/24
요약 다이어그램
그림 2: 네이티브 BGP Anycast DNS 데모에 대한 랩 설정
Anycast DNS 데모
게이트웨이 서버에서 BGP 라우팅 확인
PS C:\> Get-BgpRouteInformation
DestinationNetwork NextHop LearnedFromPeer State LocalPref MED
51.51.51.0/24 10.10.10.1 DC001 Best
51.51.51.0/24 10.10.10.2 DC002 Bestclient1 및 client2에서 51.51.51.51에 도달할 수 있는지 확인합니다.
PS C:\> ping 51.51.51.51
32바이트의 데이터를 사용하여 51.51.51.51 Ping:
51.51.51.51에서 회신: bytes=32 time<1ms TTL=126
51.51.51.51에서 회신: bytes=32 time<1ms TTL=126
51.51.51.51에서 회신: bytes=32 time<1ms TTL=126
51.51.51.51에서 회신: bytes=32 time<1ms TTL=12651.51.51.51에 대한 통계 Ping:
패킷: 전송 = 4, 수신 = 4, 손실 = 0(0% 손실),
대략적인 왕복 시간(밀리초):
최소 = 0ms, 최대 = 0ms, 평균 = 0ms참고 항목
ping에 실패하면 ICMP를 차단하는 방화벽 규칙이 없는지도 확인합니다.
client1 및 client2에서 nslookup 또는 dig를 사용하여 TXT 레코드를 쿼리합니다. 두 가지 예가 모두 나와 있습니다.
PS C:\> dig server.zone.tst TXT +short
PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51
한 클라이언트는 "DC001"을 표시하고 다른 클라이언트는 "DC002"를 표시하여 Anycast가 제대로 작동하는지 확인합니다. 게이트웨이 서버에서 쿼리할 수도 있습니다.
다음으로 DC001에서 이더넷 어댑터를 사용하지 않도록 설정합니다.
PS C:\> (Get-NetAdapter).Name
루프백
이더넷 2
PS C:\> Disable-NetAdapter "Ethernet 2"
확인
이 작업을 수행하시겠습니까?
Disable-NetAdapter '이더넷 2'
[Y] 예 [A] 모두 예 [N] 아니요 [L] 모두 아니요 [S] 일시 중단 [?] 도움말(기본값: "Y"):
PS C:\> (Get-NetAdapter).Status
위로
사용 안 함이전에 DC001에서 응답을 받은 DNS 클라이언트가 DC002로 전환되었는지 확인합니다.
PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51
Server: UnKnown
Address: 51.51.51.51server.zone.tst text =
"DC001"
PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51
Server: UnKnown
Address: 51.51.51.51server.zone.tst text =
"DC002"
게이트웨이 서버에서 Get-BgpStatistics를 사용하여 BGP 세션이 DC001에서 다운되어 있는지 확인합니다.
DC001에서 이더넷 어댑터를 다시 사용하도록 설정하고 BGP 세션이 복원되고 클라이언트가 DC001에서 DNS 응답을 다시 받는지 확인합니다.
참고 항목
부하 분산 장치를 사용하지 않는 경우 개별 클라이언트는 사용 가능한 경우 동일한 백 엔드 DNS 서버를 사용합니다. 이렇게 하면 클라이언트에 대한 일관된 BGP 경로가 만들어집니다. 자세한 내용은 RFC4786 4.4.3 섹션: 동일 비용 경로를 참조하세요.
자주 묻는 질문
Q: Anycast DNS가 온-프레미스 DNS 환경에서 사용하기에 좋은 솔루션인가요?
A: Anycast DNS는 온-프레미스 DNS 서비스와 원활하게 작동합니다. 그러나 DNS 서비스의 크기를 조정하려면 Anycast가 필요하지 않습니다.
Q: 도메인 컨트롤러 수가 많은(예:>50) 환경에서 Anycast DNS를 구현하면 어떤 영향이 있나요?
A: 기능에 직접적인 영향은 없습니다. 부하 분산 장치를 사용하는 경우 도메인 컨트롤러에 대한 다른 구성이 필요하지 않습니다.
Q: Anycast DNS 구성은 Microsoft 고객 서비스에서 지원되나요?
A: Microsoft가 아닌 부하 분산 장치를 사용하여 DNS 쿼리를 전달하는 경우 Microsoft는 DNS 서버 서비스와 관련된 문제를 지원합니다. DNS 전달과 관련된 문제는 부하 분산 장치 공급업체에 문의하세요.
Q: 도메인 컨트롤러 수가 많은(예: >50) Anycast DNS에 대한 모범 사례는 무엇인가요?
A: 각 지리적 위치에서 부하 분산 장치를 사용하는 것이 가장 좋습니다. 부하 분산 장치는 일반적으로 외부 공급업체에서 제공합니다.
Q: Anycast DNS와 Azure DNS의 기능이 비슷한가요?
A: Azure DNS는 Anycast를 사용합니다. Azure DNS에서 Anycast를 사용하려면 Azure DNS 서버에 요청을 전달하도록 부하 분산 장치를 구성합니다.