สรุป: ฉันคิดว่าฉันขาดบางเส้นทางบนเซิร์ฟเวอร์ Ubuntu ของฉันที่เชื่อมต่อกับ AWS VPN ด้วย Strongswan Ipsec มีความคิดไหมว่าฉันต้องการเส้นทางใดบนเซิร์ฟเวอร์ของฉัน
ฉันกำลังพยายามตั้งค่า BGP ที่กำหนดเส้นทาง VPN จากเซิร์ฟเวอร์ไปยัง AWS ฉันได้ใช้งาน VPN ที่กำหนดเส้นทางแบบคงที่ ดังนั้นฉันจึงรู้ว่าฝั่ง AWS และ ipsec ของฉันถูกต้อง อย่างไรก็ตาม BGP พิสูจน์ได้ยาก
ฉันใช้ Strongswan บน Ubuntu เป็นด้าน "ลูกค้า" ipsec tunnels ของฉันขึ้นแล้ว (ยืนยันโดย สถานะ ipsec
และในคอนโซล AWS) ปัญหาดูเหมือนว่าไคลเอนต์ BGP (frr) ของฉันไม่สามารถเชื่อมต่อกับกระบวนการ BGP ใน AWS (และในทางกลับกัน)
ใช้หนึ่งในสองอุโมงค์ ไอพี
มีลักษณะดังนี้:
5: tunnel1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1419 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1000
ลิงค์/ipip 1.2.3.4 เพียร์ 2.3.4.5
inet 169.254.10.146 peer 169.254.10.145/30 ขอบเขต global tunnel1
valid_lft ตลอดไป reserved_lft ตลอดไป
อินเทอร์เฟซถูกสร้างขึ้นด้วยสคริปต์ที่เรียกโดย Strongswan ซึ่งมีลักษณะดังนี้:
ip tunnel เพิ่ม ${VTI_INTERFACE} โลคัล ${PLUTO_ME} รีโมต ${PLUTO_PEER} โหมด vti คีย์ ${PLUTO_MARK_IN_ARR[0]}
sysctl -w net.ipv4.conf.${VTI_INTERFACE}.disable_policy=1
sysctl -w net.ipv4.conf.${VTI_INTERFACE}.rp_filter=2 || sysctl -w net.ipv4.conf.${VTI_INTERFACE}.rp_filter=0
ip addr เพิ่ม ${VTI_LOCALADDR} ระยะไกล ${VTI_REMOTEADDR} dev ${VTI_INTERFACE}
ip link ตั้ง ${VTI_INTERFACE} ขึ้น mtu ${MTU}
iptables -t mangle -I FORWARD -o ${VTI_INTERFACE} -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t mangle -I INPUT -p esp -s ${PLUTO_PEER} -d ${PLUTO_ME} -j MARK --set-xmark ${PLUTO_MARK_IN}
ฉันมีเส้นทางดังนี้:
169.254.10.144/30 dev tunnel1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 169.254.10.146
ฉันสามารถ ping ปลายทางท้องถิ่น (ลูกค้า) ของฉัน (169.254.10.146) ได้ แต่ส่งคำสั่ง ping ปลายทางระยะไกลว่า:
PING 169.254.10.145 (169.254.10.145) 56(84) ไบต์ของข้อมูล
จาก 169.254.10.146 icmp_seq=1 ไม่สามารถเข้าถึงโฮสต์ปลายทางได้
แม้จะบอกว่าไม่สามารถเข้าถึงได้ แต่ฉันเห็นแพ็กเก็ตบนอินเทอร์เฟซอุโมงค์ แม้ว่าจะไม่ปรากฏว่าจริง ๆ แล้วสิ่งนี้ถูกส่งไปตามอุโมงค์ไปยัง AWS (อย่างน้อย สถิติของ AWS Cloudwatch จะไม่แสดงกิจกรรมเพิ่มเติม)
หนึ่งในขั้นตอนการดีบัก BGP คือการพยายาม 'telnet' ไปยังเพื่อนบ้าน (169.254.10.145) บนพอร์ต 179 - แต่สิ่งนี้ล้มเหลวด้วย "ไม่มีเส้นทางไปยังโฮสต์" น่าแปลกที่ฉันเห็น AWS พยายามเชื่อมต่อกับไคลเอนต์ BGP ของฉันใน tcpdump บนอินเทอร์เฟซอุโมงค์:
12:49:45.860899 IP 169.254.10.145.43731 > 169.254.10.146.179: ค่าสถานะ [S], seq 857645259, ชนะ 26880, ตัวเลือก [mss 1375,sackOK,TS val 3261400514 ecr 0,nop length,wscale 7],
12: 49: 45.860931 IP 169.254.10.146.179> 169.254.10.145.43731: ธง [S. ], SEQ 2284055933, ACK 857645260, Win 64249 ], ความยาว 0
ดูเหมือนว่าเซิร์ฟเวอร์ของฉันกำลังส่งคืนแพ็กเก็ต ACK แต่การเชื่อมต่อไม่เคยเกิดขึ้น ถ้าฉันหยุดบริการ BGP เราจะเริ่มส่งการตอบกลับ RST:
12:52:02.055473 IP 169.254.10.145.43679 > 169.254.10.146.179: ค่าสถานะ [S], seq 2280717367, ชนะ 26880, ตัวเลือก [mss 1375,sackOK,TS val 3261536708 ecr 0,nop length,wscale 7], 0
12:52:02.055498 IP 169.254.10.146.179 > 169.254.10.145.43679: ค่าสถานะ [R.], seq 0, ack 1, ชนะ 0, ความยาว 0
จากนี้ฉันเดาว่าแพ็กเก็ต ACK ของเคอร์เนลและแพ็กเก็ต ping ของฉันกำลังไปที่อินเทอร์เฟซช่องสัญญาณ แต่ไม่ได้เข้าสู่ ipsec หรือไปที่ AWS
ดูเหมือนว่าฉันต้องการเพิ่มเส้นทางเพิ่มเติม แต่ฉันคิดไม่ออกว่าต้องใช้อะไรบ้าง รู้สึกเหมือนมีทุกอย่างเข้าที่แล้ว ฉันได้ดูตัวอย่างและคำแนะนำมากมายนับไม่ถ้วน แต่มีเพียงไม่กี่รายการที่แสดงสิ่งที่ฉันไม่มี และแม้แต่น้อยยืนยันว่าฉันต้องการเส้นทางที่ฉันคิดว่าฉันต้องการ หรือเส้นทางใดที่จำเป็นสำหรับ BGP ในการทำงาน ความช่วยเหลือใด ๆ ที่ชื่นชมมาก