ЁЯПл The SchoolтА║ЁЯХ╕я╕П NetworkingтА║ЁЯзн рдзрдбрд╛ 09 тАФ Routing рдЖрдгрд┐ internet: рдХреЙрд░рд┐рдбреЙрд░рдЪрд╛ рдирдХрд╛рд╢рд╛
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯзн рдзрдбрд╛ 09 тАФ Routing рдЖрдгрд┐ internet: рдХреЙрд░рд┐рдбреЙрд░рдЪрд╛ рдирдХрд╛рд╢рд╛

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 09 ┬╖ рдкреБрдвреЗ: lesson-10-firewalls-nat-vpn


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

рдзрдбреЗ 01тАУ09. рдХреЛрдгрд╛рдХрдбреЗрдЪ рдкреВрд░реНрдг рдирдХрд╛рд╢рд╛ рдирд╕рддрд╛рдирд╛ packets рддреБрдордЪреНрдпрд╛ wing рдкрд╛рд╕реВрди рдЖрда hops рджреВрд░рдЪреНрдпрд╛ server рдкрд░реНрдпрдВрдд рдХрд╕реЗ рдкреЛрд╣реЛрдЪрддрд╛рдд.

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

рдХреЛрдгрддреНрдпрд╛рд╣реА рд╣рдорд╛рд▓рд╛рд▓рд╛ рдкреГрдереНрд╡реАрд╡рд░рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрдЪрд╛ рд░рд╕реНрддрд╛ рдорд╛рд╣реАрдд рдирд╕рддреЛ. рдкреНрд░рддреНрдпреЗрдХрд╛рд▓рд╛ рдПрдХ рдирд┐рдпрдо рдорд╛рд╣реАрдд рдЕрд╕рддреЛ: "рдпрд╛ wing рдЪреНрдпрд╛ рдкрд┐рд╢рд╡реНрдпрд╛ рддреНрдпрд╛ рджрд╛рд░рд╛рдХрдбреЗ; рдмрд╛рдХреА рд╕рдЧрд│реЗ, corridor рдордзреВрди рдкреБрдврдЪреНрдпрд╛ рд╣рдорд╛рд▓рд╛рдХрдбреЗ." рддреБрдордЪрд╛ laptop рдмрд╛рд╣реЗрд░рдЪреЗ рд╕рдЧрд│реЗ gateway рдХрдбреЗ рджреЗрддреЛ; gateway ISP рдХрдбреЗ; ISP рдкрддреНрддреНрдпрд╛рдЪрд╛ prefix рдкрд╛рд╣реВрди рдкреБрдвреЗ рджреЗрддреЛ; рдЖрда рд╣рдорд╛рд▓рд╛рдВрдирдВрддрд░ рдкрд┐рд╢рд╡реА рдкреЛрд╣реЛрдЪрддреЗ. рдЖрдкрдг рдХреЛрдгрддреЗ prefixes рдЧрд╛рдареВ рд╢рдХрддреЛ рд╣реЗ рдПрдХрдореЗрдХрд╛рдВрдирд╛ рд╕рд╛рдВрдЧреВрди рд╣рдорд╛рд▓ рдЖрдкрд▓реЗ рдирд┐рдпрдо рддрд╛рдЬреЗ рдареЗрд╡рддрд╛рдд тАФ рддреНрдпрд╛ рдЧрдкреНрдкрд╛ рдореНрд╣рдгрдЬреЗ BGP.

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

flowchart LR
  L["ЁЯТ╗ 192.168.0.12"] -->|default route| G["ЁЯЪк gateway 192.168.0.1"] --> I1["ISP router"] --> X["internet exchange"] --> I2["their ISP"] --> S["ЁЯПл 93.184.216.34"]

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

ЁЯдФ рдХрд╛

"office рдордзреВрди рдкреЛрд╣реЛрдЪрддреЗ рдкрдг cloud рдордзреВрди рдирд╛рд╣реА", "asymmetric routes", "VPN рдореЛрдареЗ uploads рдЯрд╛рдХреВрди рджреЗрддреЛ" тАФ traceroute рдХрд░реЗрдкрд░реНрдпрдВрдд routing рдЪреНрдпрд╛ рдЕрдбрдЪрдгреА рдЗрддрд░ рдХрд╢рд╛рд╕рд╛рд░рдЦреНрдпрд╛рд╣реА рджрд┐рд╕рддрд╛рдд.

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

route() OS рд▓рд╛ 8.8.8.8 рд╕рд╛рдареА interface рдирд┐рд╡рдбреВ рджреЗрддреЛ рдЖрдгрд┐ рддреЛ рдкрддреНрддрд╛ рдЫрд╛рдкрддреЛ. рдзрдбреНрдпрд╛рдЪрд╛ рдмрд╛рдХреАрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгрдЬреЗ рддреБрдордЪреНрдпрд╛ machine рд╡рд░ рдЖрдзреАрдЪ рдЕрд╕рд▓реЗрд▓реА tools.

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

python3 net/demo.py route
ip route 2>/dev/null || netstat -rn | head -6        # your rules: the default route and your wing
traceroute -m 12 example.com 2>/dev/null || tracepath example.com   # every porter on the way
ping -c 3 -s 1472 example.com                        # a full-size bag; try -s 1473 with -M do (Linux) to see MTU refuse

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

рдПрдХ default via 192.168.0.1 рдУрд│, рддреБрдордЪреНрдпрд╛ wing рд╕рд╛рдареА рдПрдХ 192.168.0.0/24 рдУрд│, рдЖрдгрд┐ example.com рдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ рд╕рдВрдкрдгрд╛рд░рд╛ ~6тАУ12 hops рдЪрд╛ traceroute. рдХрд╛рд╣реА hops * * * рджрд╛рдЦрд╡рддрд╛рдд тАФ рдЙрддреНрддрд░ рди рджреЗрдгрд╛рд░реЗ routers, рдЬреЗ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ.

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

рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ machine рдЪреЗ route table рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╡ рдХреЛрдгрддреНрдпрд╛рд╣реА server рдордзрд▓реЗ corridors рдкрд╛рд╣реВ рд╢рдХрддрд╛ тАФ рдЖрдгрд┐ рдХрд╛рд╣реА рд╣рдорд╛рд▓ рдЧрдкреНрдк рдХрд╛ рд░рд╛рд╣рддрд╛рдд рд╣реЗрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ.

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

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ VPC рдордзрд▓реА route tables, peering, transit gateways, рдЖрдгрд┐ рдПрдЦрд╛рджреНрдпрд╛ provider рд▓рд╛ offline рдХрд░рдгрд╛рд░реА BGP рдЪреА рдШрдЯрдирд╛ тАФ рд╣реЗ рд╕рдЧрд│реЗ рд╣рд╛рдЪ рдзрдбрд╛ рдЖрд╣реЗ. рдпрд╛рдЪ рдХрд╛рд░рдгрд╛рд╕рд╛рдареА Kubernetes pods рдирд╛ рдкреНрд░рддреНрдпреЗрдХ node рд╕рд╛рдареА рдПрдХ prefix рдорд┐рд│рддреЛ.

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

рдзрдбрд╛ 10 тАФ firewalls, NAT рдЖрдгрд┐ VPNs: рдлрд╛рдЯрдХ, рдЖрдгрд┐ "refused" рд╡ "timed out" рдордзрд▓рд╛ рдлрд░рдХ.

ЁЯзн Lesson 09 тАФ Routing & the internet: the corridor map

ЁЯУН You are here: Lesson 09 of 12 ┬╖ Next: lesson-10-firewalls-nat-vpn


ЁЯУж What's in this branch

Lessons 01тАУ09. How packets get from your wing to a server eight hops away when nobody holds the whole map.

ЁЯзТ Explain like I'm 5

No porter knows the way to every room on earth. Each one knows a rule: "bags for this wing go to that door; everything else, down the corridor to the next porter." Your laptop hands everything foreign to the gateway; the gateway to the ISP; the ISP looks at the address's prefix and passes it on; eight porters later the bag arrives. The porters keep their rules current by telling each other which prefixes they can reach тАФ that gossip is BGP.

ЁЯЧ║я╕П Diagram

flowchart LR
  L["ЁЯТ╗ 192.168.0.12"] -->|default route| G["ЁЯЪк gateway 192.168.0.1"] --> I1["ISP router"] --> X["internet exchange"] --> I2["their ISP"] --> S["ЁЯПл 93.184.216.34"]

тЭУ What

ЁЯдФ Why

"Reachable from the office but not from the cloud", "asymmetric routes", "the VPN drops large uploads" тАФ routing problems look like everything else until you traceroute.

ЁЯФз How (in this repo)

route() lets the OS pick the interface for 8.8.8.8 and prints that address. The rest of the lesson is the tools already on your machine.

ЁЯзк Try it

python3 net/demo.py route
ip route 2>/dev/null || netstat -rn | head -6        # your rules: the default route and your wing
traceroute -m 12 example.com 2>/dev/null || tracepath example.com   # every porter on the way
ping -c 3 -s 1472 example.com                        # a full-size bag; try -s 1473 with -M do (Linux) to see MTU refuse

тЬЕ Verify тАФ what you should see

A default via 192.168.0.1 line, a 192.168.0.0/24 line for your wing, and a traceroute with ~6тАУ12 hops ending at example.com's address. Some hops show * * * тАФ routers that do not answer, which is normal.

ЁЯПБ What you just proved

You can read your machine's route table and see the corridors between you and any server тАФ and you know why some porters stay silent.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: route tables in every VPC, peering, transit gateways, and the BGP incident that takes a provider offline are this lesson. Kubernetes pods get a prefix per node for the same reason.

тПня╕П Next

Lesson 10 тАФ firewalls, NAT & VPNs: the gate, and the difference between "refused" and "timed out".

тЖР PrevioustlsNext тЖТfirewalls nat vpn

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