Azure 안의 이름 해석은 VNet에 링크한 Private DNS Zone이 맡고, 온프레미스와 주고받는 이름 해석은 DNS Private Resolver가 맡습니다. 온프레미스에서 Azure 이름을 물을 때는 인바운드 엔드포인트로, Azure에서 온프레미스 이름을 물을 때는 아웃바운드 엔드포인트와 전달 규칙 집합으로 보냅니다. 두 서비스를 함께 쓰면 DNS 서버 VM을 따로 두지 않고도 하이브리드 DNS를 구성할 수 있습니다.
1. Azure DNS의 기본 동작
VNet의 VM은 따로 설정하지 않으면 Azure 제공 DNS인 168.63.129.16으로 질의합니다. 이 주소는 VNet 안에서만 쓸 수 있는 가상 IP라서 온프레미스에서는 직접 질의할 수 없습니다. 하이브리드 환경에서 DNS가 막히는 이유가 대부분 여기서 시작합니다.
| 질의 대상 | VNet 안의 VM | 온프레미스 서버 |
| 공용 도메인 | Azure 제공 DNS가 해석 | 온프레미스 DNS가 해석 |
| Private DNS Zone | VNet에 링크된 영역이면 해석 | 그대로는 불가(인바운드 엔드포인트 필요) |
| 온프레미스 도메인 | 그대로는 불가(아웃바운드 엔드포인트 필요) | 온프레미스 DNS가 해석 |
2. Private DNS Zone
Private DNS Zone은 인터넷에 공개되지 않는 DNS 영역입니다. 영역을 만들고 VNet에 가상 네트워크 링크를 연결하면, 그 VNet의 VM이 영역의 레코드를 해석할 수 있습니다. 영역은 특정 리전에 속하지 않는 전역 리소스입니다.
| 기능 | 설명 |
| 가상 네트워크 링크 | 링크된 VNet만 영역을 해석합니다. 한 영역에 여러 VNet을 링크할 수 있습니다. |
| 자동 등록 | 링크에서 켜면 VM을 만들거나 IP가 바뀔 때 A 레코드가 자동으로 생기고 지워집니다. |
| split-horizon | 같은 이름을 VNet 안에서는 사설 IP로, 인터넷에서는 공인 IP로 해석할 수 있습니다. |
| 레코드 종류 | A, AAAA, CNAME, MX, PTR, SOA, SRV, TXT |
자동 등록을 켠 링크는 VNet 하나당 영역 하나만 둘 수 있습니다. 해석만 하는 링크는 여러 영역에 걸 수 있습니다. 영역 이름으로 .local은 운영체제에 따라 동작하지 않을 수 있어 쓰지 않는 것이 좋습니다.
3. Private Endpoint와 privatelink 영역

같은 이름이 링크된 VNet 안에서는 Private Endpoint IP로, 밖에서는 공인 IP로 해석되는 과정
Private Endpoint를 만들면 st01.blob.core.windows.net 같은 공용 이름이 st01.privatelink.blob.core.windows.net으로 CNAME됩니다. 이 privatelink 영역을 Private DNS Zone으로 만들어 VNet에 링크해 두면, 앱은 접속 주소를 바꾸지 않고도 Private Endpoint의 사설 IP로 접속합니다.
| 서비스 | Private DNS Zone | 온프레미스 조건부 전달 대상 |
| Blob Storage | privatelink.blob.core.windows.net | blob.core.windows.net |
| SQL Database | privatelink.database.windows.net | database.windows.net |
| Key Vault | privatelink.vaultcore.azure.net | vault.azure.net vaultcore.azure.net |
| Azure Cache for Redis | privatelink.redis.cache.windows.net | redis.cache.windows.net |
온프레미스 DNS에서 조건부 전달을 걸 때는 privatelink 영역이 아니라 공용 영역 이름(blob.core.windows.net)을 인바운드 엔드포인트로 보냅니다. 앱이 묻는 이름은 공용 이름이고, CNAME을 따라가는 과정은 Azure 쪽에서 처리되기 때문입니다.
4. DNS Private Resolver

온프레미스는 인바운드 엔드포인트로 Azure 이름을 묻고, Azure VM은 전달 규칙에 따라 아웃바운드 엔드포인트를 거쳐 온프레미스 이름을 묻는 구성
DNS Private Resolver는 VNet 안에 두는 관리형 DNS 전달 서비스입니다. 예전에는 이 역할을 위해 DNS 서버 VM을 허브에 두고 직접 이중화했지만, Resolver는 가용성과 영역 이중화가 기본으로 포함되어 있습니다.
| 구성 요소 | 역할 | 조건 |
| 인바운드 엔드포인트 | 온프레미스 → Azure 질의를 받는 사설 IP | 전용 서브넷, Microsoft.Network/dnsResolvers 위임 |
| 아웃바운드 엔드포인트 | Azure → 온프레미스 질의를 내보내는 출구 | 인바운드와 다른 전용 서브넷, 같은 위임 |
| 전달 규칙 집합 | 도메인별로 보낼 DNS 서버를 정한 규칙 묶음 | 아웃바운드 엔드포인트에 연결, 규칙 최대 1,000개 |
| VNet 링크 | 규칙 집합을 적용할 VNet 지정 | 규칙 집합당 최대 500개 |
엔드포인트 서브넷은 /28 이상 /24 이하이고, 다른 리소스와 함께 쓸 수 없습니다. 엔드포인트 하나는 초당 약 1만 개의 쿼리를 처리하고, Resolver 하나에 인바운드와 아웃바운드 엔드포인트를 각각 5개까지 둘 수 있습니다.
5. Hub-Spoke에 적용하는 두 방식
| 방식 | 스포크 설정 | 특징 |
| 규칙 집합 링크(분산) | DNS 서버는 Azure 제공 그대로 두고 규칙 집합을 스포크 VNet에 링크 | 스포크 DNS 설정을 바꾸지 않고, 질의가 허브로 몰리지 않음 |
| 사용자 지정 DNS(중앙) | 스포크 VNet의 DNS 서버를 인바운드 엔드포인트 IP로 지정 | 모든 질의가 허브를 거쳐 한곳에서 관리, Private DNS Zone은 허브에만 링크 |
어느 방식이든 인바운드 엔드포인트를 대상으로 하는 규칙이 들어 있는 규칙 집합을, 그 인바운드 엔드포인트가 있는 VNet에 링크하면 안 됩니다. 질의가 자기 자신에게 돌아와 해석 루프가 생깁니다.
6. Azure CLI로 만들어 보기
vnet-hub(10.0.0.0/16)와 vnet-spoke(10.1.0.0/16)가 피어링되어 있고, 온프레미스 DNS 서버가 192.168.10.10이라고 가정합니다. dns-resolver 명령은 CLI 확장이라 처음 실행할 때 자동으로 설치됩니다.
6.1 Private DNS Zone과 링크
RG=rg-dns
az network private-dns zone create --resource-group $RG --name azure.1nfra.kr
# 스포크는 자동 등록, 허브는 해석만
az network private-dns link vnet create --resource-group $RG \
--zone-name azure.1nfra.kr --name link-spoke \
--virtual-network vnet-spoke --registration-enabled true
az network private-dns link vnet create --resource-group $RG \
--zone-name azure.1nfra.kr --name link-hub \
--virtual-network vnet-hub --registration-enabled false
6.2 Resolver와 엔드포인트
az network vnet subnet create --resource-group $RG --vnet-name vnet-hub \
--name snet-dns-in --address-prefixes 10.0.10.0/28 \
--delegations Microsoft.Network/dnsResolvers
az network vnet subnet create --resource-group $RG --vnet-name vnet-hub \
--name snet-dns-out --address-prefixes 10.0.11.0/28 \
--delegations Microsoft.Network/dnsResolvers
HUB_ID=$(az network vnet show --resource-group $RG --name vnet-hub --query id -o tsv)
az dns-resolver create --resource-group $RG --name dnspr-hub --id $HUB_ID
az dns-resolver inbound-endpoint create --resource-group $RG \
--dns-resolver-name dnspr-hub --name in-hub \
--ip-configurations "[{private-ip-address:'',private-ip-allocation-method:Dynamic,id:$HUB_ID/subnets/snet-dns-in}]"
az dns-resolver outbound-endpoint create --resource-group $RG \
--dns-resolver-name dnspr-hub --name out-hub --id $HUB_ID/subnets/snet-dns-out
# 온프레미스 DNS의 조건부 전달 대상 IP
az dns-resolver inbound-endpoint show --resource-group $RG \
--dns-resolver-name dnspr-hub --name in-hub \
--query "ipConfigurations[0].privateIpAddress" -o tsv
6.3 전달 규칙 집합
OUT_ID=$(az dns-resolver outbound-endpoint show --resource-group $RG \
--dns-resolver-name dnspr-hub --name out-hub --query id -o tsv)
az dns-resolver forwarding-ruleset create --resource-group $RG \
--name rs-onprem --outbound-endpoints "[{id:$OUT_ID}]"
# 도메인 끝에 점(.)을 붙임
az dns-resolver forwarding-rule create --resource-group $RG \
--ruleset-name rs-onprem --name onprem \
--domain-name onprem.1nfra.kr. \
--target-dns-servers "[{ip-address:192.168.10.10,port:53}]"
SPOKE_ID=$(az network vnet show --resource-group $RG --name vnet-spoke --query id -o tsv)
az dns-resolver vnet-link create --resource-group $RG \
--ruleset-name rs-onprem --name link-spoke --id $SPOKE_ID
az dns-resolver vnet-link create --resource-group $RG \
--ruleset-name rs-onprem --name link-hub --id $HUB_ID
이 규칙 집합에는 인바운드 엔드포인트를 대상으로 하는 규칙이 없으므로 허브에 링크해도 루프가 생기지 않습니다. 설정 후 스포크 VM에서 nslookup으로 온프레미스 이름을, 온프레미스 서버에서 nslookup vm-app.azure.1nfra.kr 10.0.10.4로 Azure 이름을 확인합니다.
7. 운영 시 주의점
| 증상·항목 | 확인할 것 |
| Private Endpoint 이름이 공인 IP로 해석됨 | privatelink 영역이 질의한 VNet(중앙 방식이면 허브)에 링크되어 있고 A 레코드가 있는지 확인합니다. |
| 온프레미스에서 사설 IP가 안 나옴 | 조건부 전달을 privatelink 영역이 아니라 공용 영역 이름으로 인바운드 엔드포인트에 보냈는지 확인합니다. |
| 해석 시간 초과, 루프 | 인바운드 엔드포인트를 대상으로 하는 규칙 집합이 허브 VNet에 링크되어 있지 않은지 확인합니다. |
| 자동 등록이 안 됨 | VNet마다 자동 등록 영역은 하나뿐입니다. 다른 영역에 이미 자동 등록 링크가 있는지 확인합니다. |
| 온프레미스에서 인바운드 엔드포인트 응답 없음 | VPN, ExpressRoute 경로와 방화벽, NSG에서 53번 포트(UDP, TCP)가 열려 있는지 확인합니다. |
| VNet DNS 서버 변경이 반영 안 됨 | 사용자 지정 DNS로 바꾼 뒤 기존 VM은 재시작하거나 DHCP를 갱신해야 반영됩니다. |
8. 정리
- Private DNS Zone은 링크된 VNet 안에서만 해석되고, Private Endpoint는 privatelink 영역으로 사설 IP를 돌려줍니다.
- 온프레미스 → Azure는 인바운드 엔드포인트, Azure → 온프레미스는 아웃바운드 엔드포인트와 전달 규칙 집합이 맡습니다.
- 온프레미스 조건부 전달은 공용 영역 이름으로 걸고, 인바운드 엔드포인트를 가리키는 규칙 집합은 허브에 링크하지 않습니다.
참고
'Cloud > Azure' 카테고리의 다른 글
| [Azure] Azure Kubernetes Service 구성 정리 (0) | 2026.09.25 |
|---|---|
| [Azure] Virtual Machine Scale Sets 정리 (0) | 2026.09.25 |
| [Azure] Azure 부하 분산 서비스 비교 (0) | 2026.09.25 |
| [Azure] Front Door와 Application Gateway 연동 정리 (0) | 2026.09.25 |
| [Azure] Azure WAF 정책과 규칙 정리 (0) | 2026.09.25 |