AWS อนุญาตให้นักพัฒนาสร้างอินสแตนซ์ NAT ในซับเน็ตสาธารณะ และให้ซับเน็ตส่วนตัวสามารถเข้าถึงอินเทอร์เน็ตได้
นี่คือขั้นตอนในการสร้างอินสแตนซ์ NAT สำหรับการกำหนดค่า iptables เป็นการเปลี่ยนแปลงเพียงบรรทัดเดียว
ในคอนโซล EC2 ให้ปิดใช้งานการตรวจสอบต้นทาง/ปลายทางโดยคลิกขวาที่อินสแตนซ์ที่คุณต้องการใช้สำหรับ NAT แล้วเลือก "เปลี่ยนการตรวจสอบต้นทาง/ปลายทาง"
สร้างกลุ่มความปลอดภัยที่มีกฎขาเข้าที่อนุญาต ALL จาก 10.0.0.0/16 และเชื่อมโยงกับอินสแตนซ์ NAT ของคุณ
ในอินสแตนซ์ NAT ให้สร้าง /etc/network/if-pre-up.d/nat-setup เป็น:
#!/bin/sh
เสียงสะท้อน 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A โพสต์ -s 10.0.0.0/16 -j MASQUERADE
chmod +x สคริปต์ จากนั้นเรียกใช้ สคริปต์นี้จะทำงานโดยอัตโนมัติเมื่อเครื่องรีบูต ดังนั้น NAT ของคุณจะอยู่รอดได้เมื่อรีสตาร์ท
ตรวจสอบให้แน่ใจว่าซับเน็ตส่วนตัวทั้งหมดของคุณมีเส้นทางเริ่มต้นเพื่อใช้อินสแตนซ์ NAT เป็นเกตเวย์ (สร้างเส้นทางสำหรับ 0.0.0.0/0 และเชื่อมโยงกับอินสแตนซ์ NAT ของคุณในตารางเส้นทางที่เชื่อมโยงกับซับเน็ตส่วนตัวของคุณ)
ทดสอบ NAT ของคุณด้วยการส่ง Ping บางอย่างจากอินสแตนซ์ EC2 ในซับเน็ตส่วนตัว
การเชื่อมต่อเริ่มต้นจากภายใน
หากการเชื่อมต่อเริ่มต้นจากภายใน ฉันถือว่าอินสแตนซ์ NAT ทำงานในวิธีนี้
EC2 Instance A (ในเครือข่ายย่อยส่วนตัว) ต้องการเข้าถึงเว็บเซิร์ฟเวอร์ C ในอินเทอร์เน็ต
EC2 อินสแตนซ์ A ในซับเน็ตส่วนตัวส่งแพ็กเก็ตไปยัง NAT อินสแตนซ์ B
NAT อินสแตนซ์ B ส่งต่อแพ็กเก็ตและทำงาน SNAT เช่น
- เปลี่ยน ip ต้นทางในแพ็กเก็ต
- บันทึกการเชื่อมต่อที่ใช้งานนี้ไปยังตาราง conntrack
แพ็คเก็ตมาถึงเซิร์ฟเวอร์ C ในอินเทอร์เน็ต
เซิร์ฟเวอร์ C ส่งแพ็กเก็ตกลับไปยัง NAT อินสแตนซ์ B
เนื่องจากการเชื่อมต่ออยู่ใน ตาราง conntrack
, แพ็คเก็ตทั้งหมดได้รับการยอมรับ
การเชื่อมต่อเริ่มต้นจากภายนอก
ถ้ามีคนในอินเทอร์เน็ตเริ่มต้นการเชื่อมต่อโดยตรงและส่งแพ็กเก็ตไปยังอินสแตนซ์ NAT เช่น การเข้าสู่ระบบ ssh หรือ ping
อินสแตนซ์ NAT จะทำอะไร
iptables ของอินสแตนซ์ NAT จะจัดการการรับส่งข้อมูลตามการกำหนดค่าในย่อหน้าก่อนหน้านี้อย่างไร
อ้างอิง
- สาระสำคัญของ Github: การสร้างอินสแตนซ์ AWS NAT
- Kabisa: ประหยัดค่าใช้จ่ายด้วยอินสแตนซ์ NAT
- AWS: อินสแตนซ์ NAT