ЁЯкз рдзрдбрд╛ 04 тАФ Route tables: corridor рдЪреНрдпрд╛ рдкрд╛рдЯреНрдпрд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдорд╛рдЧреЗ: lesson-03-subnets-azs ┬╖ рдкреБрдвреЗ: lesson-05-igw-public
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ03, рдЖрдгрд┐ рдкрд╛рдЯреНрдпрд╛: vpc/network.py рдордзреАрд▓ RouteTable
routes (destination тЖТ target) рдареЗрд╡рддреЛ, рдиреЗрд╣рдореА local route рдиреЗ рд╕реБрд░реВ рд╣реЛрддреЛ, рдЖрдгрд┐
lookup() рдЬреБрд│рдгрд╛рд▒реНрдпрд╛рдВрдкреИрдХреА рд╕рд░реНрд╡рд╛рдд рдиреЗрдордХрд╛ route рдирд┐рд╡рдбрддреЛ. vpc/demo.py рдордзреАрд▓
routes() рдПрдХрд╛ рдкрд╛рдЯреАрд╡рд░реВрди рдЪрд╛рд░ рдкрддреНрддреЗ рдкрд╛рдард╡реВрди рдкрд╛рд╣рддреЛ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкреНрд░рддреНрдпреЗрдХ wing рдЪреНрдпрд╛ рджрд╛рд░рд╛рд╡рд░ рдПрдХ corridor рдЪреА рдкрд╛рдЯреА ЁЯкз рд▓рдЯрдХрд▓реЗрд▓реА рдЕрд╕рддреЗ. рддрд┐рдЪреНрдпрд╛рд╡рд░ рдЕрд╢рд╛ рдУрд│реА рдЕрд╕рддрд╛рдд:
- "рдЦреЛрд▓реНрдпрд╛
10.20.x.xтЖТ campus рдЪреНрдпрд╛ рдЖрддрдЪ рд░рд╛рд╣рд╛" (рд╣реА рдУрд│ рдиреЗрд╣рдореА рдЕрд╕рддреЗ) - "рдЦреЛрд▓реНрдпрд╛
10.30.x.xтЖТ partner рд╢рд╛рд│реЗрдХрдбреЗ рдЬрд╛рдгрд╛рд░рд╛ corridor" - "рдмрд╛рдХреА рд╕рдЧрд│реЗ тЖТ рдмрд╛рдЬреВрдЪрд╛ рджрд░рд╡рд╛рдЬрд╛"
10.20.96.15 рд╕рд╛рдареАрдЪреЗ рдкрддреНрд░ рджреЛрди рдУрд│реАрдВрд╢реА рдЬреБрд│рддреЗ: "10.20.x.x" рдЖрдгрд┐ "рдмрд╛рдХреА рд╕рдЧрд│реЗ". рдирд┐рдпрдо
рд╕реЛрдкрд╛ рдЖрд╣реЗ: рд╕рд░реНрд╡рд╛рдд рдиреЗрдордХреА рдУрд│ рдЬрд┐рдВрдХрддреЗ. "10.20.x.x" рд╣реА "рдмрд╛рдХреА рд╕рдЧрд│реЗ" рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдиреЗрдордХреА рдЖрд╣реЗ,
рдореНрд╣рдгреВрди рдкрддреНрд░ рдЖрддрдЪ рд░рд╛рд╣рддреЗ.
рдПрдХрд╣реА рдУрд│ рдЬреБрд│рд▓реА рдирд╛рд╣реА, рддрд░ рдкрддреНрд░ drop рд╣реЛрддреЗ. рдХреЛрдгреА рдУрд░рдбрдд рдирд╛рд╣реА. рддреЗ рдлрдХреНрдд рдХрдзреАрдЪ рдкреЛрд╣реЛрдЪрдд рдирд╛рд╣реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
pkt["ЁЯУи packet to 52.219.40.10"]
subgraph rt["ЁЯкз rt-private-a"]
r1["10.20.0.0/16 тЖТ local"]
r2["10.30.0.0/16 тЖТ pcx-partner"]
r3["pl-s3 тЖТ vpce-s3"]
r4["0.0.0.0/0 тЖТ nat-a"]
end
pkt --> rt
rt -->|"most specific match wins"| win["тЖТ vpce-s3<br/>52.219.0.0/16 beats 0.0.0.0/0"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/vpc/lesson-diagrams.html#l04
тЭУ рдХрд╛рдп
- Route тАФ рдПрдХ destination (рдПрдХ CIDR, рдХрд┐рдВрд╡рд╛ S3 list рд╕рд╛рд░рдЦреА prefix list) рдЖрдгрд┐ рдПрдХ
target:
local, internet gatewayigw-тАж, NAT gatewaynat-тАж, VPC endpointvpce-тАж, peering connectionpcx-тАж, Transit Gatewaytgw-тАж, network interface. - Local route тАФ рдкреНрд░рддреНрдпреЗрдХ route table рдордзреНрдпреЗ VPC рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ CIDR рд╕рд╛рдареА
localрдХрдбреЗ рдЬрд╛рдгрд╛рд░рд╛ route рдЕрд╕рддреЛ. рддреЛ delete рдХрд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА. рдореНрд╣рдгреВрдирдЪ рдкреНрд░рддреНрдпреЗрдХ wing рдкреНрд░рддреНрдпреЗрдХ рджреБрд╕рд▒реНрдпрд╛ wing рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрддреЛ тАФ рддреЗ рдЬрд╛рдК рджреНрдпрд╛рдпрдЪреЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдзрдбрд╛ 06 рдордзреАрд▓ рджрд╛рд░реЗ рдард░рд╡рддрд╛рдд. - Longest-prefix match тАФ destination рд╢реА рдЬреБрд│рдгрд╛рд▒реНрдпрд╛ рд╕рдЧрд│реНрдпрд╛ routes рдкреИрдХреА рд╕рд░реНрд╡рд╛рдд рд▓рд╛рдВрдм
prefix рдЕрд╕рд▓реЗрд▓рд╛ (рд╕рд░реНрд╡рд╛рдд рдиреЗрдордХрд╛) route рдЬрд┐рдВрдХрддреЛ.
/20рд╣рд╛/16рд▓рд╛ рд╣рд░рд╡рддреЛ,/16рд╣рд╛/0рд▓рд╛.0.0.0.0/0рд╕рдЧрд│реНрдпрд╛рд╢реА рдЬреБрд│рддреЛ, рдореНрд╣рдгреВрди рддреА "рдмрд╛рдХреА рд╕рдЧрд│реЗ" рдУрд│ рдЖрд╣реЗ. - Local рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдиреЗрдордХрд╛ тАФ VPC range рдЪреНрдпрд╛ рдПрдЦрд╛рджреНрдпрд╛ рднрд╛рдЧрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА route рдЬреЛрдбреВ рд╢рдХрддрд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде
10.20.96.0/20тЖТ firewall рдЪрд╛ network interface), рдореНрд╣рдгрдЬреЗ wings рдордзрд▓реЗ traffic рддрдкрд╛рд╕рдгреА рдХрд░рдгрд╛рд▒реНрдпрд╛ box рдордзреВрди рдЬрд╛рдИрд▓. - Association тАФ рдкреНрд░рддреНрдпреЗрдХ subnet рдиреЗрдордХрд╛ рдПрдХ route table рд╡рд╛рдкрд░рддреЛ; рдПрдХ route table рдЕрдиреЗрдХ subnets рдирд╛ рд╕реЗрд╡рд╛ рджреЗрдК рд╢рдХрддреЛ. рддреБрдореНрд╣реА associate рди рдХреЗрд▓реЗрд▓рд╛ subnet VPC рдЪрд╛ main route table рд╡рд╛рдкрд░рддреЛ.
- рдЬреБрд│рд▓реЗ рдирд╛рд╣реА тАФ packet drop рд╣реЛрддреЛ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг "public", "private" рдЖрдгрд┐ "isolated" рд╣реА subnet рд╡рд░ рдЪрд┐рдХрдЯрд╡рд▓реЗрд▓реА рд▓реЗрдмрд▓реЗ рдирд╛рд╣реАрдд тАФ рддреА рддреНрдпрд╛рдЪреНрдпрд╛ рдкрд╛рдЯреАрд╡рд░ рдХрд╛рдп рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ рддреНрдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗрдд. Route table рд╡рд╛рдЪрд╛, рдЖрдгрд┐ wing рдХреБрдареЗ рдЬрд╛рдК рд╢рдХрддреЛ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд│рддреЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
RouteTable.__init__ рд╕рд░реНрд╡рд╛рдд рдЖрдзреА (vpc_cidr, "local") рдареЗрд╡рддреЛ. lookup(dst_ip, prefix_lists)
рдкреНрд░рддреНрдпреЗрдХ route рддрдкрд╛рд╕рддреЛ; рдЕрдВрдХрд╛рдиреЗ рд╕реБрд░реВ рди рд╣реЛрдгрд╛рд░реЗ destination рд╣реЗ prefix-list рдЪреЗ рдирд╛рд╡ рдЕрд╕рддреЗ
рдЖрдгрд┐ рддреЗ prefix_lists рдордзреВрди рд╡рд┐рд╕реНрддрд╛рд░рд▓реЗ рдЬрд╛рддреЗ. рддреЛ рд╕рд░реНрд╡рд╛рдд рдореЛрдард╛ prefixlen рдЕрд╕рд▓реЗрд▓рд╛ рдЬреБрд│рдгрд╛рд░рд╛ route рдареЗрд╡рддреЛ рдЖрдгрд┐
(destination, target), рдХрд┐рдВрд╡рд╛ (None, None) рдкрд░рдд рдХрд░рддреЛ. vpc/demo.py рдордзреАрд▓
routes() NAT, peering route рдЖрдгрд┐ S3 prefix list pl-s3 (рдЙрджрд╛рд╣рд░рдгрд╛рджрд╛рдЦрд▓ ranges 52.219.0.0/16 рдЖрдгрд┐
3.5.0.0/16) рдЕрд╕рд▓реЗрд▓реА private wing рдЪреА рдкрд╛рдЯреА рдмрдирд╡рддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 vpc/demo.py routes
python3 - <<'EOF'
import sys; sys.path.insert(0, "vpc"); from network import RouteTable
from demo import VPC, PL
rt = RouteTable("rt-app", VPC, [("0.0.0.0/0", "nat-a"), ("10.20.96.0/20", "firewall")])
for ip in ("10.20.96.15", "10.20.1.1", "93.184.216.34"):
print(ip.ljust(14), rt.lookup(ip, PL))
bare = RouteTable("rt-empty", VPC)
print("no default route:", bare.lookup("93.184.216.34", PL))
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
routes рдЫрд╛рдкрддреЛ:
тФАтФА the corridor sign: the MOST SPECIFIC route that matches wins; 'local' is always there
тЖТ 10.20.96.15 matches 10.20.0.0/16 тЖТ local
тЖТ 10.30.4.7 matches 10.30.0.0/16 тЖТ pcx-partner
тЖТ 52.219.40.10 matches pl-s3 тЖТ vpce-s3
тЖТ 93.184.216.34 matches 0.0.0.0/0 тЖТ nat-a
рддреБрдордЪрд╛ snippet 10.20.96.15 ('10.20.96.0/20', 'firewall') рдЫрд╛рдкрддреЛ тАФ /20 рдиреЗ
local рдЪреНрдпрд╛ /16 рд▓рд╛ рд╣рд░рд╡рд▓реЗ тАФ рдЖрдгрд┐ рдордЧ 10.20.1.1 ('10.20.0.0/16', 'local'),
93.184.216.34 ('0.0.0.0/0', 'nat-a') рдЖрдгрд┐ no default route: (None, None).
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
VPC router рд╡рд╛рдЪрддреЛ рддрд╕рд╛ рддреБрдореНрд╣реА route table рд╡рд╛рдЪреВ рд╢рдХрддрд╛: рдЬреБрд│рдгрд╛рд░реЗ рд╕рдЧрд│реЗ рдЧреЛрд│рд╛ рдХрд░рд╛, рд╕рд░реНрд╡рд╛рдд рдиреЗрдордХрд╛ рдШреНрдпрд╛, рдЖрдгрд┐ рдХрд╢рд╛рд╢реАрдЪ рди рдЬреБрд│рдгрд╛рд░реЗ drop рдХрд░рд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдЪреБрдХреВрди subnets main route table рд╡рд░рдЪ рдареЗрд╡рдгреЗ тАФ рдордЧ "main" рдмрджрд▓рд▓рд╛ рдХреА рддреЗ рд╕рдЧрд│реЗ рдмрджрд▓рддрд╛рдд
- рдкреВрд░реНрдг VPC range рд╕рд╛рдареА рдПрдЦрд╛рджрд╛ route
localрд▓рд╛ рдУрд▓рд╛рдВрдбреЗрд▓ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛ тАФ рдлрдХреНрдд рдЬрд╛рд╕реНрдд рдиреЗрдордХрд╛ рднрд╛рдЧрдЪ рдУрд▓рд╛рдВрдбреВ рд╢рдХрддреЛ - рдПрдХрд╛рдЪ destination рд╕рд╛рдареА рджреЛрди routes тАФ AWS рддреЗ рд╕реНрд╡реАрдХрд╛рд░рдд рдирд╛рд╣реА; рдПрдХрдЪ target рдирд┐рд╡рдбрд╛
- route рдлрдХреНрдд traffic рдмрд╛рд╣реЗрд░ рдкрд╛рдард╡рддреЛ рд╣реЗ рд╡рд┐рд╕рд░рдгреЗ; рдЙрддреНрддрд░рд╛рд▓рд╛ рджреБрд╕рд▒реНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛ рдкрд░рддреАрдЪрд╛ route рд▓рд╛рдЧрддреЛ
- рдЦрд░реЗ рдЙрддреНрддрд░ "route рдирд╛рд╣реА тЖТ drop" рдЕрд╕рддрд╛рдирд╛ security group рд▓рд╛ рджреЛрд╖ рджреЗрдгреЗ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдкреНрд░рддреНрдпреЗрдХ AZ рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ tier рд╕рд╛рдареА рдПрдХ route table рд╣реА рдиреЗрд╣рдореАрдЪреА рдкрджреНрдзрдд рдЖрд╣реЗ: public table рд╕рд╛рдорд╛рдпрд┐рдХ рдЕрд╕рддреЛ, рдкреНрд░рддреНрдпреЗрдХ private table рддреНрдпрд╛рдЪреНрдпрд╛рдЪ AZ рдордзрд▓реНрдпрд╛ NAT gateway рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ (рдзрдбрд╛ 12).
рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд; IDs рдЙрджрд╛рд╣рд░рдгрд╛рджрд╛рдЦрд▓ рдЖрд╣реЗрдд):
aws ec2 create-route-table --vpc-id vpc-0123456789abcdef0
aws ec2 create-route --route-table-id rtb-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-0123456789abcdef0
aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef0 --subnet-id subnet-0123456789abcdef0
aws ec2 describe-route-tables --route-table-ids rtb-0123456789abcdef0 --query 'RouteTables[].Routes[]'
тПня╕П рдкреБрдвреЗ
рдкрд╛рдЯреАрд╡рд░рдЪреА рдПрдХ рдУрд│ wing рд▓рд╛ public wing рдмрдирд╡рддреЗ: 0.0.0.0/0 тЖТ igw. рдкреБрдвреЗ,
internet gateway тАФ рдореБрдЦреНрдп рджрд░рд╡рд╛рдЬрд╛.
git checkout lesson-05-igw-public