[Amazon Route53] ๋™์ผํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์™ธ๋ถ€/๋‚ด๋ถ€ ์•ก์„ธ์Šค ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•œ Split DNS ์ ์šฉํ•˜๊ธฐ

2024. 3. 17. 19:19ใ†AWS/troubleshooting

๊ฐœ์š”

As-is

  • DNS : AWS Route53์„ ์ด์šฉํ•˜์—ฌ “example.com”์ด๋ผ๋Š” public hosted zone ์„œ๋น„์Šค ์ค‘.
  • ๋„คํŠธ์›Œํฌ : On-Premise์™€ AWS๋Š” Direct Connect๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ฌธ์ œ ์—†์ด ํ†ต์‹  ์ค‘.

Problem

  • On-Premise์—์„œ ์ ‘๊ทผํ•˜๋Š” ๋‚ด๋ถ€ ์ง์› ๋ฐ ํผ๋ธ”๋ฆญ์˜ ์™ธ๋ถ€ ์ง์›์ด ๊ณตํ†ต์œผ๋กœ ์ ‘์†ํ•˜๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์กด์žฌ.
  • public hosted zone์—์„œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋“ฑ๋ก๋˜์–ด, ๋‚ด๋ถ€ ์ง์›์€ direct conenct๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์™ธ๋ถ€๋ง์„ ๋‚˜๊ฐ”๋‹ค๊ฐ€ AWS๋กœ ๋“ค์–ด์˜ด. ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ.

To-Be

  • ์™ธ๋ถ€ ์ง์›์€ ํผ๋ธ”๋ฆญ์—์„œ๋„ ๋ฌธ์ œ ์—†์ด ์›น ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋˜, ๋‚ด๋ถ€ ์ง์›์€ ๋‚ด๋ถ€๋ง์„ ์ด์šฉํ•˜์—ฌ Direct Connect๋ฅผ ํ†ตํ•ด ์›น ์„œ๋ฒ„์— ์ ‘์† ํ•„์š”.
  • ์ด๋ฅผ ์œ„ํ•ด ๋™์ผํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์™ธ๋ถ€/๋‚ด๋ถ€ ์•ก์„ธ์Šค ๋ถ„๋ฆฌ ํ•„์š” (Split-View DNS).

 

Split-Horizon DNS๋ž€? (= split dns = split-view dns)

๋‚ด๋ถ€/์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ๋”ฐ๋ผ DNS ์ •๋ณด๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” DNS ๊ตฌ์„ฑ. ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋„คํฌ์›Œํฌ์— ๋”ฐ๋ผ ๋™์ผํ•œ ๋„๋ฉ”์ธ์ด private ip ๋˜๋Š” public ip๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ํด๋ผ์ด์–ธํŠธ ์‹œ์Šคํ…œ์ด ์ธํ„ฐ๋„ท์„ ํ†ต๊ณผํ•  ํ•„์š” ์—†์ด ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋” ์ ์€ ์ˆ˜์˜ ๋„คํŠธ์›Œํฌ ์žฅ์น˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด์„œ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํ–ฅ์ƒ๋œ๋‹ค.

 

Route53์„ ์ด์šฉํ•œ Split-Horizon DNS ๊ตฌ์„ฑ

Route53์„ ์ด์šฉํ•˜์—ฌ Split-view DNS๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ์ด๋ฆ„์˜ public / private hosted zone์„ ๊ตฌ์„ฑํ•˜๊ณ , ๊ฐ ํ˜ธ์ŠคํŒ… ์˜์—ญ์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. public hosted zone์˜ ๋ ˆ์ฝ”๋“œ๋Š” ์ธํ„ฐ๋„ท ํŠธ๋ž˜ํ”ฝ์ด ๋ผ์šฐํŒ…๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•˜๊ณ , private hosted zone์€ ์—ฐ๊ฒฐ๋œ VPC (๋‚ด๋ถ€๋ง)์—์„œ ๋ผ์šฐํŒ…๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•œ๋‹ค.

๐Ÿšจ ์ฃผ์˜ ๐Ÿšจ
๋‹จ, VPC(๋‚ด๋ถ€๋ง)์—์„œ ์ฟผ๋ฆฌ ์‹œ ์ผ์น˜ํ•˜๋Š” private hosted zone์ด ์žˆ์ง€๋งŒ ์š”์ฒญํ•œ ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋ฐ type์ด ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ Resolver๋Š” ์š”์ฒญ์„ public DNS resolver๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ๋Œ€์‹  NXDOMAIN ์˜ค๋ฅ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

ex) ์•„๋ž˜์˜ ๊ฒฝ์šฐ private hosted zone์— ์—ฐ๊ฒฐ๋œ VPC์—์„œ “aaa.example.com” ์ฟผ๋ฆฌ ์‹œ NXDOMAIN ๋ฆฌํ„ด.
- private hosted zone “example.com” ๋‚ด “aaa.example.com”์˜ A type ๋ ˆ์ฝ”๋“œ ์—†์Œ.
- public hosted zone “example.com” ๋‚ด “aaa.example.com”์˜ A type ๋ ˆ์ฝ”๋“œ ์กด์žฌ.

 

 

Split-Horizon DNS vs. Route53 IP ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์ฑ…

Client IP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„๋ฉ”์ธ์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค๋Š” ๊ฐœ๋…์€ ๋™์ผํ•˜๋‹ค. Route53์˜ IP๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฃผ์†Œ๊ฐ€ ์†ํ•œ CIDR ๋ธ”๋ก(์„œ๋ธŒ๋„ท)์„ ๊ธฐ๋ฐ˜์œผ๋กœ DNS ๋ผ์šฐํŒ…์„ ๋ฏธ์„ธ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ Public hosted zone์—์„œ๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ œ์–ด ๋ฒ”์œ„ ๋‚ด์˜ Resolver์—์„œ ์ฟผ๋ฆฌํ•˜๋Š”์ง€์˜ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ, Split Horizon DNS๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, Resolver๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” CIDR ๋ธ”๋ก์— ๋Œ€ํ•ด IP-based Routing Policy๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

[Amazon Route53] IP ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

IP ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์ฑ… AWS Route53์€ ํผ๋ธ”๋ฆญ ํ˜ธ์ŠคํŒ… ์˜์—ญ์—์„œ IP ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์ฑ…์„ ์ ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์„œ๋ธŒ๋„ท์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„๋ฉ”์ธ์˜ ๋ฆฌ์†Œ์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ… ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜

hyeon-joo.tistory.com

Route53์˜ IP ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์ฑ…์„ ์ด์šฉํ•˜๋ฉด "๋‚ด๋ถ€๋ง"์œผ๋กœ ์ •์˜๋˜๋Š” ๋Œ€์—ญ์ด ์ถ”๊ฐ€/์‚ญ์ œ๋˜๋ฉด Route53 Location(CIDR ๋ธ”๋ก)์„ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š” ๊ด€๋ฆฌ point๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. Route53 Private/Public hosted zone & AD DNS ๋“ฑ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ Resolver๊ฐ€ ๊ด€๋ฆฌ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— R53์˜ IP ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์ฑ… ๋Œ€์‹  Split-Horizon DNS ๊ตฌ์„ฑ์„ ์„ ํƒํ•˜์˜€๋‹ค. ๋น„์šฉ์ ์ธ ์ธก๋ฉด์—์„œ๋„ Split-Horizon DNS๊ฐ€ ์œ ๋ฆฌํ•˜๋‹ค. (2024.03 ๊ธฐ์ค€)

 

 

R53 Split-Horizon DNS ์ ์šฉ ๋ฐฉ๋ฒ•

hosted zone์„ ๋‹ค๋ฅธ AWS ๊ณ„์ •์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ด๋“œํ•˜๋Š” AWS์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ Split-Horizon DNS๋ฅผ ์ ์šฉํ•˜์˜€๋‹ค.

1. (์‚ฌ์ „ ์ž‘์—…) ๊ธฐ์กด public hosted zone์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œ

private hosted zone์ด ์ƒ์„ฑ๋˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋”์ด์ƒ public hosted zone์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— public์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ private์— ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด AWS CLI๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ์ผ๋กœ ๋‹ค์šด๋ฐ›์•˜๋‹ค. 

aws route53 list-resource-record-sets --hosted-zone-id {$public-hosted-zone} > ./hostedZone.json

2. (์‚ฌ์ „ ์ž‘์—…) 1์˜ ๋ ˆ์ฝ”๋“œ ํŒŒ์ผ์„ ๋ณ€ํ™˜

๋™์ผํ•œ ์ด๋ฆ„์˜ private hosted zone์ด ์ƒ์„ฑ๋˜๊ณ  ํ•ด๋‹น zone์— ์›ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด nxdomain ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. nxdomain ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด hostedZone.json์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์ข‹์€ ํ˜•ํƒœ์˜ ํŒŒ์ผ(createHostedZone.json)์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

(1) SOA, NS ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ญ์ œ

(2) AWS CLI " aws route53 change-resource-record-sets" ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜

import json

# ์ฃผ์–ด์ง„ JSON ๋ฐ์ดํ„ฐ
with open('./hostedzone.json', 'r') as f:
  input_json = json.load(f)

# ๋ณ€ํ™˜ํ•  JSON ํ˜•์‹
output_json = {
  "Comment": "string",
  "Changes": []
}

# ๊ธฐ์กด ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜
print('๊ธฐ์กด ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜: ', len(input_json["ResourceRecordSets"]))

# ๋ณ€ํ™˜ ์ž‘์—… ์ˆ˜ํ–‰
for record_set in input_json["ResourceRecordSets"]:
  # Type์ด "SOA" ๋˜๋Š” "NS"์ธ ๊ฒฝ์šฐ ์‚ญ์ œ
  if record_set["Type"] in ["SOA", "NS"]:
    continue
  else:
    # ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ๋Š” ๋ณ€ํ™˜ ์ž‘์—… ์ˆ˜ํ–‰
    change = {
      "Action": "CREATE",
      "ResourceRecordSet": record_set
    }
  output_json["Changes"].append(change)

print('๋ณ€ํ™˜ ํ›„ ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜: ', len(output_json["Changes"]))

# ๋ณ€ํ™˜๋œ JSON์„ ํŒŒ์ผ๋กœ ์ €์žฅ
output_file_path = "createHostedZone.json"
with open(output_file_path, "w") as output_file:
  json.dump(output_json, output_file, indent=2)

 

3. ์‹ ๊ทœ private hosted zone ์ƒ์„ฑ ๋ฐ ์ผ๊ด„ ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…

๋™์ผํ•œ ์ด๋ฆ„์˜ private hosted zone์„ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ๋œ hosted zone์— ์•„๋ž˜ AWS CLI๋ฅผ ์ด์šฉํ•ด ๋ ˆ์ฝ”๋“œ๋ฅผ ์ผ๊ด„ ์‚ฝ์ž…ํ•œ๋‹ค. ์•ฝ 300๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ ๊ธฐ์ค€ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด 30์ดˆ๋„ ์ฑ„ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ A ํƒ€์ž…์˜ Alias ๋ ˆ์ฝ”๋“œ๋„ ๋™์ผํ•˜๊ฒŒ ์ž˜ ์‚ฝ์ž…๋œ๋‹ค.

private hosted zone ์ƒ์„ฑ ์‹œ, nxdomain ์˜ค๋ฅ˜ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ VPC๋งŒ ์—ฐ๊ฒฐํ•˜์˜€์œผ๋ฉฐ, 5๋ฒˆ ๊ณผ์ •๊นŒ์ง€ ์ˆ˜ํ–‰ ํ›„ ๋‚˜๋จธ์ง€ VPC๋ฅผ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•˜์˜€๋‹ค.

aws route53 change-resource-record-sets --hosted-zone-id {$private-hosted-zone} --change-batch file://./createHostedZone.json

4. (์„ ํƒ) public hosted zone(1)๊ณผ private hosted zone(3)์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•œ์ง€ ๊ฒ€์ฆ

3์—์„œ ์ƒ์„ฑํ•œ ์‹ ๊ทœ private hosted zone๊ณผ ๊ธฐ์กด์˜ public hosted zone์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•œ์ง€ ๊ฒ€์ฆํ•œ๋‹ค. ์•„๋ž˜ AWS CLI๋ฅผ ์ด์šฉํ•˜์—ฌ private hosted zone ๋ ˆ์ฝ”๋“œ๋ฅผ ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.

aws route53 list-resource-record-sets --hosted-zone-id {$private-hosted-zone} > ./privateHostedZone.json

์•„๋ž˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ฐ’์ธ์ง€ ํ™•์ธํ•˜์˜€๋‹ค.

import json

def compare_json_files(file_path_a, file_path_b):
    try:
        with open(file_path_a, 'r', encoding='utf-8') as file_a, open(file_path_b, 'r', encoding='utf-8') as file_b:
            data_a = json.load(file_a)
            data_b = json.load(file_b)

            filtered_data_a = {
                "ResourceRecordSets": [record for record in data_a["ResourceRecordSets"] if record["Type"] not in ["NS", "SOA"]]
            }
            filtered_data_b = {
                "ResourceRecordSets": [record for record in data_b["ResourceRecordSets"] if record["Type"] not in ["NS", "SOA"]]
            }

            if filtered_data_a == filtered_data_b:
                print("๋‘ JSON ํŒŒ์ผ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.")
            else:
                print("๋‘ JSON ํŒŒ์ผ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.")
    except FileNotFoundError:
        print("ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
    except json.JSONDecodeError as e:
        print(f"JSON ๋””์ฝ”๋”ฉ ์˜ค๋ฅ˜: {e}")
    except Exception as e:
        print(f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {e}")

file_path_A = './hostedZone.json'
file_path_B = './newHostedZone.json'
compare_json_files(file_path_A, file_path_B)

5. private hosted zone์—์„œ ๋ถ„๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ ๊ฐ’ ์ˆ˜์ •

๋ณธ ํฌ์ŠคํŒ…์˜ ๊ฒฝ์šฐ, private hosted zone์˜ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜์—ฌ abc.example.com์˜ ๊ฐ’์ด ๊ฐ๊ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋“ฑ๋ก๋˜์—ˆ๋‹ค. 

  • public hosted zone : internet-facing NLB ์—”๋“œํฌ์ธํŠธ (Aํƒ€์ž… Alias)
  • private hosted zone : internal ALB ์—”๋“œํฌ์ธํŠธ (Aํƒ€์ž… Alias)

6. AD ์กฐ๊ฑด๋ถ€ ์ „๋‹ฌ์ž ์„ค์ •

AD DNS๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ์˜จํ”„๋ ˜ ์„œ๋ฒ„์—์„œ ๊ธฐ์กด์ฒ˜๋Ÿผ "example.com"์„ public์œผ๋กœ ์ฟผ๋ฆฌํ•˜์ง€ ์•Š๊ณ  privateํ•˜๊ฒŒ ์ฟผ๋ฆฌํ•˜๊ณ  ๋‚ด๋ถ€๋ง์„ ํ†ตํ•ด ํ†ต์‹ ๋˜๋„๋ก ์กฐ๊ฑด๋ถ€ ์ „๋‹ฌ์ž๋ฅผ ์„ค์ •ํ•˜์˜€๋‹ค. AD DNS์— ์กฐ๊ฑด๋ถ€ ์ „๋‹ฌ์ž๋ฅผ ๋“ฑ๋กํ•˜์ž๋งˆ์ž ์ „ํŒŒ์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„ ์—†์ด ์ฆ‰์‹œ Route53์˜ private hosted zone์œผ๋กœ ์ฟผ๋ฆฌํ•˜์˜€๋‹ค. (๊ธฐ์กด์— ์ฟผ๋ฆฌํ•˜์—ฌ TTL ๋งŒํผ์˜ ์บ์‹œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ œ์™ธ)

Route53 ๋‚ด  AD DNS์™€ ํ†ต์‹ ํ•˜๋Š” inbound endpoint ์ด๋ฏธ ์กด์žฌํ•˜์—ฌ ํ•ด๋‹น ๋‚ด์šฉ์€ ์ƒ๋žตํ•˜์ง€๋งŒ ์ตœ์ดˆ ํ†ต์‹ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” R53 inbound endpoint ์ƒ์„ฑ ๋ฐ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ, ๋ณด์•ˆ๊ทธ๋ฃน ๊ทœ์น™ ์„ค์ • ๋“ฑ์˜ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

์ฐธ๊ณ 

  1. Wikipedia: Split-Horizon DNS
  2. AWS Docs: Route53 > Split-view DNS
  3. AWS Docs: Route53 > IP-based routing
  4. AWS Blog: Introducing IP-based routing for Amazon Route 53
  5. AWS Docs: Route53 > Migrating a hosted zone to a different AWS account