ЁЯПл The SchoolтА║ЁЯЪк NATтА║ЁЯУТ рдзрдбрд╛ 02 тАФ рдлрд╛рдЯрдХ рдХрд╕реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ (PAT)
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯУТ рдзрдбрд╛ 02 тАФ рдлрд╛рдЯрдХ рдХрд╕реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ (PAT)

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдорд╛рдЧреЗ: lesson-01-why-nat ┬╖ рдкреБрдвреЗ: lesson-03-gateway-vs-instance


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбрд╛ 01, рдЖрдгрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рдиреЛрдВрджрд╡рд╣реА: port address translation (PAT). рдПрдХрдЪ public IP рдЕрдиреЗрдХ private рдмрд╛рдХрд╛рдВрдирд╛ рдкреБрд░рддреЛ, рдЖрдгрд┐ рдлрд╛рдЯрдХ рджреЗрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ port рд╡рд░реВрди рддреЛ рддреНрдпрд╛рдВрдирд╛ рд╡реЗрдЧрд│реЗ рдУрд│рдЦрддреЛ. nat/demo.py рдордзреАрд▓ pat() рдиреЛрдВрджрд╡рд╣реА рдУрд│-рдУрд│ рдХрд░реВрди рдЫрд╛рдкрддреЗ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА рдПрдХрд╛рдЪ рдлрд╛рдЯрдХрд╛рддреВрди рдмрд╛рд╣реЗрд░ рдЬрд╛рддрд╛рдд. рддреНрдпрд╛рдВрдЪреА рд╕рдЧрд│реА рдкрддреНрд░реЗ рдПрдХрд╛рдЪ рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рдиреЗ рдмрд╛рд╣реЗрд░ рдкрдбрддрд╛рдд. рдордЧ рдХреЛрдгрддреЗ рдЙрддреНрддрд░ рдХреБрдареЗ рдЬрд╛рдпрдЪреЗ рд╣реЗ рд░рдЦрд╡рд╛рд▓рджрд╛рд░рд╛рд▓рд╛ рдХрд╕реЗ рдХрд│рддреЗ?

рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдлреЗрд░реАрд▓рд╛ рдПрдХ рддрд┐рдХреАрдЯ рдХреНрд░рдорд╛рдВрдХ ЁЯОЯя╕П рджреЗрддреЛ рдЖрдгрд┐ рддреЛ рдиреЛрдВрджрд╡рд╣реАрдд рд▓рд┐рд╣рд┐рддреЛ:

рддрд┐рдХреАрдЯ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА рдХреБрдареЗ рдЧреЗрд▓реА
1024 рдмрд╛рдХ 25, рдЦреЛрд▓реА 48 рдкреБрд╕реНрддрдХрд╛рдВрдЪреЗ рджреБрдХрд╛рди
1025 рдмрд╛рдХ 7, рдЦреЛрд▓реА 64 рдкреБрд╕реНрддрдХрд╛рдВрдЪреЗ рджреБрдХрд╛рди
1024 рдмрд╛рдХ 25, рдЦреЛрд▓реА 48 рд╕рдВрдЧреНрд░рд╣рд╛рд▓рдп

рдЙрддреНрддрд░ рдкрд░рдд рдпреЗрддреЗ рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЕрд╕рддреЗ "рд╢рд╛рд│реЗрдЪрд╛ рдкрддреНрддрд╛, рддрд┐рдХреАрдЯ 1025, рдкреБрд╕реНрддрдХрд╛рдВрдЪреНрдпрд╛ рджреБрдХрд╛рдирд╛рдХрдбреВрди". рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рддреА рдУрд│ рд╡рд╛рдЪрддреЛ рдЖрдгрд┐ рддреЗ рдмрд╛рдХ 7 рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд╡рддреЛ. рджреЛрди рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрдВрдЪрд╛ private рдЦрд┐рд╕рд╛ рдХреНрд░рдорд╛рдВрдХ рдПрдХрдЪ рдЕрд╕рд▓рд╛ рддрд░реА рдЪрд╛рд▓рддреЗ тАФ рддрд┐рдХрд┐рдЯреЗ рд╡реЗрдЧрд│реА рдЕрд╕рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рдЙрддреНрддрд░реЗ рдХрдзреАрдЪ рдПрдХрдореЗрдХрд╛рдВрдд рдорд┐рд╕рд│рдд рдирд╛рд╣реАрдд.

рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛, рддрд┐рдХреАрдЯ 1024 рджреЛрдирджрд╛ рдЖрд▓реЗ рдЖрд╣реЗ. рддреЗ рдЪрд╛рд▓рддреЗ: рдПрдХ рдлреЗрд░реА рдкреБрд╕реНрддрдХрд╛рдВрдЪреНрдпрд╛ рджреБрдХрд╛рдирд╛рдд рдЧреЗрд▓реА, рджреБрд╕рд░реА рд╕рдВрдЧреНрд░рд╣рд╛рд▓рдпрд╛рдд. рд░рдЦрд╡рд╛рд▓рджрд╛рд░ рддрд┐рдХреАрдЯ рдЖрдгрд┐ рдЙрддреНрддрд░ рдХреЛрдг рд▓рд┐рд╣рд┐рдд рдЖрд╣реЗ рд╣реЗ рджреЛрдиреНрд╣реА рдЬреБрд│рд╡рддреЛ.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    d1["ЁЯкС 10.20.48.25:50001"]
    d2["ЁЯкС 10.20.64.7:50001"]
    gate["ЁЯЪк 13.232.10.20<br/>ЁЯУТ register<br/>1024 тЖФ 10.20.48.25:50001 (pypi)<br/>1025 тЖФ 10.20.64.7:50001 (pypi)"]
    pypi["ЁЯМР pypi 151.101.0.223:443"]
    d1 -->|"1 out"| gate
    d2 -->|"1 out"| gate
    gate -->|"2 :1024 and :1025"| pypi
    pypi -->|"3 answer to :1025"| gate
    gate -->|"4 row 1025 тЖТ 10.20.64.7"| d2

ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/nat/lesson-diagrams.html#l02

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

рдХрд╛рд░рдг machines рдкреЗрдХреНрд╖рд╛ public IPv4 addresses рдЦреВрдкрдЪ рдХрдореА рдЖрд╣реЗрдд. PAT рдореБрд│реЗ рд╕рдВрдкреВрд░реНрдг VPC рдПрдХрдЪ address (рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реА) рд╡рд╛рдкрд░реВ рд╢рдХрддреЗ, рдЖрдгрд┐ NAT "рдлрдХреНрдд outbound" рдЕрд╕рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдгрд╣реА рд╣реАрдЪ рдиреЛрдВрджрд╡рд╣реА рдЖрд╣реЗ: рдУрд│ рдирд╛рд╣реА, рддрд░ рдкреНрд░рд╡реЗрд╢ рдирд╛рд╣реА. рдкреБрдвреЗ рддреБрдореНрд╣реА "connection reset" рдХрд┐рдВрд╡рд╛ "cannot allocate port" errors debug рдХрд░рд╛рд▓ (рдзрдбрд╛ 08), рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рд╣реАрдЪ рдиреЛрдВрджрд╡рд╣реА debug рдХрд░рдд рдЕрд╕рд╛рд▓.

ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)

nat/gateway.py рдордзреНрдпреЗ send() рдЖрдзреА рддреНрдпрд╛рдЪ src рдЖрдгрд┐ dst рдЪреА рдЖрдзреАрдкрд╛рд╕реВрди рдЕрд╕рд▓реЗрд▓реА рдУрд│ рд╢реЛрдзрддреЗ рдЖрдгрд┐ рддреА рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░рддреЗ. рддреА рдирд╕реЗрд▓, рддрд░ рддреНрдпрд╛ IP рд╡рд░ рддреНрдпрд╛ destination рдХрдбреЗ рдЖрдзреАрдЪ рд╡рд╛рдкрд░рд╛рдд рдирд╕рд▓реЗрд▓рд╛ рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдореЛрдХрд│рд╛ port (1024 рдкрд╛рд╕реВрди рд╡рд░) рдШреЗрддреЗ, рдУрд│ рд▓рд┐рд╣рд┐рддреЗ рдЖрдгрд┐ (public_ip, public_port) рдкрд░рдд рджреЗрддреЗ. nat/demo.py рдордзреАрд▓ pat() рддреАрди connections рдкрд╛рдард╡рддреЗ рдЖрдгрд┐ g.table рдЫрд╛рдкрддреЗ.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 nat/demo.py pat
python3 - <<'EOF'
import sys; sys.path.insert(0, "nat"); from gateway import NatGateway
GITHUB = ("140.82.112.3", 443, "tcp")
g = NatGateway("nat-a", ["13.232.10.20"])
for desk in ("10.20.48.25", "10.20.64.7", "10.20.80.9"):
    print(desk, "тЖТ", g.send((desk, 50001), GITHUB))
print("same desk again тЖТ", g.send(("10.20.64.7", 50001), GITHUB), "┬╖ rows:", len(g.table))
print("answer on 1026  тЖТ", g.reply("13.232.10.20", 1026, GITHUB))
print("answer on 1027  тЖТ", g.reply("13.232.10.20", 1027, GITHUB))
EOF

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

pat рддреАрди translations рдЫрд╛рдкрддреЗ:

   10.20.48.25:50001  тЖТ 151.101.0.223:443  written as 13.232.10.20:1024
   10.20.64.7:50001   тЖТ 151.101.0.223:443  written as 13.232.10.20:1025
   10.20.48.25:50002  тЖТ 140.82.112.3:443   written as 13.232.10.20:1024

рдордЧ рдиреЛрдВрджрд╡рд╣реА, рдЖрдгрд┐ answer to 13.232.10.20:1025 from pypi тЖТ back to ('10.20.64.7', 50001). рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:

10.20.48.25 тЖТ ('13.232.10.20', 1024)
10.20.64.7 тЖТ ('13.232.10.20', 1025)
10.20.80.9 тЖТ ('13.232.10.20', 1026)
same desk again тЖТ ('13.232.10.20', 1025) ┬╖ rows: 3
answer on 1026  тЖТ ('10.20.80.9', 50001)
answer on 1027  тЖТ None

рддреАрди рдмрд╛рдХрд╛рдВрдиреА рдПрдХрдЪ private port 50001 рд╡рд╛рдкрд░рд▓рд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рддреАрди рд╡реЗрдЧрд╡реЗрдЧрд│реЗ public ports рдорд┐рд│рд╛рд▓реЗ. рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рд▓реНрдпрд╛рдиреЗ рдирд╡реА рдУрд│ рдЬреЛрдбрд▓реА рдЧреЗрд▓реА рдирд╛рд╣реА. Port 1027 рдХрдзреА рджрд┐рд▓рд╛рдЪ рдЧреЗрд▓рд╛ рдирд╡реНрд╣рддрд╛, рдореНрд╣рдгреВрди рддреНрдпрд╛рдЪреЗ "рдЙрддреНрддрд░" drop рдЭрд╛рд▓реЗ.

ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ

рдПрдХрдЪ public IP рдЕрдиреЗрдХ рдмрд╛рдХрд╛рдВрдирд╛ рдкреБрд░рддреЛ, рдХрд╛рд░рдг рдлрд╛рдЯрдХ ports рд╡рд╛рдЯрддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рд╣реВрди рдареЗрд╡рддреЗ; рдиреЛрдВрджрд╡рд╣реА рд╣реА рдЙрддреНрддрд░рд╛рдВрд╕рд╛рдареАрдЪреА рдкрддреНрддреНрдпрд╛рдВрдЪреА рд╡рд╣реА рдЖрд╣реЗ рдЖрдгрд┐ рдЕрдиреЛрд│рдЦреА рд▓реЛрдХрд╛рдВрд╡рд┐рд░реБрджреНрдзрдЪреЗ рдХреБрд▓реВрдкрд╣реА.

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд

рдЦрд▒реНрдпрд╛ account рд╡рд░ рддреБрдореНрд╣реА NAT gateway рдЪреА рдиреЛрдВрджрд╡рд╣реА рдереЗрдЯ рд╡рд╛рдЪреВ рд╢рдХрдд рдирд╛рд╣реА тАФ рддреА рддреБрдореНрд╣рд╛рд▓рд╛ metrics рдЖрдгрд┐ flow logs рдордзреВрди рджрд┐рд╕рддреЗ. NAT gateway рдЪреНрдпрд╛ network interface рд╡рд░рдЪреЗ VPC Flow Logs рдкреНрд░рддреНрдпреЗрдХ translation рдЪреА private рдмрд╛рдЬреВ рдЖрдгрд┐ public рдмрд╛рдЬреВ рджрд╛рдЦрд╡рддрд╛рдд:

aws ec2 describe-nat-gateways --nat-gateway-ids nat-0abc --query 'NatGateways[].NatGatewayAddresses[].[PublicIp,PrivateIp,NetworkInterfaceId]'
aws ec2 create-flow-logs --resource-type NetworkInterface --resource-ids eni-0abc --traffic-type ALL --log-destination-type cloud-watch-logs --log-group-name nat-flow-logs --deliver-logs-permission-arn arn:aws:iam::111122223333:role/flow-logs
aws cloudwatch get-metric-statistics --namespace AWS/NATGateway --metric-name ActiveConnectionCount --dimensions Name=NatGatewayId,Value=nat-0abc --start-time 2026-09-27T00:00:00Z --end-time 2026-09-27T06:00:00Z --period 300 --statistics Maximum

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: ActiveConnectionCount рдореНрд╣рдгрдЬреЗ рдпрд╛ рдХреНрд╖рдгреА рдиреЛрдВрджрд╡рд╣реАрдЪрд╛ рдЖрдХрд╛рд░. рдХреЛрдгрддреЗрд╣реА business рдХрд╛рд░рдг рдирд╕рддрд╛рдирд╛ рддреЛ рд╡рд╛рдврдд рдЧреЗрд▓рд╛, рддрд░ рдЖрддрд▓реЗ рдХрд╛рд╣реАрддрд░реА connections рдЙрдШрдбрдд рдЖрд╣реЗ рдЖрдгрд┐ рдмрдВрдж рдХрд░рдд рдирд╛рд╣реА.

тПня╕П рдкреБрдвреЗ

AWS рджреЛрди рдкреНрд░рдХрд╛рд░рдЪреА рдлрд╛рдЯрдХреЗ рджреЗрддреЗ: рдПрдХ AWS рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдЪрд╛рд▓рд╡рддреЗ, рдЖрдгрд┐ рдПрдХ рддреБрдореНрд╣реА EC2 instance рдкрд╛рд╕реВрди рдмрд╛рдВрдзрддрд╛. NAT gateway рд╡рд┐рд░реБрджреНрдз NAT instance тАФ scaling, failover, security groups рдЖрдгрд┐ рдЦрд░реНрдЪ.

git checkout lesson-03-gateway-vs-instance

ЁЯУТ Lesson 02 тАФ How the gate remembers (PAT)

ЁЯУН You are here: Lesson 02 of 8 ┬╖ Previous: lesson-01-why-nat ┬╖ Next: lesson-03-gateway-vs-instance


ЁЯУж What's in this branch

Lesson 01, plus the register itself: port address translation (PAT). One public IP serves many private desks, and the gate tells them apart by the port it hands out. pat() in nat/demo.py prints the register row by row.

ЁЯзТ Explain like I'm 5

Many pupils go out through the same gate at the same time. All their letters leave with the same school address. So how does the guard know where each answer goes?

The guard gives every trip a ticket number ЁЯОЯя╕П and writes it in the register:

ticket pupil went to
1024 desk 25, room 48 the book shop
1025 desk 7, room 64 the book shop
1024 desk 25, room 48 the museum

The answer comes back saying "school address, ticket 1025, from the book shop". The guard reads that row and walks it to desk 7. Two pupils can even use the same private pocket number тАФ the tickets are different, so the answers never mix.

Notice ticket 1024 appears twice. That is fine: one trip went to the book shop, the other to the museum. The guard matches the ticket and who is writing back.

ЁЯЧ║я╕П Diagram

flowchart LR
    d1["ЁЯкС 10.20.48.25:50001"]
    d2["ЁЯкС 10.20.64.7:50001"]
    gate["ЁЯЪк 13.232.10.20<br/>ЁЯУТ register<br/>1024 тЖФ 10.20.48.25:50001 (pypi)<br/>1025 тЖФ 10.20.64.7:50001 (pypi)"]
    pypi["ЁЯМР pypi 151.101.0.223:443"]
    d1 -->|"1 out"| gate
    d2 -->|"1 out"| gate
    gate -->|"2 :1024 and :1025"| pypi
    pypi -->|"3 answer to :1025"| gate
    gate -->|"4 row 1025 тЖТ 10.20.64.7"| d2

ЁЯЧ║я╕П Drawn version + a lab: https://school-edh.pages.dev/nat/lesson-diagrams.html#l02

тЭУ What

ЁЯдФ Why

Because there are far fewer public IPv4 addresses than machines. PAT lets a whole VPC share one address (or a few), and the register is also the reason NAT is "outbound only": no row, no entry. When you later debug "connection reset" or "cannot allocate port" errors (lesson 08), you are debugging this register.

ЁЯФз How (in this repo)

In nat/gateway.py, send() first looks for an existing row with the same src and dst and reuses it. If there is none, it takes the lowest free port (from 1024 up) not already used to that destination on that IP, writes the row and returns (public_ip, public_port). pat() in nat/demo.py sends three connections and prints g.table.

ЁЯзк Try it

python3 nat/demo.py pat
python3 - <<'EOF'
import sys; sys.path.insert(0, "nat"); from gateway import NatGateway
GITHUB = ("140.82.112.3", 443, "tcp")
g = NatGateway("nat-a", ["13.232.10.20"])
for desk in ("10.20.48.25", "10.20.64.7", "10.20.80.9"):
    print(desk, "тЖТ", g.send((desk, 50001), GITHUB))
print("same desk again тЖТ", g.send(("10.20.64.7", 50001), GITHUB), "┬╖ rows:", len(g.table))
print("answer on 1026  тЖТ", g.reply("13.232.10.20", 1026, GITHUB))
print("answer on 1027  тЖТ", g.reply("13.232.10.20", 1027, GITHUB))
EOF

тЬЕ Verify тАФ what you should see

pat prints three translations:

   10.20.48.25:50001  тЖТ 151.101.0.223:443  written as 13.232.10.20:1024
   10.20.64.7:50001   тЖТ 151.101.0.223:443  written as 13.232.10.20:1025
   10.20.48.25:50002  тЖТ 140.82.112.3:443   written as 13.232.10.20:1024

then the register, and answer to 13.232.10.20:1025 from pypi тЖТ back to ('10.20.64.7', 50001). Your snippet prints:

10.20.48.25 тЖТ ('13.232.10.20', 1024)
10.20.64.7 тЖТ ('13.232.10.20', 1025)
10.20.80.9 тЖТ ('13.232.10.20', 1026)
same desk again тЖТ ('13.232.10.20', 1025) ┬╖ rows: 3
answer on 1026  тЖТ ('10.20.80.9', 50001)
answer on 1027  тЖТ None

Three desks used the same private port 50001 and got three different public ports. The repeat did not add a row. Port 1027 was never handed out, so its "answer" was dropped.

ЁЯПБ What you just proved

One public IP serves many desks because the gate hands out ports and writes each one down; the register is both the address book for answers and the lock against strangers.

тЪая╕П Common mistakes

ЁЯПн In production

On a real account, you cannot read a NAT gateway's register directly тАФ you see it through metrics and flow logs. VPC Flow Logs on the NAT gateway's network interface show the private side and the public side of each translation:

aws ec2 describe-nat-gateways --nat-gateway-ids nat-0abc --query 'NatGateways[].NatGatewayAddresses[].[PublicIp,PrivateIp,NetworkInterfaceId]'
aws ec2 create-flow-logs --resource-type NetworkInterface --resource-ids eni-0abc --traffic-type ALL --log-destination-type cloud-watch-logs --log-group-name nat-flow-logs --deliver-logs-permission-arn arn:aws:iam::111122223333:role/flow-logs
aws cloudwatch get-metric-statistics --namespace AWS/NATGateway --metric-name ActiveConnectionCount --dimensions Name=NatGatewayId,Value=nat-0abc --start-time 2026-09-27T00:00:00Z --end-time 2026-09-27T06:00:00Z --period 300 --statistics Maximum

ЁЯПн Why this matters in production: ActiveConnectionCount is the size of the register right now. When it climbs for no business reason, something inside is opening connections and not closing them.

тПня╕П Next

AWS offers two kinds of gate: one it runs for you, and one you build from an EC2 instance. NAT gateway vs NAT instance тАФ scaling, failover, security groups and cost.

git checkout lesson-03-gateway-vs-instance
тЖР Previouswhy natNext тЖТgateway vs instance

This page is the lesson's README from the lesson-02-how-pat-works branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.