ЁЯзн рдзрдбрд╛ 09 тАФ Routing рдЖрдгрд┐ internet: рдХреЙрд░рд┐рдбреЙрд░рдЪрд╛ рдирдХрд╛рд╢рд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 09 ┬╖ рдкреБрдвреЗ: lesson-10-firewalls-nat-vpn
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ09. рдХреЛрдгрд╛рдХрдбреЗрдЪ рдкреВрд░реНрдг рдирдХрд╛рд╢рд╛ рдирд╕рддрд╛рдирд╛ packets рддреБрдордЪреНрдпрд╛ wing рдкрд╛рд╕реВрди рдЖрда hops рджреВрд░рдЪреНрдпрд╛ server рдкрд░реНрдпрдВрдд рдХрд╕реЗ рдкреЛрд╣реЛрдЪрддрд╛рдд.
- net/demo.py тАФ
route: рддреБрдореНрд╣реА рдЬреНрдпрд╛ рдкрддреНрддреНрдпрд╛рдиреЗ рдмрд╛рд╣реЗрд░ рдкрдбрддрд╛ рддреЛ; рдордЧtracerouteрдкреНрд░рддреНрдпреЗрдХ corridor рджрд╛рдЦрд╡рддреЛ
ЁЯзТ 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"]
тЭУ рдХрд╛рдп
- route рдореНрд╣рдгрдЬреЗ
prefix тЖТ next hop (via interface). рд╕рд░реНрд╡рд╛рдд рдиреЗрдордХрд╛ (specific) prefix рдЬрд┐рдВрдХрддреЛ;0.0.0.0/0рд╣рд╛ default route. - TTL (time to live): рдкреНрд░рддреНрдпреЗрдХ router рддреЛ рдПрдХрдиреЗ рдХрдореА рдХрд░рддреЛ; 0 рдЭрд╛рд▓рд╛ рдХреА packet рдЯрд╛рдХреВрди рджрд┐рд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ ICMP "time exceeded" рдкрд░рдд рдпреЗрддреЛ тАФ рдЕрд╢рд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ traceroute рдкреНрд░рддреНрдпреЗрдХ hop рдЙрдШрдб рдХрд░рддреЛ.
- MTU: рдПрдЦрд╛рджреА link рд╡рд╛рд╣реВ рд╢рдХреЗрд▓ рдЕрд╢реА рд╕рд░реНрд╡рд╛рдд рдореЛрдареА рдкрд┐рд╢рд╡реА (Ethernet рд╡рд░ ~1500 bytes); рдореЛрдареЗ packets рддреБрдХрдбреНрдпрд╛рдВрдд (fragment) рд╣реЛрддрд╛рдд рдХрд┐рдВрд╡рд╛ fragmentation рд▓рд╛ рдордирд╛рдИ рдЕрд╕реЗрд▓ рддрд░ рдЯрд╛рдХреВрди рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд тАФ рдкреНрд░рд╕рд┐рджреНрдз "рдЫреЛрдЯреНрдпрд╛ requests рдЪрд╛рд▓рддрд╛рдд, рдореЛрдареНрдпрд╛ рдЕрдбрдХрддрд╛рдд".
- BGP: ~75,000 autonomous systems рдПрдХрдореЗрдХрд╛рдВрдирд╛ prefixes рдХрд╕реЗ рдЬрд╛рд╣реАрд░ рдХрд░рддрд╛рдд. рдПрдХ рдЪреБрдХреАрдЪреА рдШреЛрд╖рдгрд╛ рдкреВрд░реНрдг рджреЗрд╢рд╛рд▓рд╛ black-hole рдХрд░реВ рд╢рдХрддреЗ.
ЁЯдФ рдХрд╛
"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 рдкрд╛рд╣реВ рд╢рдХрддрд╛ тАФ рдЖрдгрд┐ рдХрд╛рд╣реА рд╣рдорд╛рд▓ рдЧрдкреНрдк рдХрд╛ рд░рд╛рд╣рддрд╛рдд рд╣реЗрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдПрдХрдореЗрдХрд╛рдВрд╡рд░ рдпреЗрдгрд╛рд░реЗ prefixes рдЕрд╕рд▓реЗрд▓реЗ рджреЛрди VPCs (рдХрд┐рдВрд╡рд╛ VPN рдЖрдгрд┐ office): packets рдЪреБрдХреАрдЪреНрдпрд╛ wing рдордзреНрдпреЗ рдЬрд╛рддрд╛рдд.
* * *рдореНрд╣рдгрдЬреЗ "рдмрд┐рдШрдбрд▓реЗ" рдЕрд╕реЗ рд╡рд╛рдЪрдгреЗ. рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде "рд╢рд╛рдВрдд" рдЖрд╣реЗ.- tunnels рдЖрдгрд┐ VPNs рд╡рд░ MTU рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░рдгреЗ; рддреЗ рдлрдХреНрдд рдореЛрдареНрдпрд╛ transfers рд╡рд░ рдЕрдбрдХрдгреНрдпрд╛рдЪреНрдпрд╛ рд░реВрдкрд╛рдд рджрд┐рд╕рддреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ VPC рдордзрд▓реА route tables, peering, transit gateways, рдЖрдгрд┐ рдПрдЦрд╛рджреНрдпрд╛ provider рд▓рд╛ offline рдХрд░рдгрд╛рд░реА BGP рдЪреА рдШрдЯрдирд╛ тАФ рд╣реЗ рд╕рдЧрд│реЗ рд╣рд╛рдЪ рдзрдбрд╛ рдЖрд╣реЗ. рдпрд╛рдЪ рдХрд╛рд░рдгрд╛рд╕рд╛рдареА Kubernetes pods рдирд╛ рдкреНрд░рддреНрдпреЗрдХ node рд╕рд╛рдареА рдПрдХ prefix рдорд┐рд│рддреЛ.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 10 тАФ firewalls, NAT рдЖрдгрд┐ VPNs: рдлрд╛рдЯрдХ, рдЖрдгрд┐ "refused" рд╡ "timed out" рдордзрд▓рд╛ рдлрд░рдХ.