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 Table | VPC বানানোর সময়েই এটা তৈরি হয়ে যায়। যে 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 মিলছে, তারপর সবচেয়ে নির্দিষ্টটা বেছে নেয়।
পরিস্থিতি
App Subnet-এর Route Table
| গন্তব্য | Target |
|---|---|
| 10.0.0.0/16 | local |
| 10.1.0.0/16 | pcx-0b2c (peering) |
| 192.168.0.0/16 | vgw-0a1b (VPN) |
| 0.0.0.0/0 | igw-0f9e |
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 available | AWS পুরো 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 খোলা।
ভেতরে আসছে যে Packet
Source IP
198.51.100.20
Destination IP
203.0.113.25
একজন 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-এর সাথে কথা বলতে পারবে কি না, তার জন্য আরও দুটো শর্ত পূরণ হতে হবে:
- Instance-এর একটা public IPv4 address বা Elastic IP থাকতে হবে (lesson 3.6)। Subnet-এ "auto-assign public IPv4 address" নামে একটা setting থাকে, নতুন Instance আপনা থেকে public IP পাবে কি না সেটা এটাই ঠিক করে।
- 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-এ থাকে:
- Public address: Instance-এর কি public IPv4 address বা Elastic IP আছে?
- Internet Gateway: VPC-তে কি IGW attach করা আছে?
- Route Table: Subnet-এর Route Table কি
0.0.0.0/0-কে ওই IGW-তে পাঠাচ্ছে? আর route-টা কিactive, নাকিblackholeহয়ে আছে? - Security Group: এটা কি traffic ঢুকতে দিচ্ছে? (ওই Port-এর জন্য inbound rule লাগবে; outbound তো default-ভাবেই খোলা।)
- Network ACL: এটা কি দুই দিকেই traffic যেতে দিচ্ছে? Ephemeral Port দিয়ে ফেরত আসা traffic-ও এর মধ্যে পড়ে।
Instance যদি private Subnet-এ থাকে:
- NAT Gateway: কোনো public Subnet-এ কি NAT Gateway আছে? (আর সেই Subnet-এর নিজের Route Table কি IGW-র দিকে route দিচ্ছে?)
- Route Table: Private Subnet-এর Route Table কি
0.0.0.0/0-কে ওই NAT Gateway-তে পাঠাচ্ছে? - এরপর আগের মতোই 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 থেকে না।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
একটা Route Table-এ আছে 0.0.0.0/0 → igw-1 আর 172.16.0.0/12 → vgw-1। 172.20.4.4-এ যাওয়া একটা Packet কোথায় যাবে?
নিজেকে যাচাই করোপ্রশ্ন
Public Subnet-এ public IP-সহ একটা Instance আছে, কিন্তু Port 443-এ সেটাকে পাওয়া যাচ্ছে না, browser-এ timeout দেখাচ্ছে। Route Table আর Internet Gateway দুটোই ঠিক আছে। এরপর কী দেখবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা Instance আছে 10.0.8.0/22 Subnet-এ। ও default gateway হিসেবে কোন address ব্যবহার করে?
নিজেকে যাচাই করোপ্রশ্ন
একটা টিম নতুন একটা Subnet বানাল, কিন্তু কোনো Route Table-এর সাথে জুড়ল না। Subnet-টা কোন Route Table ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
Route Table আর Subnet জোড়া লাগার ব্যাপারে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
Local route নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
VPC-র Route Table-এ route-এর target হিসেবে কোন দুটো দেওয়া যায়?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একজন engineer জোর দিয়ে বলছে, 0.0.0.0/0 route-টা table-এর একদম শেষে রাখতে হবে, নইলে VPC-র ভেতরের traffic-ও ওটা টেনে নেবে। আসলে কোনটা সত্যি?
নিজেকে যাচাই করোপ্রশ্ন
একটা Route Table-এ আছে 10.0.0.0/16 → local, 10.50.0.0/16 → pcx-1, 10.50.7.0/24 → tgw-1 আর 0.0.0.0/0 → nat-1। 10.50.7.20-এ যাওয়া Packet কোথায় যাবে?
নিজেকে যাচাই করোপ্রশ্ন
কোন একটা জিনিস থাকলেই একটা Subnet public Subnet হয়?
নিজেকে যাচাই করোপ্রশ্ন
Internet Gateway নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানির তিনটা VPC আছে। ঝামেলা কমাতে তারা একটাই Internet Gateway তিনটা VPC-তেই attach করতে চায়। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
Internet Gateway-র খরচ নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
Console-এ একটা EC2 Instance-এর public IPv4 দেখাচ্ছে 203.0.113.25, কিন্তু developer Instance-এর ভেতরে ip addr চালিয়ে দেখল শুধু 10.0.0.10। এর কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
IPv4 দিয়ে internet থেকে একটা EC2 Instance-এ পৌঁছাতে নিচের কোনটা লাগে না?
নিজেকে যাচাই করোপ্রশ্ন
একজন operator দেখল 0.0.0.0/0 → igw-0abc route-টার State লেখা blackhole। এর মানে কী?
নিজেকে যাচাই করোপ্রশ্ন
একজন solutions architect এমন একটা tool চায়, যেটা আসল traffic না পাঠিয়েই VPC-র দুটো resource-এর মাঝের পথ ধাপে ধাপে খুঁজে দেখবে, আর কোন route, Security Group বা Network ACL পথ আটকাচ্ছে তা নাম ধরে বলে দেবে। কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি অনেক traffic আশা করছে, তাই বেশি throughput পেতে VPC-তে দ্বিতীয় একটা Internet Gateway attach করতে চায়। Solutions architect কী বলবে?
নিজেকে যাচাই করোপ্রশ্ন
একজন solutions architect নিজের বানানো একটা VPC-তে নতুন Subnet বানাল, তার Route Table-এ 0.0.0.0/0 → igw দিল, তারপর default setting-এ একটা Instance চালু করল। Internet থেকে Instance-টাকে পাওয়া যাচ্ছে না, আর তার details-এ কোনো public IPv4 address নেই। সবচেয়ে সম্ভাব্য কারণ কী, আর সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
Security review-তে ধরা পড়ল, একটা টিম যত নতুন Subnet বানায়, সবগুলোতেই আপনা থেকে Internet Gateway-র দিকে route চলে আসে, অথচ টিমটা কখনো Route Table-এ হাতই দেয় না। কারণ কী, আর সবচেয়ে ভালো সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানির application server-গুলো private Subnet-এ চলে। ওদের internet থেকে operating system-এর patch নামাতে হবে, কিন্তু internet থেকে কেউ যেন ওদের কাছে পৌঁছাতে না পারে। কোন সমাধান এটা মেটায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা private Subnet-এর Instance-গুলো update নামাতে পারছে না। Public Subnet-এ একটা NAT Gateway আছে, আর private Subnet-এর Route Table 0.0.0.0/0 ওটার দিকেই পাঠাচ্ছে। কিন্তু public Subnet-এর Route Table-এ শুধু local route। সমস্যা কোথায়?
নিজেকে যাচাই করোপ্রশ্ন
Public Subnet-এর একটা web server-এর log-এ দেখা যাচ্ছে user-দের request ঠিকই আসছে, কিন্তু user-রা কোনো উত্তর পাচ্ছে না। Route Table-এ 0.0.0.0/0 → igw আছে, Security Group-এ inbound TCP 443 খোলা। সবচেয়ে সম্ভাব্য কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
একই VPC-র দুটো আলাদা Subnet-এর Instance নিজেদের মধ্যে কথা বলতে পারছে না। নিচের কোনটা কারণ হতে পারে না?
নিজেকে যাচাই করোপ্রশ্ন
Public Subnet-এর একটা EC2 Instance internet-এ যেতে পারছে না। নিচের কোন দুটো সমস্যার যেকোনো একটা একাই এর কারণ হতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানিকে internet থেকে আসা সব traffic public Subnet-এ পৌঁছানোর আগে একটা security appliance দিয়ে পরীক্ষা করাতে হবে। কোন routing feature দিয়ে এটা করা যায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা Route Table-এ আছে 10.0.0.0/16 → local, 192.168.0.0/16 → vgw-1 (অফিসের VPN) আর 0.0.0.0/0 → igw-1। কেউ ভুল করে 192.168.5.0/24 → igw-1 যোগ করে দিল। এখন 192.168.5.9 আর 192.168.6.9-এর traffic কোথায় যাবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা VPC আরেকটা VPC-র সাথে peering করা, ওই VPC-র range 10.20.0.0/16। কোম্পানি চায় ওই range-এর traffic যাবে peering connection pcx-1 দিয়ে, আর বাকি সব যাবে internet-এ। Local route ছাড়া আর কোন route লাগবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা VPC-র দুটো Availability Zone-এর প্রতিটায় একটা public আর একটা private Subnet আছে, আর প্রতি zone-এ একটা করে NAT Gateway। কোন দুটো Route Table design ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা web server-এর public IP আছে, Security Group আর Network ACL-এ HTTP খোলা। ওর Subnet ব্যবহার করে Main Route Table, যেখানে শুধু local route আছে। Internet থেকে একজন visitor request পাঠাল। কী হবে?