Course-এর সূচি

3.3

Internet Gateway ও Route Table

একটা packet কীভাবে subnet থেকে বের হয়: route lookup, longest prefix match, কোন জিনিসটা একটা subnet-কে public বানায়, আর যে ভুলগুলো সবাই করে।

24 মিনিট পড়া + Animation

টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।

এই lesson শেষে তুমি যা পারবে

  • VPC Router-এর কাজ কী, আর Route Table দেখে প্রতিটা Packet কোন দিকে যাবে সেটা কীভাবে ঠিক হয়, বুঝিয়ে বলতে পারবে।
  • যেকোনো Route Table-এ longest prefix match নিয়ম খাটাতে পারবে, একাধিক route একসাথে মিলে গেলেও।
  • Internet Gateway আসলে কী, এর সীমাবদ্ধতা কোথায়, আর এটা address-এর কোন অনুবাদটা করে, সেটা বলতে পারবে।
  • ঠিক কোন জিনিসটা থাকলে একটা Subnet public হয়, আর Instance-এর নিজেরও কেন public address লাগে, পরিষ্কার বলতে পারবে।
  • "আমার Instance-এ internet নেই" সমস্যা হলে একটা বাঁধা checklist ধরে কারণ খুঁজে বের করতে পারবে, public আর private দুই রকম Subnet-এই।

#সব Packet আগে VPC Router-এর কাছে যায়

VPC-তে "router" নামে আলাদা কোনো যন্ত্র তোমাকে বসাতে হয় না। প্রতিটা Subnet-এর সাথে আপনা থেকেই একটা VPC Router থাকে, যেটা AWS নিজেই চালায় আর দেখাশোনা করে। এর address হলো Subnet-এর base + 1। যেমন 10.0.0.0/24-এর জন্য সেটা 10.0.0.1, lesson 3.2-তে যে পাঁচটা reserved address দেখেছিলে, এটা তারই একটা। প্রতিটা Instance এটাকেই default gateway হিসেবে ধরে।

Instance যখন নিজের Subnet-এর বাইরে কোনো address-এ Packet পাঠায়, Packet-টা সোজা যায় VPC Router-এর কাছে। Router তখন destination address দেখে, আর মাত্র একটা জিনিস মিলিয়ে দেখে: যে Subnet থেকে Packet-টা এসেছে, সেই Subnet-এর সাথে জোড়া Route Table।

#Route Table

Route Table মানে কিছু নিয়মের একটা তালিকা। এর প্রতিটা route-এ দুটো অংশ থাকে:

  • Destination: একটা CIDR block (10.1.0.0/16, 0.0.0.0/0…)। মানে, "যেসব Packet এই range-এর কোনো address-এ যাচ্ছে…"
  • Target: সেগুলোকে কোথায় পাঠাতে হবে। হতে পারে local VPC, Internet Gateway (igw-…), NAT Gateway (nat-…), VPN Gateway (vgw-…), peering connection (pcx-…), transit gateway (tgw-…), VPC endpoint (vpce-…), অথবা network interface (eni-…)।

Route Table কীভাবে Subnet-এর সাথে জোড়া লাগে:

নিয়মব্যাখ্যা
Main Route TableVPC বানানোর সময়েই এটা তৈরি হয়ে যায়। যে Subnet-কে তুমি নিজে থেকে কোনো table-এর সাথে জুড়ে দাওনি, সে এটাই ব্যবহার করে।
Custom Route Tableযতগুলো দরকার নিজে বানিয়ে নাও। যেমন public Subnet-গুলোর জন্য একটা, আর private Subnet-এর জন্য প্রতিটা AZ-এ একটা করে।
এক Subnet, এক tableএকটা Subnet একই সময়ে ঠিক একটা Route Table-এর সাথেই জোড়া থাকে।
এক table, অনেক Subnetএকটা Route Table দিয়ে অনেকগুলো Subnet চালানো যায়।
Local routeপ্রতিটা Route Table-এ VPC CIDR → local থাকবেই। এটা আপনা থেকে যোগ হয় আর মুছে ফেলা যায় না। তাই একই VPC-র যেকোনো Subnet অন্য যেকোনো Subnet-এ সবসময় পৌঁছাতে পারে (firewall বাধা না দিলে)।

#Longest prefix match

একটা destination address প্রায়ই একসাথে কয়েকটা route-এর সাথে মিলে যায়। মিলবেই তো, 0.0.0.0/0 তো সব address-এর সাথেই মেলে। তখন কোনটা নেওয়া হবে, তার নিয়ম সোজা, আর এর কোনো ব্যতিক্রম নেই:

যে route-এর prefix সবচেয়ে লম্বা (অর্থাৎ যেটা সবচেয়ে নির্দিষ্টভাবে মেলে), সেটাই জেতে। Table-এ route-গুলো কোনটা আগে কোনটা পরে লেখা, তাতে কিছুই যায় আসে না।

VPC Router কীভাবে পথ বেছে নেয়

একটাই Instance, কিন্তু গন্তব্য চারটা। প্রতিটা Packet-এর জন্য Router আগে দেখে কোন কোন route মিলছে, তারপর সবচেয়ে নির্দিষ্টটা বেছে নেয়।

পরিস্থিতি

VPC10.0.0.0/16
App Subnet10.0.10.0/24
Data Subnet10.0.20.0/24
Peer VPC10.1.0.0/16
অফিস192.168.0.0/16
App Server10.0.10.10
Database10.0.20.5
VPC Router
Internet Gateway
Internet198.51.100.7
Peering
Service10.1.3.4
VPN Gateway
File Server192.168.5.9
→ 10.0.20.5

App Subnet-এর Route Table

গন্তব্যTarget
10.0.0.0/16local
10.1.0.0/16pcx-0b2c (peering)
192.168.0.0/16vgw-0a1b (VPN)
0.0.0.0/0igw-0f9e
ধাপ 1 / 3
1

App Server কিছু পাঠাচ্ছে 10.0.20.5-এর Database-কে। Instance থেকে যে Packet-ই বের হোক, সেটা আগে যায় VPC Router-এর কাছে, যার address Subnet-এর base + 1 (10.0.10.1)।

Animation থেকে যা মনে রাখবে:

  • 10.0.20.5 মেলে 10.0.0.0/16 আর 0.0.0.0/0 দুটোর সাথেই। জেতে /16, তাই VPC-র ভেতরের traffic সবসময় ভেতরেই থাকে।
  • বেশি নির্দিষ্ট route সবসময় বড় route-কে টপকে যায়। এই কৌশলেই একটা নির্দিষ্ট range-কে VPN বা peering দিয়ে পাঠানো যায়, আর বাকি সব যায় internet-এ।
  • আবার এই নিয়মটাই বিপদ ডাকতে পারে: ভুল target-এর দিকে একটা বাড়তি নির্দিষ্ট route ঢুকে গেলে, ঠিক ওই traffic-টুকু কোনো সাড়াশব্দ ছাড়াই অন্য পথে চলে যায়।

#Internet Gateway

Internet Gateway (IGW) হলো VPC আর public internet-এর মাঝখানের দরজা।

বৈশিষ্ট্যব্যাখ্যা
Managed আর highly availableAWS পুরো Region জুড়ে একাধিক জায়গায় এটা চালায়। এটা এমন কোনো একটা যন্ত্র না যে বিগড়ে গেলে সব বন্ধ।
Horizontally scale করেএর নিজের কোনো bandwidth সীমা নেই, capacity-ও বেছে নিতে হয় না।
আলাদা করে বানাতে হয়আগে একটা IGW তৈরি করো, তারপর সেটা VPC-তে attach করো।
এক-এর সাথে একএকটা VPC-তে সর্বোচ্চ একটা IGW attach করা যায়, আর একটা IGW-ও একটাই VPC-তে attach হয়।
ফ্রিGateway-র জন্য কোনো খরচ নেই। টাকা লাগে শুধু internet-এ যে data বাইরে যায়, তার জন্য।
Address translationপ্রতিটা Instance-এর private IPv4 আর public IPv4 address-এর মধ্যে one-to-one NAT করে।

শেষ সারিটা খুব গুরুত্বপূর্ণ। Instance-এর operating system শুধু নিজের private address-টাই জানে। Public IP আছে এমন একটা Linux Instance-এ ip addr চালিয়ে দেখো, public IP কোথাও খুঁজে পাবে না। কোন private IP-র সাথে কোন public IP জোড়া, সেই হিসাবটা রাখে Internet Gateway, আর Packet তার ভেতর দিয়ে যাওয়ার সময় address বদলে দেয়:

Internet Gateway-র পথ, আর কোথায় কোথায় সেটা আটকে যায়

Public Subnet-এ একটা Web Server আছে। আগে দেখো Internet Gateway কীভাবে private আর public address বদলাবদলি করে, তারপর পথের এক একটা ধাপ ভেঙে দেখো কী হয়।

পরিস্থিতি

Route 0.0.0.0/0 → IGW আছে, public IP 203.0.113.25, আর rule-এ HTTP খোলা।

VPC10.0.0.0/16
Public Subnet10.0.0.0/24
Web Server10.0.0.10
VPC Router
Internet Gateway
দর্শক198.51.100.20
HTTP

ভেতরে আসছে যে Packet

Source IP

198.51.100.20

Destination IP

203.0.113.25

ধাপ 1 / 3
1

একজন visitor http://203.0.113.25 খুলল। Internet-এ Packet-টার গন্তব্য হিসেবে লেখা থাকে Server-এর public IP।

#Subnet ঠিক কখন public হয়

কোনো Subnet-এর Route Table-এ যদি 0.0.0.0/0 → igw-… route থাকে, তাহলে সেটা public Subnet। এই route না থাকলে সেটা private। সংজ্ঞা বলতে এটুকুই।

তবে একটা নির্দিষ্ট Instance সত্যিই internet-এর সাথে কথা বলতে পারবে কি না, তার জন্য আরও দুটো শর্ত পূরণ হতে হবে:

  1. Instance-এর একটা public IPv4 address বা Elastic IP থাকতে হবে (lesson 3.6)। Subnet-এ "auto-assign public IPv4 address" নামে একটা setting থাকে, নতুন Instance আপনা থেকে public IP পাবে কি না সেটা এটাই ঠিক করে।
  2. Security Group আর Network ACL দুটোকেই traffic যেতে দিতে হবে (lesson 3.5)।

নিজেকে যাচাই করোপ্রশ্ন

একটা Subnet-এর Route Table-এ আছে 10.0.0.0/16 → local আর 0.0.0.0/0 → igw-123। ওই Subnet-এর একটা Instance-এর public IP আছে। কোন কথাটা ঠিক?

#Troubleshooting checklist

কোনো Instance internet-এ যেতে না পারলে (বা internet থেকে তাকে পাওয়া না গেলে), নিচের তালিকাটা ক্রম ধরে একটা একটা করে মিলিয়ে দেখো। পরীক্ষায় এই checklist ঘুরেফিরে বারবার আসে।

Instance যদি public Subnet-এ থাকে:

  1. Public address: Instance-এর কি public IPv4 address বা Elastic IP আছে?
  2. Internet Gateway: VPC-তে কি IGW attach করা আছে?
  3. Route Table: Subnet-এর Route Table কি 0.0.0.0/0-কে ওই IGW-তে পাঠাচ্ছে? আর route-টা কি active, নাকি blackhole হয়ে আছে?
  4. Security Group: এটা কি traffic ঢুকতে দিচ্ছে? (ওই Port-এর জন্য inbound rule লাগবে; outbound তো default-ভাবেই খোলা।)
  5. Network ACL: এটা কি দুই দিকেই traffic যেতে দিচ্ছে? Ephemeral Port দিয়ে ফেরত আসা traffic-ও এর মধ্যে পড়ে।

Instance যদি private Subnet-এ থাকে:

  1. NAT Gateway: কোনো public Subnet-এ কি NAT Gateway আছে? (আর সেই Subnet-এর নিজের Route Table কি IGW-র দিকে route দিচ্ছে?)
  2. Route Table: Private Subnet-এর Route Table কি 0.0.0.0/0-কে ওই NAT Gateway-তে পাঠাচ্ছে?
  3. এরপর আগের মতোই Security Group আর Network ACL মিলিয়ে দেখো।

#নিজে করে দেখো

CLI দিয়ে একটা নতুন Subnet-কে public বানিয়ে ফেলো (ID-গুলোর জায়গায় lesson 3.2-তে তোমার পাওয়া ID বসাও):

IGW=$(aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text)
aws ec2 attach-internet-gateway --internet-gateway-id $IGW --vpc-id $VPC

RT=$(aws ec2 create-route-table --vpc-id $VPC --query RouteTable.RouteTableId --output text)
aws ec2 create-route --route-table-id $RT --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW
aws ec2 associate-route-table --route-table-id $RT --subnet-id $SUBNET

# এখন থেকে এই Subnet-এ নতুন Instance চালু হলে আপনা থেকেই public IPv4 পাবে
aws ec2 modify-subnet-attribute --subnet-id $SUBNET --map-public-ip-on-launch

# ফলাফল দেখো: local route-টা তুমি বানাওনি, তবু আছে; আর State কলামটা খেয়াল করো
aws ec2 describe-route-tables --route-table-ids $RT \
  --query "RouteTables[].Routes[].[DestinationCidrBlock,GatewayId,State]" --output table

VPC Reachability Analyzer (VPC console-এ পাবে) দুটো resource-এর মাঝের পথ ধাপে ধাপে খুঁজে দেখে, আর জানিয়ে দেয় কোন route, Security Group বা Network ACL পথ আটকাচ্ছে। মানে, ওপরের checklist-টাই সে নিজে নিজে করে দেয়।

#সারসংক্ষেপ

মূল কথাগুলো

  • প্রতিটা Subnet-এ base + 1 address-এ আপনা থেকেই একটা VPC Router থাকে। Subnet থেকে বের হওয়া traffic কোন দিকে যাবে, সেটা ঠিক করে সেই Subnet-এর Route Table।
  • একটা route মানে destination CIDR → target (local, igw, nat, vgw, pcx, tgw, vpce, eni)। প্রতিটা Subnet ঠিক একটা Route Table ব্যবহার করে; যাকে কোনো table-এ জোড়া হয়নি, সে Main Route Table ব্যবহার করে।
  • Local route (VPC CIDR → local) প্রতিটা table-এই থাকে, আর এটা মোছা যায় না।
  • কোন route নেওয়া হবে, ঠিক করে longest prefix match: যে route সবচেয়ে নির্দিষ্টভাবে মেলে, সেটাই জেতে। Table-এ কোনটা আগে লেখা, তার কোনো দাম নেই।
  • Internet Gateway: managed, highly available, bandwidth-এর সীমা নেই, ফ্রি, প্রতি VPC-তে একটা, আর private ও public IPv4-এর মধ্যে one-to-one NAT করে। Instance নিজে শুধু তার private IP-টাই জানে।
  • Public Subnet মানে route 0.0.0.0/0 → IGW আছে। সাথে Instance-এর public IP বা Elastic IP লাগবে, আর দুটো firewall-কেই traffic যেতে দিতে হবে।
  • Private Subnet বাইরের internet পায় public Subnet-এ বসানো NAT Gateway-এর মাধ্যমে, কখনোই সরাসরি IGW থেকে না।