ЁЯЪк рдзрдбрд╛ 01 тАФ NAT рдХрд╛: рд╢рд╛рд│реЗрдЪреЗ рдлрд╛рдЯрдХ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 01 ┬╖ рдкреБрдвреЗ: lesson-02-how-pat-works
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рд╣рд╛ рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕ рдПрдХрдЪ рдкреНрд░рд╢реНрди рд╕реЛрдбрд╡рддреЛ: private subnet рдордзреАрд▓ servers рдирд╛ internet рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд╛рдпрдЪреЗ рдЕрд╕рддреЗ (updates, package downloads, partner APIs), рдкрдг internet рд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдкрд░реНрдпрдВрдд рдХрдзреАрд╣реА рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрддрд╛ рдХрд╛рдорд╛ рдирдпреЗ. рдпрд╛рдЪреЗ рдЙрддреНрддрд░ рдореНрд╣рдгрдЬреЗ рдЕрд╕реЗ рдлрд╛рдЯрдХ рдЬреЗ рдлреЗрд▒реНрдпрд╛рдВрдирд╛ рдмрд╛рд╣реЗрд░ рдЬрд╛рдК рджреЗрддреЗ рдЖрдгрд┐ рдЙрддреНрддрд░рд╛рдВрдирд╛ рдкрд░рдд рдпреЗрдК рджреЗрддреЗ, рдмрд╛рдХреА рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА: NAT (Network Address Translation). рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕рднрд░ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдгрд╛рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЦрд▒реНрдпрд╛ files:
- nat/gateway.py тАФ рдлрд╛рдЯрдХ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдиреЛрдВрджрд╡рд╣реА: рд╢реБрджреНрдз Python рдордзреНрдпреЗ port address translation рдЪреЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ model (66 рдУрд│реА)
- nat/demo.py тАФ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛, рдкреНрд░рддреНрдпрдХреНрд╖ рдЪрд╛рд▓рд╡реВрди (
python3 nat/demo.py <section>; sections:why pat kinds peraz eip costs alternatives troubleshoot) - nat/test_nat.py тАФ рдлрд╛рдЯрдХрд╛рдЪреНрдпрд╛ рдирд┐рдпрдорд╛рдВрд╡рд░рдЪреНрдпрд╛ 8 рддрдкрд╛рд╕рдгреНрдпрд╛
- demo-output.txt тАФ рд╕рдВрдкреВрд░реНрдг demo рдиреАрдЯ рдЪрд╛рд▓рд▓реНрдпрд╛рд╡рд░ рдХрд╛рдп рдЫрд╛рдкрд▓реЗ рдЬрд╛рддреЗ
ЁЯОТ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЖрдзреА: рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд Python 3 рд▓рд╛рдЧрддреЗ, рдмрд╛рдХреА рдХрд╛рд╣реА рдирд╛рд╣реА тАФ AWS account рдирдХреЛ,
pip installрдирдХреЛ.gateway.pyрд╣реЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ model рдЖрд╣реЗ, router рдирд╛рд╣реА: рддреЗ AWS NAT gateway documentation рдордзреАрд▓ рдЖрдХрдбреЗ рдкрд╛рд│рддреЗ (рдкреНрд░рддреНрдпреЗрдХ IP рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ destination рд╕рд╛рдареА 55,000 connections, 350-second idle timeout), рдкрдг рдЦрд░реЗ packets рд╣рд▓рд╡рдд рдирд╛рд╣реА. рддреНрдпрд╛рддрд▓реНрдпрд╛ рдХрд┐рдорддреА рдЙрджрд╛рд╣рд░рдг рдХрд┐рдорддреА рдЖрд╣реЗрдд (us-east-1) тАФ рдиреЗрд╣рдореА AWS pricing page рддрдкрд╛рд╕рд╛. рдЦрд▒реНрдпрд╛ account рд╡рд░ рдЕрд╢реА рдЦреВрдг рдЕрд╕рд▓реЗрд▓реНрдпрд╛ commands рдирд╛ AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд, рдЖрдгрд┐ NAT gateway рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕реЗрдкрд░реНрдпрдВрдд рджрд░ рддрд╛рд╕рд╛рд▓рд╛ рдкреИрд╕реЗ рд▓рд╛рдЧрддрд╛рдд.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдПрдХрд╛ рд╢рд╛рд│реЗрд▓рд╛ рдПрдХ private wing рдЖрд╣реЗ ЁЯПл. рдЖрддрд▓реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛рдВрдордзреНрдпреЗ private рдмрд╛рдХ рдХреНрд░рдорд╛рдВрдХ рдЖрд╣реЗрдд тАФ "рдЦреЛрд▓реА 48 рдордзреАрд▓ рдмрд╛рдХ 25". рд╢рд╛рд│реЗрдмрд╛рд╣реЗрд░ рдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рдВрдирд╛ рдХрд╛рд╣реАрдЪ рдЕрд░реНрде рдирд╛рд╣реА. рдЧрд╛рд╡рд╛рддрд▓реЗ рджреБрдХрд╛рди "рдмрд╛рдХ 25" рд▓рд╛ рдкрддреНрд░ рдкрд╛рдард╡реВ рд╢рдХрдд рдирд╛рд╣реА.
рдореНрд╣рдгреВрди рдмрд╛рд╣реЗрд░ рдЬрд╛рдгрд╛рд░реА рдкреНрд░рддреНрдпреЗрдХ рдлреЗрд░реА рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдлрд╛рдЯрдХрд╛рддреВрди рдЬрд╛рддреЗ ЁЯЪк. рдлрд╛рдЯрдХрд╛рд╡рд░ рдПрдХ рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рдЙрднрд╛ рдЕрд╕рддреЛ, рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдПрдХ рдиреЛрдВрджрд╡рд╣реА рдЕрд╕рддреЗ ЁЯУТ:
- рдПрдХ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА рджреБрдХрд╛рдирд╛рдд рдЬрд╛рддреЗ. рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рдиреЛрдВрджрд╡рд╣реАрдд рд▓рд┐рд╣рд┐рддреЛ: "рдмрд╛рдХ 25 рд╡рд░рдЪреА рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА рджреБрдХрд╛рдирд╛рдд рдЧреЗрд▓реА". рддрд┐рдЪреЗ рдкрддреНрд░ рд╢рд╛рд│реЗрдЪрд╛ рдкрддреНрддрд╛ рдШреЗрдКрди рдмрд╛рд╣реЗрд░ рдкрдбрддреЗ.
- рджреБрдХрд╛рди рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ рдЙрддреНрддрд░ рд▓рд┐рд╣рд┐рддреЗ. рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рдиреЛрдВрджрд╡рд╣реАрдд рддреА рдУрд│ рд╢реЛрдзрддреЛ рдЖрдгрд┐ рдЙрддреНрддрд░ рдмрд╛рдХ 25 рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд╡рддреЛ.
- рдПрдХ рдЕрдиреЛрд│рдЦреА рдорд╛рдгреВрд╕ рджрд╛рд░ рдареЛрдард╛рд╡рддреЛ рдЖрдгрд┐ рдореНрд╣рдгрддреЛ "рдорд▓рд╛ рдмрд╛рдХ 25 рдХрдбреЗ рдЬрд╛рдК рджреНрдпрд╛". рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рдиреЛрдВрджрд╡рд╣реАрдд рдкрд╛рд╣рддреЛ. рдЖрддрд▓реНрдпрд╛ рдХреЛрдгреАрд╣реА рдпрд╛ рдЕрдиреЛрд│рдЦреА рдорд╛рдгрд╕рд╛рд▓рд╛ рдмреЛрд▓рд╛рд╡рд▓реЗрд▓реЗ рдирд╛рд╣реА. рджрд╛рд░ рдмрдВрджрдЪ рд░рд╛рд╣рддреЗ.
рдмрд╛рд╣реЗрд░ рдЬрд╛рдгреЗ: рд╣реЛ. рдЙрддреНрддрд░реЗ рдкрд░рдд рдпреЗрдгреЗ: рд╣реЛ. рдЕрдиреЛрд│рдЦреА рд▓реЛрдХрд╛рдВрдиреА рдЖрдд рдпреЗрдгреЗ: рдХрдзреАрдЪ рдирд╛рд╣реА. рд╣реЗрдЪ NAT.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
desk["ЁЯкС private desk<br/>10.20.48.25:50001"]
gate["ЁЯЪк NAT gateway<br/>public IP 13.232.10.20<br/>ЁЯУТ register"]
pypi["ЁЯМР pypi.org<br/>151.101.0.223:443"]
stranger["ЁЯХ╡я╕П stranger<br/>198.51.100.9"]
desk -->|"1 trip out"| gate
gate -->|"2 leaves as 13.232.10.20:1024"| pypi
pypi -->|"3 answer back тЖТ row found"| gate
gate -->|"4 handed to the desk"| desk
stranger -.->|"5 knocks тЖТ no row"| drop["ЁЯЪл dropped"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/nat/lesson-diagrams.html#l01
тЭУ рдХрд╛рдп
- Private address тАФ private ranges рдордзреАрд▓ IPv4 address (
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16). VPC рд╕рд╣рд╕рд╛ рд╣реЗрдЪ рд╡рд╛рдкрд░рддреЗ, рдЬрд╕реЗ10.20.0.0/16. Internet рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ route рдХрд░рдд рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ рдЙрддреНрддрд░рд╛рд▓рд╛ рд╕реНрд╡рддрдГрд╣реВрди рдкрд░рддреАрдЪрд╛ рдорд╛рд░реНрдЧ рд╕рд╛рдкрдбрдд рдирд╛рд╣реА. - Private subnet тАФ рдЕрд╕реЗ subnet рдЬреНрдпрд╛рдЪреНрдпрд╛ route table рдордзреНрдпреЗ internet gateway рдХрдбреЗ рдЬрд╛рдгрд╛рд░рд╛ route рдирд╕рддреЛ. Internet рд╡рд░рдЪреЗ рдХрд╛рд╣реАрд╣реА рддреНрдпрд╛рдЪреНрдпрд╛рдкрд░реНрдпрдВрдд рдереЗрдЯ рдкреЛрд╣реЛрдЪреВ рд╢рдХрдд рдирд╛рд╣реА.
- NAT (Network Address Translation) тАФ рдмрд╛рд╣реЗрд░ рдЬрд╛рддрд╛рдирд╛ packet рдЪрд╛ source address рдмрджрд▓рдгреЗ (private рдмрд╛рдХ тЖТ рдлрд╛рдЯрдХрд╛рдЪрд╛ public address), рддреЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреЗ, рдЖрдгрд┐ рдкрд░рдд рдпреЗрддрд╛рдирд╛ рдЙрддреНрддрд░ рдкреБрдиреНрд╣рд╛ рдмрджрд▓рдгреЗ.
- NAT gateway тАФ AWS рдЪреЗ managed рдлрд╛рдЯрдХ. Public NAT gateway public subnet рдордзреНрдпреЗ рдмрд╕рддреЛ,
рддреНрдпрд╛рд▓рд╛ Elastic IP рдЕрд╕рддреЛ, рдЖрдгрд┐ private subnets рдЪреНрдпрд╛ route tables
0.0.0.0/0рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдкрд╛рдард╡рддрд╛рдд. (Private NAT gateway рд╕реБрджреНрдзрд╛ рдЕрд╕рддреЛ тАФ рдзрдбрд╛ 07.) - рдлрдХреНрдд outbound тАФ connection рдЖрддреВрди рд╕реБрд░реВ рд╡реНрд╣рд╛рдпрд▓рд╛рдЪ рд╣рд╡реЗ. рддреНрдпрд╛рдЪреА рдЙрддреНрддрд░реЗ рдкрд░рдд рдпреЗрддрд╛рдд. рдмрд╛рд╣реЗрд░реВрди рд╕реБрд░реВ рдЭрд╛рд▓реЗрд▓реНрдпрд╛ connection рд▓рд╛ рдиреЛрдВрджрд╡рд╣реАрдд рдУрд│ рд╕рд╛рдкрдбрдд рдирд╛рд╣реА рдЖрдгрд┐ рддреЗ drop рд╣реЛрддреЗ.
- Egress тАФ рддреБрдордЪреНрдпрд╛ network рдордзреВрди рдмрд╛рд╣реЗрд░ рдЬрд╛рдгрд╛рд░рд╛ traffic. "Internet egress" рд╣рд╛ рдпрд╛ рдХреЛрд░реНрд╕рдЪрд╛ рд╡рд┐рд╖рдп рдЖрд╣реЗ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг databases, app servers рдЖрдгрд┐ batch jobs рдпрд╛рдВрдЪреА рдЬрд╛рдЧрд╛ private subnets рдордзреНрдпреЗрдЪ рдЖрд╣реЗ: internet рд╡рд░рдЪреНрдпрд╛ рдХреЛрдгрд╛рд▓рд╛рд╣реА рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА connection рдЙрдШрдбрддрд╛ рдпреЗрдК рдирдпреЗ. рдкрдг рддреНрдпрд╛рдЪ servers рдирд╛ OS patches рдЖрдгрд╛рд╡реЗ рд▓рд╛рдЧрддрд╛рдд, pypi.org рдХрд┐рдВрд╡рд╛ npm рд╡рд░реВрди packages рдШреНрдпрд╛рд╡реЗ рд▓рд╛рдЧрддрд╛рдд, рдЖрдгрд┐ payment рдХрд┐рдВрд╡рд╛ SMS APIs call рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддрд╛рдд. "рдлрдХреНрдд updates download рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА" рддреНрдпрд╛рдВрдирд╛ public IPs рджреЗрдКрди public subnet рдордзреНрдпреЗ рдареЗрд╡рд▓реЗ рддрд░ рджрд╛рд░ рджреЛрдиреНрд╣реА рдмрд╛рдЬреВрдВрдиреА рдЙрдШрдбрддреЗ. NAT рддреЗ рдлрдХреНрдд рдПрдХрд╛рдЪ рдмрд╛рдЬреВрдиреЗ рдЙрдШрдбрддреЛ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
nat/demo.py рдордзреАрд▓ why() рдПрдХ public IP рдЕрд╕рд▓реЗрд▓реЗ рдПрдХ рдлрд╛рдЯрдХ рддрдпрд╛рд░ рдХрд░рддреЗ, NatGateway.send()
рдиреЗ рдПрдХрд╛ рдмрд╛рдХрд╛рд▓рд╛ pypi.org рдХрдбреЗ рдмрд╛рд╣реЗрд░ рдкрд╛рдард╡рддреЗ, рдЖрдгрд┐ рдордЧ NatGateway.reply() рдиреЗ рдПрдХрд╛ рдЕрдиреЛрд│рдЦреА рдорд╛рдгрд╕рд╛рд▓рд╛ рдареЛрдард╛рд╡реВ рджреЗрддреЗ.
nat/gateway.py рдордзреНрдпреЗ send() рд╣реЗ self.table (рдиреЛрдВрджрд╡рд╣реА) рдордзреНрдпреЗ рдПрдХ рдУрд│ рд▓рд┐рд╣рд┐рддреЗ рдЖрдгрд┐
public address рд╡ port рдкрд░рдд рджреЗрддреЗ; reply() рддреА рдУрд│ рд╢реЛрдзрддреЗ рдЖрдгрд┐ private рдмрд╛рдХ рдкрд░рдд рджреЗрддреЗ, рдХрд┐рдВрд╡рд╛ drop рдореЛрдЬреВрди
None рдкрд░рдд рджреЗрддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 nat/demo.py why
python3 - <<'EOF'
import sys; sys.path.insert(0, "nat"); from gateway import NatGateway
PYPI = ("151.101.0.223", 443, "tcp")
STRANGER = ("198.51.100.9", 443, "tcp")
g = NatGateway("nat-a", ["13.232.10.20"])
ip, port = g.send(("10.20.48.25", 50001), PYPI)
print("the desk leaves as:", ip, port)
print("pypi answers:", g.reply(ip, port, PYPI))
print("stranger on the same port:", g.reply(ip, port, STRANGER))
print("stranger on port 8080:", g.reply(ip, 8080, STRANGER))
print("rows:", len(g.table), "dropped:", g.dropped)
EOF
python3 nat/test_nat.py
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
why рд╣реЗ app 10.20.48.25:50001 тЖТ pypi.org leaves as 13.232.10.20:1024 рдЖрдгрд┐
a stranger knocks on 13.232.10.20:2222 тЖТ dropped тАФ nobody inside asked рдЫрд╛рдкрддреЗ.
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
the desk leaves as: 13.232.10.20 1024
pypi answers: ('10.20.48.25', 50001)
stranger on the same port: None
stranger on port 8080: None
rows: 1 dropped: 2
рддрд┐рд╕рд░реА рдУрд│ рдкрд╛рд╣рд╛: рдЕрдиреЛрд│рдЦреА рдорд╛рдгрд╕рд╛рдиреЗ рдмрд╛рдХ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рддреНрдпрд╛рдЪ port рд╡рд░ рдареЛрдард╛рд╡рд▓реЗ, рдЖрдгрд┐ рддрд░реАрд╣реА
рддреЛ drop рдЭрд╛рд▓рд╛. рдиреЛрдВрджрд╡рд╣реАрддреАрд▓ рдУрд│ рд╕рд╛рдВрдЧрддреЗ "port 1024, pypi.org рд╕рд╛рдареА". рдЗрддрд░ рдХреЛрдгрд╛рдХрдбреВрди рдЖрд▓реЗрд▓реЗ рдЙрддреНрддрд░
рдЬреБрд│рдд рдирд╛рд╣реА. Tests 8/8 passed рдиреЗ рд╕рдВрдкрддрд╛рдд.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рдлрд╛рдЯрдХрд╛рдорд╛рдЧрдЪрд╛ рдмрд╛рдХ рдмрд╛рд╣реЗрд░ рдЬрд╛рдКрди рдЖрдкрд▓реЗ рдЙрддреНрддрд░ рдкрд░рдд рдорд┐рд│рд╡реВ рд╢рдХрддреЛ тАФ рдЖрдгрд┐ рдЕрдиреЛрд│рдЦреА рдорд╛рдгреВрд╕ рдЖрддрд▓реНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рд╕рдВрд╡рд╛рдж рд╕реБрд░реВ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рд╡рд╛рдкрд░рд╛рдд рдЕрд╕рд▓реЗрд▓рд╛ port рдЕрдВрджрд╛рдЬрд╛рдиреЗ рдУрд│рдЦрд▓рд╛ рддрд░реАрд╕реБрджреНрдзрд╛ рдирд╛рд╣реА.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдлрдХреНрдд updates download рдХрд░рддрд╛ рдпрд╛рд╡реНрдпрд╛рдд рдореНрд╣рдгреВрди servers рдирд╛ public IPs рджреЗрдКрди public subnet рдордзреНрдпреЗ рдареЗрд╡рдгреЗ
- NAT рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА рдирд┐рдпрдо рд▓рд┐рд╣рд┐рддрд╛ рдЕрд╕рд╛ firewall рдЖрд╣реЗ рдЕрд╕реЗ рд╕рдордЬрдгреЗ тАФ рддреЛ рдлрдХреНрдд рдЙрддреНрддрд░реЗ рдкрд░рдд рдпреЗрдК рджреЗрддреЛ; servers рд╡рд░ security groups рд╡рд╛рдкрд░рддрдЪ рд░рд╛рд╣рд╛
- NAT gateway private subnet рдордзреНрдпреЗ рдареЗрд╡рдгреЗ тАФ public NAT gateway public subnet рдордзреНрдпреЗрдЪ (internet gateway рдХрдбреЗ route рдЕрд╕рд▓реЗрд▓реНрдпрд╛) рдмрд╕рд╛рдпрд▓рд╛ рд╣рд╡рд╛
- private route table рдордзреАрд▓
0.0.0.0/0 тЖТ nat-тАжroute рд╡рд┐рд╕рд░рдгреЗ тАФ рдлрд╛рдЯрдХ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ, рдкрдг рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдХреЛрдгреА рдЬрд╛рддрдЪ рдирд╛рд╣реА
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд; NAT gateway рддрдпрд╛рд░ рдЭрд╛рд▓реНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдгрд╛рдкрд╛рд╕реВрди рджрд░ рддрд╛рд╕рд╛рд▓рд╛ bill рд▓рд╛рдЧрддреЗ):
aws ec2 allocate-address --domain vpc # the gate's fixed address тЖТ eipalloc-тАж
aws ec2 create-nat-gateway --subnet-id subnet-public-a --allocation-id eipalloc-0abc --connectivity-type public
aws ec2 create-route --route-table-id rtb-private-a --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-0abc
aws ec2 describe-nat-gateways --query 'NatGateways[].[NatGatewayId,State,SubnetId,ConnectivityType]' --output table
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: "internet рд▓рд╛ рд╕реЗрд╡рд╛ рди рджреЗрдгрд╛рд▒реНрдпрд╛ рд╕рдЧрд│реНрдпрд╛рд╕рд╛рдареА private subnets, рдЖрдгрд┐ egress NAT рдордзреВрди" рд╣реАрдЪ AWS network рдЪреА default рд░рдЪрдирд╛ рдЖрд╣реЗ. рдкреБрдврдЪреЗ рд╕рд╛рдд рдзрдбреЗ рддреЗ рдлрд╛рдЯрдХ рдиреАрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдмрджреНрджрд▓ рдЖрд╣реЗрдд: рддреЗ рдХрд╕реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ, рддреЗ рдХреБрдареЗ рдареЗрд╡рд╛рдпрдЪреЗ, рддреНрдпрд╛рдЪрд╛ рдЦрд░реНрдЪ рдХрд┐рддреА рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдмрд┐рдШрдбрддреЗ.
тПня╕П рдкреБрдвреЗ
рдПрдХ рдлрд╛рдЯрдХ, рдПрдХ public address, рд╢реЗрдХрдбреЛ рдмрд╛рдХ. рдЙрддреНрддрд░ рдХреЛрдгрддреНрдпрд╛ рдмрд╛рдХрд╛рдЪреЗ рдЖрд╣реЗ рд╣реЗ рд░рдЦрд╡рд╛рд▓рджрд╛рд░рд╛рд▓рд╛ рдХрд╕реЗ рдХрд│рддреЗ? рдлрд╛рдЯрдХ рдХрд╕реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ (PAT) тАФ рдиреЛрдВрджрд╡рд╣реА, рдУрд│-рдУрд│ рдХрд░реВрди.
git checkout lesson-02-how-pat-works