หากต้องการรับที่อยู่ IP สาธารณะที่เชื่อมโยงกับอินเทอร์เฟซที่กำหนด ก่อนอื่น ให้รับที่อยู่ MAC จากอินเทอร์เฟซ จากนั้นดึงข้อมูลที่คุณต้องการจาก Instance Metadata Service (IMDS) ในตัวอย่างของคุณด้านบน eth1 มี
หมายเลขทางกายภาพ 06:a6:9a:4a:98:c6
เพื่อให้คุณได้รับที่อยู่ IPv4 สาธารณะด้วย:
ขด http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:1d:90:af:65:a3/public-ipv4s
มีข้อมูลเพิ่มเติมใน เอกสาร AWS
สำหรับปัญหาการเชื่อมต่อของคุณ ในขั้นตอนแรก ให้ตรวจสอบการกำหนดค่าการกำหนดเส้นทาง VPC, ACL และกลุ่มความปลอดภัยที่เกี่ยวข้องกับ ENI แต่ละตัวของคุณอีกครั้ง รายละเอียดเหล่านี้ง่ายต่อการกำหนดค่าผิด และอาจส่งผลให้ทราฟฟิกลดลงหากคุณพลาดบางอย่าง ไปตรวจสอบรายละเอียดเหล่านั้นก่อน แล้วค่อยกลับมาอ่านส่วนที่เหลือของโพสต์นี้ มีปัญหาที่ละเอียดอ่อนอีกปัญหาหนึ่งที่เกิดขึ้นเมื่อคุณมี ENI หลายรายการที่เชื่อมโยงกับอินสแตนซ์ และปัญหานั้นอาจเป็นปัญหาของคุณ
AWS VPC ใช้การป้องกันการปลอมแปลงอย่างเข้มงวด นี่เป็นสิ่งที่ดี เนื่องจากปกป้อง AWS และลูกค้าจากการเข้าร่วมในการโจมตีเครือข่ายรูปแบบต่างๆ ในกรณีที่อินสแตนซ์ถูกบุกรุกด้วยเหตุผลบางประการ อย่างไรก็ตาม เป็นสิ่งที่คุณต้องคำนึงถึงเมื่อแนบ ENI หลายรายการเข้ากับอินสแตนซ์
ปัญหาคือพฤติกรรมการกำหนดเส้นทางพื้นฐานขับเคลื่อนโดยเท่านั้น ปลายทาง ของแพ็คเก็ตขาออก ซึ่งหมายความว่าการตอบกลับแพ็กเก็ตขาเข้าอาจไม่ได้ส่งผ่านอินเทอร์เฟซเดียวกับที่ได้รับแพ็กเก็ตเดิม แต่สำหรับ VPC แล้ว สิ่งนี้ถือเป็นแพ็กเก็ต "ปลอมแปลง" เนื่องจากที่อยู่ต้นทางในแพ็กเก็ตตอบกลับไม่ตรงกับที่อยู่ IP ส่วนตัวใดๆ ที่เชื่อมโยงกับ ENI
พิจารณาการกำหนดค่าอินเทอร์เฟซและตารางเส้นทางต่อไปนี้:
admin@ip-10-0-0-115:~$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1,000
inet 127.0.0.1/8 ขอบเขตโฮสต์ lo
valid_lft ตลอดไป reserved_lft ตลอดไป
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP กลุ่มเริ่มต้น qlen 1000
ชื่ออื่น enp0s5
inet 10.0.0.115/24 brd 10.0.0.255 ขอบเขตโกลบอลไดนามิก ens5
valid_lft 2801 วินาทีที่ต้องการ_lft 2801 วินาที
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP กลุ่มเริ่มต้น qlen 1000
ชื่ออื่น enp0s6
inet 10.0.0.8/24 brd 10.0.0.255 ขอบเขตโกลบอลไดนามิก ens6
valid_lft 2889 วินาทีที่ต้องการ_lft 2889 วินาที
admin@ip-10-0-0-115:~$ ip ro
ค่าเริ่มต้นผ่าน 10.0.0.1 dev ens5
10.0.0.0/24 dev ens5 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.0.115
10.0.0.0/24 dev ens6 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.0.8
ในกรณีนี้ 10.0.0.8 เป็นที่อยู่ที่กำหนดให้กับ ens6 แพ็กเก็ตขาเข้าไปยังที่อยู่ IP นี้จะได้รับผ่าน ens6 และดำเนินการตามที่คาดไว้ แต่การตอบกลับขาออกไปยังแพ็กเก็ตนั้นจะถูกกำหนดเส้นทางตามตารางเส้นทางด้านบน และจะออกทาง ens5 และถูกทิ้งโดย VPC
คุณสามารถทดสอบได้ดังนี้:
admin@ip-10-0-0-115:~$ ip ro รับ 8.8.8.8 จาก 10.0.0.8
8.8.8.8 จาก 10.0.0.8 ผ่าน 10.0.0.1 dev ens5 uid 1000
แคช
โปรดทราบว่าอุปกรณ์เป็น ens5 แม้ว่า 10.0.0.8 จะถูกกำหนดให้กับ ens6! VPC จะยกเลิกการรับส่งข้อมูลนี้!
เพื่อให้แน่ใจว่าแพ็กเก็ตของคุณถูกส่งโดย VPC คุณต้องดำเนินการ การกำหนดเส้นทางนโยบาย. กล่าวอย่างกว้างๆ การกำหนดเส้นทางนโยบายหมายถึงสถานการณ์ที่ระบบของคุณใช้ข้อมูลเพิ่มเติมนอกเหนือจากปลายทางเพื่อทำการตัดสินใจเกี่ยวกับการกำหนดเส้นทาง ในกรณีนี้ คุณต้องคำนึงถึงที่อยู่ IP ต้นทางด้วย สิ่งที่เราต้องทำที่นี่คือให้แน่ใจว่าแพ็กเก็ตขาออกที่มีซอร์สแอดเดรส 10.0.0.8 ออกจาก ens6
โดยทั่วไปการกำหนดเส้นทางนโยบายใน Linux จะได้รับการกำหนดค่าโดยใช้ ไอพี(8)
สั่งการ. ในการทำให้อินสแตนซ์ที่มีตารางเส้นทางด้านบนทำงานได้ คุณจะต้องสร้างตารางเส้นทางสำรองสำหรับ ens6 โดยเฉพาะ การจัดการตารางรองทำงานเหมือนกับการจัดการตาราง 'หลัก' เว้นแต่คุณจะระบุรหัสตารางดังนั้น ในกรณีนี้ เราสามารถเพิ่มเส้นทางไปยังเครือข่ายท้องถิ่นและเส้นทางเริ่มต้นผ่านเกตเวย์ไปยังตาราง 10,000 ดังนี้:
admin@ip-10-0-0-115:~$ sudo ip ro เพิ่ม 10.0.0.0/24 dev ens6 ตาราง 10,000
admin@ip-10-0-0-115:~$ sudo ip ro เพิ่มค่าเริ่มต้นผ่าน 10.0.0.1 ตาราง 10,000
admin@ip-10-0-0-115:~$ ip ro โชว์ตาราง 10,000
ค่าเริ่มต้นผ่าน 10.0.0.1 dev ens6
ลิงก์ขอบเขต 10.0.0.0/24 dev ens6
และสร้างกฎเพื่อกำหนดเส้นทางการรับส่งข้อมูลขาออกจาก 10.0.0.8 ตามตารางนี้:
admin@ip-10-0-0-115:~$ sudo ip rule เพิ่มจาก 10.0.0.8/32 table 10,000 pref 10,000
admin@ip-10-0-0-115:~$ กฎไอพี
0: จากการค้นหาทั้งหมดในท้องถิ่น
10,000: จาก 10.0.0.8 ค้นหา 10,000
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
สังเกตว่ามีกฎ 10,000 แสดงว่าทราฟฟิกจาก 10.0.0.8 จะถูกส่งผ่านตาราง 10,000
เราสามารถยืนยันสิ่งนี้ด้วย ip ro ได้รับ
อีกครั้ง:
admin@ip-10-0-0-115:~$ ip ro รับ 8.8.8.8 จาก 10.0.0.8
8.8.8.8 จาก 10.0.0.8 ผ่าน 10.0.0.1 dev ens6 ตาราง 10,000 uid 1,000
แคช
สังเกตว่ามันกำหนดเส้นทางตามตาราง 10000 แต่ที่สำคัญมันจะส่งผ่านอุปกรณ์ ens6!
Amazon Linux ตั้งค่ากฎการกำหนดเส้นทางนโยบายเช่นนี้โดยอัตโนมัติเมื่อคุณแนบ ENI หลายรายการกับอินสแตนซ์ของคุณ ฉันไม่รู้ว่าอูบุนตูมีหรือไม่ ดังนั้นคุณอาจต้องทำการวิจัยเล็กน้อยในส่วนนั้นและอาจใช้ระบบอัตโนมัติของคุณเองสำหรับสถานการณ์เฉพาะของคุณ