ЁЯзн рдзрдбрд╛ 07 тАФ NAT рдЪреЗ рдкрд░реНрдпрд╛рдп
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 07 ┬╖ рдорд╛рдЧреЗ: lesson-06-costs ┬╖ рдкреБрдвреЗ: lesson-08-troubleshooting
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ06, рдЖрдгрд┐ рдмрд╛рдХреАрдЪреА рджрд╛рд░реЗ: gateway endpoints, interface endpoints
(PrivateLink), IPv6 рд╕рд╛рдареА egress-only internet gateway, domain allow-lists рд╕рд╛рдареА proxy рдХрд┐рдВрд╡рд╛ AWS Network
Firewall, private NAT gateway, рдЖрдгрд┐ internet рдЕрдЬрд┐рдмрд╛рдд рдирд╛рд╣реА.
nat/demo.py рдордзреАрд▓ alternatives() рд╣рд╛ рдирдХрд╛рд╢рд╛ рдЫрд╛рдкрддреЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкреНрд░рддреНрдпреЗрдХ рдлреЗрд░реАрд▓рд╛ рдореБрдЦреНрдп рдлрд╛рдЯрдХ рд▓рд╛рдЧрдд рдирд╛рд╣реА:
- ЁЯЪЗ рдЧрд╛рд╡рд╛рддрд▓реНрдпрд╛ рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдд (S3, DynamoDB) рдЬрд╛рдпрд▓рд╛: рдПрдХ рдореЛрдлрдд рдмреЛрдЧрджрд╛.
- ЁЯЪк рдирдЧрд░рдкрд╛рд▓рд┐рдХреЗрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдВрдХрдбреЗ (рдЗрддрд░ AWS services): рддреБрдордЪреНрдпрд╛рдЪ рдЗрдорд╛рд░рддреАрдд рдмрд╛рдВрдзрд▓реЗрд▓реЗ рдПрдХ рдЦрд╛рдЬрдЧреА рдмрд╛рдЬреВрдЪреЗ рджрд╛рд░, рдереЛрдбреНрдпрд╛ рд╢реБрд▓реНрдХрд╛рд╕рд╣.
- 6я╕ПтГг рд╢рд╛рд│реЗрдЪреА рдирд╡реА wing рдирд╡реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдкрддреНрддрд╛ (IPv6) рд╡рд╛рдкрд░рддреЗ, рдЬреЛ рдЖрдзреАрдЪ рд╕рдВрдкреВрд░реНрдг рдЬрдЧрд╛рдд рдПрдХрдореЗрд╡ рдЖрд╣реЗ. рдиреЛрдВрджрд╡рд╣реАрдЪреА рдЧрд░рдЬ рдирд╛рд╣реА тАФ рдлрдХреНрдд рдПрдХ рдПрдХрдорд╛рд░реНрдЧреА рджрд╛рд░: рдмрд╛рд╣реЗрд░ рдЬрд╛рдгреЗ рд╣реЛ, рдЕрдиреЛрд│рдЦреА рд▓реЛрдХрд╛рдВрдиреА рдЖрдд рдпреЗрдгреЗ рдирд╛рд╣реА.
- ЁЯУЛ рдлрдХреНрдд рдард░рд╛рд╡рд┐рдХ рджреБрдХрд╛рдирд╛рдВрдирд╛рдЪ рдкрд░рд╡рд╛рдирдЧреА? рдлрд╛рдЯрдХрд╛рд╕рдореЛрд░ рджреБрдХрд╛рдирд╛рдВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдВрдЪреА рдпрд╛рджреА рдЕрд╕рд▓реЗрд▓рд╛ рддрдкрд╛рд╕рдиреАрд╕ рдареЗрд╡рд╛.
- ЁЯПл рдЬреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рд╢рд╛рд│реЗрдЪреЗ рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ рддреБрдордЪреНрдпрд╛рд╢реА рдЬреБрд│рддрд╛рдд рддрд┐рдЪреНрдпрд╛рдХрдбреЗ: рджреЛрди рд╢рд╛рд│рд╛рдВрдордзрд▓реЗ рдПрдХ private рдлрд╛рдЯрдХ, рд░рд╕реНрддреНрдпрд╛рдХрдбреЗ рдирд╛рд╣реА.
- ЁЯФТ рдЬреНрдпрд╛ рдЦреЛрд▓реАрд▓рд╛ рдХрдзреАрдЪ рдмрд╛рд╣реЗрд░ рдЬрд╛рдпрдЪреЗ рдирд╕рддреЗ? рдлрд╛рдЯрдХрдЪ рдирдХреЛ. рд╕рд░реНрд╡рд╛рдд рд╕реНрд╡рд╕реНрдд, рд╕рд░реНрд╡рд╛рдд рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╛рдЯрдХ рдореНрд╣рдгрдЬреЗ рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
desks["ЁЯкС private desks"]
desks -->|"S3 / DynamoDB"| gwe["ЁЯЪЗ gateway endpoint ┬╖ free"]
desks -->|"ECR, STS, SQSтАж"| ife["ЁЯЪк interface endpoint ┬╖ $/h/AZ + $/GB"]
desks -->|"IPv6 out only"| eigw["6я╕ПтГг egress-only IGW"]
desks -->|"listed domains only"| fw["ЁЯУЛ proxy / Network Firewall"] --> nat["ЁЯЪк NAT gateway"]
desks -->|"other private network"| pnat["ЁЯПл private NAT gateway"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/nat/lesson-diagrams.html#l07
тЭУ рдХрд╛рдп
- Gateway endpoint тАФ рдлрдХреНрдд S3 рдЖрдгрд┐ DynamoDB рд╕рд╛рдареА. Prefix list рдХрдбреЗ рдЬрд╛рдгрд╛рд░реА route-table рдордзреАрд▓ рдиреЛрдВрдж. рдореЛрдлрдд. рдлрдХреНрдд рддреНрдпрд╛рдЪ region рдордзреНрдпреЗ.
- Interface endpoint (AWS PrivateLink) тАФ рдПрдХрд╛ service рд╕рд╛рдареА (ECR, STS, SQS, Secrets Manager, CloudWatch Logs, рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ) рддреБрдордЪреНрдпрд╛ subnet рдордзреНрдпреЗ private IP рдЕрд╕рд▓реЗрд▓рд╛ elastic network interface. рдкреНрд░рддреНрдпреЗрдХ AZ рд▓рд╛ рдкреНрд░рддрд┐ рддрд╛рд╕ рдЖрдгрд┐ рдкреНрд░рддрд┐ processed GB charge. Private DNS рдЪрд╛рд▓реВ рдЕрд╕реЗрд▓ рддрд░ service рдЪреЗ рдиреЗрд╣рдореАрдЪреЗ рдирд╛рд╡ private IP рд╡рд░ resolve рд╣реЛрддреЗ. рддреНрдпрд╛рд▓рд╛ security groups рдЕрд╕рддрд╛рдд.
- IPv6 рд▓рд╛ NAT рдирд╛рд╣реА тАФ IPv6 addresses рдЬрдЧрднрд░ unique рдЕрд╕рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ translate рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрдЪ рдирд╕рддреЗ.
"рдлрдХреНрдд outbound" IPv6 рд╕рд╛рдареА
::/0рд╣реЗ egress-only internet gateway рдХрдбреЗ route рдХрд░рд╛: IPv6 connections рдЖрддреВрди рд╕реБрд░реВ рд╣реЛрдКрди рдЙрддреНрддрд░реЗ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛рдд; рдмрд╛рд╣реЗрд░реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реА connections рдЕрдбрд╡рд▓реА рдЬрд╛рддрд╛рдд. - NAT64 / DNS64 тАФ рдлрдХреНрдд-IPv6 subnets рдирд╛ рдлрдХреНрдд-IPv4 destinations рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░: DNS64
рдХреГрддреНрд░рд┐рдо IPv6 addresses (
64:ff9b::/96) рджреЗрддреЗ рдЖрдгрд┐ NAT gateway рддреНрдпрд╛рдВрдЪреЗ IPv4 рдордзреНрдпреЗ translation рдХрд░рддреЛ. - Domain allow-lists тАФ NAT gateway рд▓рд╛ рдлрдХреНрдд IP addresses рджрд┐рд╕рддрд╛рдд. рдлрдХреНрдд
pypi.orgрд▓рд╛ рдкрд░рд╡рд╛рдирдЧреА рджреНрдпрд╛рдпрдЪреА рдЖрдгрд┐ рдмрд╛рдХреА рдХрд╢рд╛рд▓рд╛рдЪ рдирд╛рд╣реА, рддрд░ NAT рдЖрдзреА рдорд╛рд░реНрдЧрд╛рдд forward proxy рдХрд┐рдВрд╡рд╛ AWS Network Firewall (domain rules) рдареЗрд╡рд╛. - Private NAT gateway тАФ
connectivity-type private: Elastic IP рдирд╛рд╣реА, internet рдирд╛рд╣реА. рддреЛ рдЖрдкрд▓реНрдпрд╛ private IP рдордзреНрдпреЗ translate рдХрд░рддреЛ, private-to-private traffic рд╕рд╛рдареА, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде Transit Gateway рдордзреВрди overlapping CIDRs рдЕрд╕рд▓реЗрд▓реНрдпрд╛ VPCs рдордзреНрдпреЗ. - NAT рдирд╛рд╣реА тАФ рдлрдХреНрдд AWS services рд╡рд╛рдкрд░рдгрд╛рд░реЗ workloads рдмрд░реЗрдЪрджрд╛ рдлрдХреНрдд endpoints рд╡рд░, internet рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдорд╛рд░реНрдЧ рдирд╕рддрд╛рдирд╛ рдЪрд╛рд▓реВ рд╢рдХрддрд╛рдд.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг NAT рд╣реЗ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдг рдХрд╛рдорд╛рдЪреЗ рдлрд╛рдЯрдХ рдЖрд╣реЗ: рддреНрдпрд╛рд▓рд╛ рдкреНрд░рддрд┐ GB рдЦрд░реНрдЪ рдпреЗрддреЛ, рддреЗ servers рдирд╛ internet рд╡рд░рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА address рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рджреЗрддреЗ, рдЖрдгрд┐ рддреЗ рдлрдХреНрдд IPv4 рд╕рд╛рдареА рдЖрд╣реЗ. рдЕрдиреЗрдХ рдлреЗрд▒реНрдпрд╛рдВрд╕рд╛рдареА рд╕реНрд╡рд╕реНрдд, рдЕрд░реБрдВрдж рдХрд┐рдВрд╡рд╛ private рджрд╛рд░ рдЬрд╛рд╕реНрдд рдЪрд╛рдВрдЧрд▓реЗ рдЕрд╕рддреЗ. рдпреЛрдЧреНрдп рджрд╛рд░ рдирд┐рд╡рдбрдгреЗ рд╣рд╛ рдЦрд░реНрдЪрд╛рдЪрд╛рд╣реА рдирд┐рд░реНрдгрдп рдЖрд╣реЗ рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪрд╛рд╣реА.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
nat/demo.py рдордзреАрд▓ alternatives() рдкреНрд░рддреНрдпреЗрдХ рдЧрд░рдЬ рдЖрдгрд┐ рддрд┐рдЪреЗ рджрд╛рд░ рдЫрд╛рдкрддреЗ.
nat/gateway.py рдордзреАрд▓ monthly_cost() рд▓рд╛ рддреБрдореНрд╣реА рд╕реНрд╡рддрдГрдЪреЗ hourly рдЖрдгрд┐ per_gb
рджрд┐рд▓реЗ рддрд░ рддреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА "рддрд╛рд╕ + GB" рджрд╛рд░рд╛рдЪреА рдХрд┐рдВрдордд рдХрд╛рдврддреЗ. рдЦрд╛рд▓реА, 3 AZs рдордзреАрд▓ interface endpoint
hourly=0.01, per_gb=0.01 рд╡рд╛рдкрд░рддреЛ тАФ us-east-1 рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд┐рдорддреА.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 nat/demo.py alternatives
python3 - <<'EOF'
import sys; sys.path.insert(0, "nat"); from gateway import monthly_cost
gb_s3, gb_ecr, gb_web = 3000, 1500, 500
print("1 all through 3 NATs $", monthly_cost(3, gb_s3 + gb_ecr + gb_web))
print("2 S3 тЖТ free gateway endpoint $", monthly_cost(3, gb_ecr + gb_web))
ecr = monthly_cost(3, gb_ecr, hourly=0.01, per_gb=0.01) # example: interface endpoint in 3 AZs
print("3 + ECR тЖТ interface endpoint $", round(monthly_cost(3, gb_web) + ecr, 2), f"(endpoint part ${ecr})")
print("4 no internet needed, no NAT $", monthly_cost(0, 0))
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
alternatives рд╕рд╣рд╛ рдУрд│реА рдЫрд╛рдкрддреЗ,
S3 / DynamoDB тЖТ gateway endpoint тАФ free, just a route рдкрд╛рд╕реВрди
nothing on the internet at all тЖТ no NAT тАФ the cheapest and safest gate is none рдкрд░реНрдпрдВрдд.
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
1 all through 3 NATs $ 323.55
2 S3 тЖТ free gateway endpoint $ 188.55
3 + ECR тЖТ interface endpoint $ 157.95 (endpoint part $36.9)
4 no internet needed, no NAT $ 0.0
рдкреНрд░рддреНрдпреЗрдХ рджрд╛рд░рд╛рдиреЗ bill рдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рдХрд╛рдвреВрди рдЯрд╛рдХрд▓рд╛. (ECR image layers S3 рдордзреНрдпреЗ рд╕рд╛рдард╡рд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдд, рдореНрд╣рдгреВрди рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд image pull рдЪрд╛ рдмрд░рд╛рдЪрд╕рд╛ рднрд╛рдЧ S3 gateway endpoint рдордзреВрдирдЪ рдЬрд╛рддреЛ; рдЙрд░рд▓реЗрд▓реНрдпрд╛рд╕рд╛рдареА ECR API endpoints рддрд░реАрд╣реА рд▓рд╛рдЧрддрд╛рдд.)
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
NAT рд╣реЗ рдЕрдиреЗрдХ рджрд╛рд░рд╛рдВрдкреИрдХреА рдПрдХ рджрд╛рд░ рдЖрд╣реЗ; рдкреНрд░рддреНрдпреЗрдХ destination рд╕рд╛рдареА рдпреЛрдЧреНрдп рджрд╛рд░ рдирд┐рд╡рдбрд▓реНрдпрд╛рдиреЗ рдЙрджрд╛рд╣рд░рдгрд╛рддрд▓реЗ bill $323.55 рд╡рд░реВрди $157.95 рд╡рд░ рдЖрд▓реЗ, рдЖрдгрд┐ internet рдЪреА рдЧрд░рдЬ рдирд╕рд▓реЗрд▓реНрдпрд╛ workload рд╕рд╛рдареА рд╢реВрдиреНрдпрд╛рд╡рд░.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- IPv6-enabled subnet рд▓рд╛ NAT рдирд╛рд╣реА рдореНрд╣рдгреВрди рддреЗ private рдЖрд╣реЗ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рдгреЗ тАФ рддреЗ
::/0internet gateway рдХрдбреЗ route рдХрд░рдд рдЕрд╕реЗрд▓ рддрд░ рддреЗ reachable рдЖрд╣реЗ; egress-only IGW рд╡рд╛рдкрд░рд╛ - NAT gateway domain name рдиреБрд╕рд╛рд░ рдЕрдбрд╡реЗрд▓ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛ тАФ рддреНрдпрд╛рд▓рд╛ рдлрдХреНрдд IPs рджрд┐рд╕рддрд╛рдд; proxy рдХрд┐рдВрд╡рд╛ Network Firewall рд╡рд╛рдкрд░рд╛
- рдорд╣рд┐рдиреНрдпрд╛рд▓рд╛ 2 GB рд╡рд╛рд╣реВрди рдиреЗрдгрд╛рд▒реНрдпрд╛ service рд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ AZ рдордзреНрдпреЗ interface endpoints тАФ рддрд╛рд╕рд╛рдЪрд╛ charge NAT рдкреЗрдХреНрд╖рд╛рд╣реА рдЬрд╛рд╕реНрдд рдкрдбрддреЛ
- private NAT gateway рдордзреВрди internet рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдЦрд▒реНрдпрд╛ account рд╡рд░:
aws ec2 create-vpc-endpoint --vpc-id vpc-0abc --vpc-endpoint-type Gateway --service-name com.amazonaws.us-east-1.dynamodb --route-table-ids rtb-private-a rtb-private-b rtb-private-c
aws ec2 create-vpc-endpoint --vpc-id vpc-0abc --vpc-endpoint-type Interface --service-name com.amazonaws.us-east-1.ecr.dkr --subnet-ids subnet-private-a subnet-private-b subnet-private-c --security-group-ids sg-0endpoints --private-dns-enabled
aws ec2 create-egress-only-internet-gateway --vpc-id vpc-0abc
aws ec2 create-route --route-table-id rtb-private-a --destination-ipv6-cidr-block ::/0 --egress-only-internet-gateway-id eigw-0abc
aws ec2 create-nat-gateway --subnet-id subnet-transit-a --connectivity-type private
resource "aws_egress_only_internet_gateway" "v6" {
vpc_id = aws_vpc.main.id
}
resource "aws_route" "private_v6_out" {
route_table_id = aws_route_table.private["a"].id
destination_ipv6_cidr_block = "::/0"
egress_only_gateway_id = aws_egress_only_internet_gateway.v6.id
}
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдЪрд╛рдВрдЧрд▓реА egress рд░рдЪрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░рдЪреЗ destination рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рджрд╛рд░ рдпрд╛рджреАрдд рдорд╛рдВрдбрддреЗ: AWS services endpoints рдордзреВрди, partners NAT рдордзреВрди (рд╕реНрдерд┐рд░ IPs рд╕рд╣), рдмрд╛рдХреА рд╕рдЧрд│реЗ domain allow-list рдордзреВрди тАФ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА.
тПня╕П рдкреБрдвреЗ
рдлрд╛рдЯрдХ рдЪрд╛рд▓рддреЗ. рдПрдХ рджрд┐рд╡рд╕ рддреЗ рдЪрд╛рд▓рдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд: "connection reset", "cannot allocate port". рдлрд╛рдЯрдХрд╛рдЪреЗ troubleshooting тАФ рднрд░рд▓реЗрд▓реНрдпрд╛ рдиреЛрдВрджрд╡рд╣реНрдпрд╛ рдЖрдгрд┐ рд╡рд┐рд╕рд░рд▓реЗрд▓реНрдпрд╛ рдУрд│реА.
git checkout lesson-08-troubleshooting