ข้อผิดพลาดส่วนใหญ่ของ AWS Site-to-Site VPN เป็นข้อผิดพลาดเรื่องที่อยู่ และเกิดขึ้นก่อนที่แพ็กเก็ตใดจะขยับ ที่อยู่ภายนอกของอุโมงค์ไปถึงเพื่อน IPsec ที่อยู่ภายในสร้างลิงก์การกำหนดเส้นทางระหว่างกัน และคำนำหน้าที่ได้รับการป้องกันคือสิ่งที่ลิงก์นั้นมีไว้เพื่อ คัดลอกบทบาทหนึ่งไปอีกบทบาทหนึ่ง อุโมงค์จะขึ้นแต่ไม่มีอะไรถูกกำหนดเส้นทาง ลำดับอ่าน-ตรวจสอบ-กำหนดค่าที่ผมใช้บนเกตเวย์ลูกค้า BGP คือดังนี้ ค่าต่างๆ มาจากการกำหนดค่าอุปกรณ์ที่ดาวน์โหลดมา ไม่ใช่จากความจำ

สามบทบาทของที่อยู่ หนึ่งอุโมงค์

ที่อยู่ภายนอกเป็นสาธารณะและเป็นของเพื่อน IPsec: หนึ่งต่ออุโมงค์ฝั่ง AWS และตัวตนที่เข้าถึงได้ของเกตเวย์ลูกค้าฝั่งคุณ ปรับให้เข้ากับการจัดวาง NAT ที่คุณมีจริง ที่อยู่ภายในเป็นส่วนตัวและเป็นของลิงก์เชิงตรรกะ ซึ่ง AWS เอกสารไว้ว่าเป็น /30 ที่ดึงมาจาก 169.254.0.0/16 คำนำหน้าที่ได้รับการป้องกัน คือเครือข่าย VPC ภายในองค์กร หรือทรานซิตที่คุณกำหนดเส้นทางและประกาศผ่านลิงก์นั้น

การกำหนดคำนำหน้า LAN เป็นที่อยู่ของอินเทอร์เฟซอุโมงค์คือรูปแบบคลาสสิกของข้อผิดพลาดนี้ อินเทอร์เฟซดูเหมือนกำหนดค่าแล้ว LAN ไม่ถูกประกาศ และฝั่งตรงข้ามไม่มีเส้นทางไปยังมัน อุโมงค์อาจผ่าน ping ภายในของตัวเองได้ด้วยซ้ำ ขณะที่ชื่อแอปพลิเคชันทุกตัวหมดเวลา เอกสารอ้างอิงตัวเลือกอุโมงค์ ระบุข้อจำกัดของ CIDR ภายใน รวมถึงช่วงที่อยู่ที่ต้องมาจาก

อ่านค่าจากการกำหนดค่าที่ดาวน์โหลดมา

ดาวน์โหลดการกำหนดค่าสำหรับรุ่นอุปกรณ์เฉพาะของคุณจากหน้าการเชื่อมต่อ แล้วถือว่าตารางที่อยู่ของมันเป็นแหล่งความจริง คอนโซลแสดงค่าเดียวกันต่ออุโมงค์: IP ภายนอก CIDR ภายใน และที่อยู่เพื่อน BGP ฝั่ง AWS อุโมงค์ทั้งสองเป็นออบเจ็กต์แยกกัน โดยมีปลายทางภายนอกแยกกันและ /30 ภายในแยกกัน แม้ทั้งคู่จะบรรทุกเครือข่ายที่ได้รับการป้องกันชุดเดียวกัน

aws ec2 describe-vpn-connections --vpn-connection-ids vpn-0123456789abcdef0 \
  --query 'VpnConnections[0].Options.TunnelOptions[].[OutsideIpAddress,TunnelInsideCidr]'
aws ec2 describe-customer-gateways --customer-gateway-ids cgw-0123456789abcdef0 \
  --query 'CustomerGateways[0].[IpAddress,BgpAsn]'

ถ้าไฟล์ที่ดาวน์โหลดกับคอนโซลสดไม่ตรงกัน ไฟล์นั้นล้าสมัย ดาวน์โหลดใหม่แทนการแก้ที่อยู่ด้วยมือ เพราะความไม่ตรงกันระหว่างคู่ภายในกับเพื่อนบ้านที่กำหนดค่าไว้ของเพื่อนคือความล้มเหลว BGP แบบเงียบ

สร้างลิงก์ด้วยที่อยู่ที่ถูกต้อง

บนเกตเวย์ Linux อุโมงค์เป็นอินเทอร์เฟซ VTI หรือ XFRM และ /30 ภายในวางบนอินเทอร์เฟซนั้น สองอุโมงค์หมายถึงสองอินเทอร์เฟซและเพื่อนบ้าน BGP สองราย หนึ่งรายต่อปลายทาง AWS ธรรมเนียมที่ AWS พิมพ์ในการกำหนดค่าอุปกรณ์ที่ดาวน์โหลดมาวางเกตเวย์ส่วนตัวเสมือนบนที่อยู่แรกของทุก /30 ภายใน และวางเกตเวย์ลูกค้าของคุณบนที่อยู่ที่สอง คุณจึงใช้ที่อยู่ที่สูงกว่าและเพียร์กับที่อยู่ที่ต่ำกว่า ไม่มีอะไรตรงนี้ต้องใช้ที่อยู่ LAN

ip tunnel add tun0 mode vti local 203.0.113.10 remote 18.230.1.1 key 42
ip addr add 169.254.10.2/30 dev tun0
ip link set tun0 up mtu 1400
ip tunnel add tun1 mode vti local 203.0.113.10 remote 18.230.2.1 key 43
ip addr add 169.254.10.6/30 dev tun1
ip link set tun1 up mtu 1400

ถ้าไฟล์สำหรับรุ่นอุปกรณ์ของคุณพิมพ์คู่กลับกัน ให้ใช้ตัวเลขของมันและยึดกฎไว้: ที่อยู่บนอินเทอร์เฟซเป็นของคุณ ที่อยู่เพื่อนเป็นของ AWS การทำกลับกันจะได้อุโมงค์ที่ไม่ถึง Established เพราะเพื่อนบ้านที่คุณกำหนดค่าไว้คือที่อยู่ที่อินเทอร์เฟซของคุณเองถืออยู่แล้ว

รักษา mark และคีย์ VTI ให้สอดคล้องกับสิ่งที่ดีมอน IKE ใช้ผูก SA ลูกกับอินเทอร์เฟซ มิฉะนั้นทราฟฟิกจะมาถึงอุโมงค์โดยไม่มีอินเทอร์เฟซให้ลงจอด ตรวจสอบ MTU เทียบกับเส้นทางและเทียบกับการตั้งค่าของดีมอน IKE เอง แทนที่จะคัดลอกตัวเลขจากไซต์อื่น

ตรวจสอบ BGP ก่อนตรวจสอบเส้นทาง

การที่ IPsec ขึ้นพิสูจน์ว่าเพื่อนตกลงกันเรื่องสมาคมความปลอดภัยเท่านั้น ไม่มากกว่านั้น เซสชัน BGP คือการเจรจาแยกต่างหากบนลิงก์ภายใน ดังนั้นอ่านสถานะเพื่อนบ้านและตัวนับคำนำหน้า แล้วเปรียบเทียบกับสิ่งที่คุณตั้งใจจะประกาศ

ip -s addr show dev tun0
vtysh -c 'show bgp summary'
vtysh -c 'show bgp neighbors 169.254.10.1'
vtysh -c 'show ip bgp neighbors 169.254.10.1 advertised-routes'

สถานะ Established กับคำนำหน้าที่ได้รับเป็นศูนย์คือปัญหาเชิงนโยบายหรือการประกาศ ไม่ใช่ปัญหาอุโมงค์ ทำการตรวจสอบทั้งหมดซ้ำบนอุโมงค์ที่สอง อุโมงค์แรกที่ทำงานได้บอกคุณว่าที่อยู่เป็นไปได้ ไม่ได้บอกว่าอุโมงค์ที่สองถูกกำหนดค่าไว้เลย

ติดตามแพ็กเก็ตที่ถูกกำหนดเส้นทาง แล้วหยุด

เมื่อเซสชันบรรทุกคำนำหน้าแล้ว ให้ทดสอบเส้นทางทั้งสองทิศทางจากเกตเวย์: ที่อยู่ต้นทาง ฮอปถัดไป และนโยบายความปลอดภัยที่อนุญาตทราฟฟิก เซสชัน BGP อาจขึ้นอยู่ขณะที่คำนำหน้าเฉพาะที่แอปพลิเคชันของคุณต้องการถูกกรอง ถูกสรุป หรือชี้ไปยังอินเทอร์เฟซที่ผิด

Reachability Analyzer คือเครื่องมือฝั่ง AWS ที่รับต้นทาง ปลายทาง และเส้นทาง แล้วรายงานว่าองค์ประกอบใดในการกำหนดค่าที่รองรับได้ปิดกั้นมัน ใช้มันทดสอบเส้นทางจาก VPC ไปยังที่อยู่เกตเวย์ลูกค้าของคุณ ไม่ใช่จากโฮสต์แอปพลิเคชัน มันวิเคราะห์การกำหนดค่าและไม่ส่งแพ็กเก็ตผ่านไฟร์วอลล์ภายในองค์กร ดังนั้นแยกคำตัดสินของมันออกจากตัวนับอินเทอร์เฟซและการดักจับแพ็กเก็ตของคุณเอง

บันทึกคู่ภายนอก /30 ภายใน และคำนำหน้าที่ประกาศสำหรับแต่ละอุโมงค์ไว้ในตารางเดียว ตารางนั้นคือสิ่งที่ทำให้การเปลี่ยนแปลงครั้งต่อไปตรวจทานได้

บทความที่เกี่ยวข้อง