ЁЯУТ рдзрдбрд╛ 08 тАФ VPC рдордзрд▓реЗ DNS: campus рдЪреА phone book
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 08 ┬╖ рдорд╛рдЧрдЪрд╛: lesson-07-endpoints ┬╖ рдкреБрдврдЪрд╛: lesson-09-peering
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ07, рдЖрдгрд┐ рдирд╛рд╡реЗ: base + 2 рд╡рд░рдЪрд╛ VPC рдЪрд╛ рдЕрдВрдЧрднреВрдд resolver, VPC рдЪреЗ рджреЛрди DNS switches,
рдЖрдгрд┐ рдПрдХ private hosted zone school.internal рдЬреА рдлрдХреНрдд рддрд┐рдЪреНрдпрд╛рд╢реА associate рдХреЗрд▓реЗрд▓реНрдпрд╛ VPCs
рдордзреНрдпреЗрдЪ рдЙрддреНрддрд░ рджреЗрддреЗ. vpc/demo.py рдордзрд▓реЗ dns().
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Campus рд╡рд░ рдХреБрдгрд╛рд▓рд╛рдЪ рдЦреЛрд▓реНрдпрд╛рдВрдЪреЗ рдирдВрдмрд░ рдЖрдард╡рдд рдирд╛рд╣реАрдд. рд▓реЛрдХ "рдкрд░реАрдХреНрд╖рд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп" рдореНрд╣рдгрддрд╛рдд, 10.20.96.15 рдирд╛рд╣реА. рдореНрд╣рдгреВрди
рдкреНрд░рддреНрдпреЗрдХ campus рд╡рд░ рдард░рд▓реЗрд▓реНрдпрд╛ рдЬрд╛рдЧреА рдПрдХ phone book ЁЯУТ рдЕрд╕рддреЗ: рдиреЗрд╣рдореА campus рдЪрд╛ рддрд┐рд╕рд░рд╛ рдирдВрдмрд░
(10.20.0.2). рддрд┐рд▓рд╛ рдирд╛рд╡ рд╡рд┐рдЪрд╛рд░рд╛, рддреА рддреБрдореНрд╣рд╛рд▓рд╛ рдирдВрдмрд░ рджреЗрддреЗ.
рд╢рд╛рд│рд╛ phone book рдордзреНрдпреЗ рд╕реНрд╡рддрдГрдЪреА рдЦрд╛рдЬрдЧреА рдкрд╛рдиреЗ рд╕реБрджреНрдзрд╛ рд▓рд┐рд╣рд┐рддреЗ: db.school.internal,
app.school.internal. рд╣реА рдкрд╛рдиреЗ рдлрдХреНрдд рдпрд╛рдЪ campus рдЪреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рдд рдЕрд╕рддрд╛рдд. рднрд╛рдЧреАрджрд╛рд░ рд╢рд╛рд│реЗрдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ
рдкреБрд╕реНрддрдХ рдЖрд╣реЗ, рдЖрдгрд┐ рддреНрдпрд╛рдд рд╣реА рдкрд╛рдиреЗ рдирд╛рд╣реАрдд тАФ рдЬреЛрдкрд░реНрдпрдВрдд рд╢рд╛рд│рд╛ рдЬрд╛рдгреВрдирдмреБрдЬреВрди рддреНрдпрд╛рдВрдирд╛ рдПрдХ рдкреНрд░рдд рджреЗрдд рдирд╛рд╣реА
(рдПрдХ association).
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
app["ЁЯЦея╕П app 10.20.48.25"]
res["ЁЯУТ resolver 10.20.0.2<br/>and 169.254.169.253"]
phz["ЁЯФТ private zone school.internal<br/>associated: school VPC"]
pub["ЁЯМН public DNS"]
partner["ЁЯдЭ partner VPC"]
app -->|"db.school.internal?"| res --> phz -->|"10.20.96.15"| app
res -->|"other names"| pub
partner -.->|"db.school.internal?"| x["no answer<br/>zone not associated"]
ЁЯЧ║я╕П рд░реЗрдЦрд╛рдЯрд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/vpc/lesson-diagrams.html#l08
тЭУ рдХрд╛рдп
- Amazon-provided DNS (Route 53 Resolver) тАФ рдкреНрд░рддреНрдпреЗрдХ VPC рдордзреНрдпреЗ рдПрдХ рдЕрд╕рддреЛ. рддреЛ VPC base
address + 2 рд╡рд░ (
10.20.0.0/16рд╕рд╛рдареА10.20.0.2) рдЖрдгрд┐ 169.254.169.253 рд╡рд░ рдЙрддреНрддрд░ рджреЗрддреЛ. рддреЛ public рдирд╛рд╡реЗ, AWS service рдирд╛рд╡реЗ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ private hosted zones resolve рдХрд░рддреЛ. enableDnsSupportтАФ resolver VPC рдордзреНрдпреЗ рдЪрд╛рд▓рддреЛ (default рдиреЗ рдЪрд╛рд▓реВ).enableDnsHostnamesтАФ public IPs рдЕрд╕рд▓реЗрд▓реНрдпрд╛ instances рдирд╛ public DNS рдирд╛рд╡реЗ рдорд┐рд│рддрд╛рдд (default VPC рдордзреНрдпреЗ default рдиреЗ рдЪрд╛рд▓реВ, рддреБрдореНрд╣реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ VPC рдордзреНрдпреЗ default рдиреЗ рдмрдВрдж). Private hosted zones рдЖрдгрд┐ interface-endpoint private DNS рд╕рд╛рдареА рджреЛрдиреНрд╣реА switches рдЪрд╛рд▓реВ рдЕрд╕рд╛рд╡реЗ рд▓рд╛рдЧрддрд╛рдд.- Private hosted zone тАФ рдПрдХ Route 53 zone (рдЬрд╕реЗ
school.internal) рдЬреА рдлрдХреНрдд рддрд┐рдЪреНрдпрд╛рд╢реА associate рдХреЗрд▓реЗрд▓реНрдпрд╛ VPCs рдордзреНрдпреЗрдЪ рдЙрддреНрддрд░ рджреЗрддреЗ. рдЗрддрд░ VPCs рдирд╛ тАФ рдЕрдЧрджреА peered рдЕрд╕рд▓реЗ рддрд░реА тАФ рддреБрдореНрд╣реА zone рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА associate рдХрд░реЗрдкрд░реНрдпрдВрдд рдЙрддреНрддрд░ рдорд┐рд│рдд рдирд╛рд╣реА (рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ accounts рдордзреНрдпреЗрд╣реА, рдПрдХрд╛ authorization рдкрд╛рдпрд░реАрд╕рд╣). - Hybrid DNS тАФ Route 53 Resolver inbound endpoints рдореБрд│реЗ office рд▓рд╛ VPC рдЪреА phone book рд╡рд┐рдЪрд╛рд░рддрд╛ рдпреЗрддреЗ; forwarding rules рд╕рд╣ outbound endpoints рдореБрд│реЗ VPC рд▓рд╛ office рдЪреА phone book рд╡рд┐рдЪрд╛рд░рддрд╛ рдпреЗрддреЗ.
- DHCP options set тАФ instances рдирд╛ рдХреЛрдгрддреЗ DNS servers рдЖрдгрд┐ domain name рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рддреЗ рд╕рд╛рдВрдЧрддреЗ; default Amazon resolver рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдкрддреНрддреЗ рдмрджрд▓рддрд╛рдд рдЖрдгрд┐ рдирд╛рд╡реЗ рдмрджрд▓реВ рдирдпреЗрдд. Fail over рд╣реЛрдгрд╛рд▒реНрдпрд╛ database рд▓рд╛ рдирд╡рд╛ IP рдорд┐рд│рддреЛ;
db.school.internal рддрд░реАрд╣реА рдЪрд╛рд▓рддреЗ. рдЖрдгрд┐ рдХрд╛рд░рдг рдЦрд╛рдЬрдЧреА рдирд╛рд╡реЗ рдмрд╛рд╣реЗрд░ рдлреБрдЯреВ рдирдпреЗрдд: private hosted zone
рддреБрдордЪрд╛ рдЕрдВрддрд░реНрдЧрдд рдирдХрд╛рд╢рд╛ рддреБрдореНрд╣реА рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ VPCs рдЪреНрдпрд╛ рдЖрддрдЪ рдареЗрд╡рддреЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
vpc/demo.py рдордзрд▓реЗ dns() resolver
ipaddress.ip_network(VPC)[2] рдЕрд╕рд╛ рдХрд╛рдврддреЗ рдЖрдгрд┐ рдПрдХрд╛ рдЫреЛрдЯреНрдпрд╛ private zone рдордзреНрдпреЗ рдирд╛рд╡реЗ рд╢реЛрдзрддреЗ. рд╢реЗрд╡рдЯрдЪреА
рдУрд│ partner VPC рдордзреВрди рд╡рд┐рдЪрд╛рд░рддреЗ, рдЬреНрдпрд╛рдЪреНрдпрд╛рд╢реА zone associate рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реА. рдЦрд╛рд▓рдЪрд╛ snippet рддреАрдЪ zone
рд╕реНрдкрд╖реНрдЯ association list рд╕рд╣ рдмрд╛рдВрдзрддреЛ, рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА partner рд▓рд╛ рдЬреЛрдбреВ рд╢рдХрддрд╛.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 vpc/demo.py dns
python3 - <<'EOF'
import ipaddress
for vpc in ("10.20.0.0/16", "10.30.0.0/16", "172.31.0.0/16", "192.168.4.0/22"):
print(vpc.ljust(15), "resolver", ipaddress.ip_network(vpc)[2])
EOF
python3 - <<'EOF'
zone = {"name": "school.internal", "vpcs": {"school"}, "records": {"db.school.internal": "10.20.96.15"}}
def resolve(name, from_vpc):
if from_vpc not in zone["vpcs"]: return "NXDOMAIN тАФ zone not associated with " + from_vpc
return zone["records"].get(name, "NXDOMAIN тАФ no such record")
print(resolve("db.school.internal", "school"))
print(resolve("db.school.internal", "partner"))
zone["vpcs"].add("partner") # associate the zone with the partner VPC too
print(resolve("db.school.internal", "partner"))
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
dns рд╣реЗ рдЫрд╛рдкрддреЗ:
тФАтФА every VPC has a resolver at base + 2 = 10.20.0.2 (and 169.254.169.253); enableDnsSupport + enableDnsHostnames on
db.school.internal тЖТ 10.20.96.15
app.school.internal тЖТ 10.20.48.25
db.school.internal (from the partner VPC) тЖТ no answer тАФ private zone not associated with that VPC
рдкрд╣рд┐рд▓рд╛ snippet resolver 10.20.0.2, 10.30.0.2, 172.31.0.2 рдЖрдгрд┐
192.168.4.2 рдЫрд╛рдкрддреЛ. рджреБрд╕рд░рд╛ рдЖрдзреА 10.20.96.15, рдордЧ
NXDOMAIN тАФ zone not associated with partner, рдЖрдгрд┐ partner associate рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдкреБрдиреНрд╣рд╛ 10.20.96.15
рдЫрд╛рдкрддреЛ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рдХреЛрдгрддреНрдпрд╛рд╣реА VPC рдЪреА phone book рддреБрдореНрд╣реА рддреНрдпрд╛рдЪреНрдпрд╛ CIDR рд╡рд░реВрди рд╢реЛрдзреВ рд╢рдХрддрд╛, рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ рдХреА рдЦрд╛рдЬрдЧреА рдирд╛рд╡ рдлрдХреНрдд рддрд┐рдереЗрдЪ рдЙрддреНрддрд░ рджреЗрддреЗ рдЬрд┐рдереЗ рддреНрдпрд╛рдЪреА zone associate рдХреЗрд▓реЗрд▓реА рдЕрд╕рддреЗ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдирд╡реНрдпрд╛ VPC рдордзреНрдпреЗ
enableDnsHostnamesрдмрдВрдж тАФ private hosted zone рдХрд┐рдВрд╡рд╛ endpoint private DNS "рдЪрд╛рд▓рдд рдирд╛рд╣реА" - peering рдореБрд│реЗ private hosted zones share рд╣реЛрддреАрд▓ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛ тАФ zone рджреБрд╕рд▒реНрдпрд╛ VPC рд╢реА associate рдХрд░рд╛
- host firewall рдордзреНрдпреЗ 169.254.169.253 рдХрд┐рдВрд╡рд╛ base + 2 block рдХрд░рдгреЗ
- рдирд╛рд╡рд╛рдВрдРрд╡рдЬреА database IPs hard-code рдХрд░рдгреЗ
- public zone рд╕рд╛рд░рдЦреНрдпрд╛рдЪ рдирд╛рд╡рд╛рдЪреА private zone, рдЖрдгрд┐ рдордЧ VPC рдЪреНрдпрд╛ рдЖрдд public records рдХрд╛ рдЧрд╛рдпрдм рд╣реЛрддрд╛рдд рдпрд╛рдЪреЗ рдЖрд╢реНрдЪрд░реНрдп
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
Teams рдкреНрд░рддреНрдпреЗрдХ environment рд╕рд╛рдареА рдПрдХ private zone рд╡рд╛рдкрд░рддрд╛рдд (prod.school.internal), рддреА рдЧрд░рдЬ рдЕрд╕рд▓реЗрд▓реНрдпрд╛
рдкреНрд░рддреНрдпреЗрдХ VPC рд╢реА associate рдХрд░рддрд╛рдд, рдЖрдгрд┐ office рд╕реЛрдмрдд share рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдирд╛рд╡рд╛рдВрд╕рд╛рдареА Resolver endpoints рд╡рд╛рдкрд░рддрд╛рдд.
рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд; IDs рдЙрджрд╛рд╣рд░рдгрд╛рджрд╛рдЦрд▓ рдЖрд╣реЗрдд):
aws ec2 modify-vpc-attribute --vpc-id vpc-0123456789abcdef0 --enable-dns-support '{"Value":true}'
aws ec2 modify-vpc-attribute --vpc-id vpc-0123456789abcdef0 --enable-dns-hostnames '{"Value":true}'
aws route53 create-hosted-zone --name school.internal --caller-reference school-2026-09-27 \
--vpc VPCRegion=ap-south-1,VPCId=vpc-0123456789abcdef0
aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z0123456789EXAMPLE \
--vpc VPCRegion=ap-south-1,VPCId=vpc-0partner0000000a
тПня╕П рдкреБрдвреЗ
рднрд╛рдЧреАрджрд╛рд░ рд╢рд╛рд│реЗрд▓рд╛ рдЖрдкрд▓реНрдпрд╛ phone book рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд╣реАрддрд░реА рд╣рд╡реЗ тАФ рддрд┐рд▓рд╛ рдПрдХ corridor рд╣рд╡рд╛. VPC peering рджреЛрди campuses рдЬреЛрдбрддреЗ.
git checkout lesson-09-peering