การทำงานของ IPsec แบบอิงเส้นทางกับอินเทอร์เฟซ XFRM
อินเทอร์เฟซ XFRM มอบอุปกรณ์ให้ IPsec แบบอิงเส้นทางใช้เป็นทางผ่าน if_id สมาคมความปลอดภัยที่อยู่เบื้องหลัง และเส้นทางภายนอกต้องสอดคล้องกันทั้งหมด
IPsec แบบอิงเส้นทางมอบการตัดสินใจที่เดิมตัวเลือกนโยบายเป็นผู้กำหนดให้กับตารางเส้นทาง บน Linux ชิ้นส่วนที่ทำให้สิ่งนี้เป็นไปได้คืออินเทอร์เฟซ XFRM ซึ่งเป็นอุปกรณ์เสมือนที่จราจรถูกจับคู่กับสถานะ IPsec ด้วยตัวระบุอินเทอร์เฟซแทนที่จะเป็นตัวเลือก การสร้างหนึ่งอันใช้เพียงคำสั่งเดียวและไม่ได้พิสูจน์อะไรเกี่ยวกับการมีอยู่ของอุโมงค์ อุปกรณ์นี้เป็นตะขอกลางระหว่างการกำหนดเส้นทางกับนโยบายความปลอดภัย และต้องกำหนดค่าทั้งสองด้านของตะขอนี้ก่อนที่สิ่งใดจะได้รับการป้องกัน
อุปกรณ์คืออะไรและไม่ใช่อะไร
อินเทอร์เฟซ XFRM คือที่จับสำหรับการกำหนดเส้นทาง แพ็กเก็ตที่ถูกกำหนดเส้นทางเข้ามาจะถูกจับคู่กับนโยบาย XFRM ที่อ้างถึงตัวระบุอินเทอร์เฟซเดียวกัน และหากมีนโยบายและสถานะอยู่ แพ็กเก็ตเหล่านั้นจะถูกห่อหุ้ม หากไม่มีสิ่งเหล่านั้น อินเทอร์เฟซก็ยังอยู่ ตัวนับไม่ขยับ และจราจรก็ไปยังที่ที่ไม่เกิดประโยชน์
นี่คือการแบ่งแยกเพื่อวินิจฉัยขั้นแรก เส้นทางเข้าสู่อุปกรณ์เป็นข้อเท็จจริงของการกำหนดเส้นทาง ส่วนสถานะที่ติดตั้งไว้เป็นข้อเท็จจริงด้านความปลอดภัย และตัวนับที่เพิ่มขึ้นบนอุปกรณ์ไม่ใช่ทั้งสองอย่าง เมื่อผู้คนกล่าวว่าอุโมงค์ทำงานอยู่เพราะอินเทอร์เฟซแสดง UP พวกเขากำลังอธิบายแฟล็กการเชื่อมต่อของอุปกรณ์เสมือนที่ไม่มีคู่ของตนเอง แฟล็กนั้นหมายความว่าอุปกรณ์ถูกสร้างและเปิดใช้งานเท่านั้น
อีกขอบเขตหนึ่ง ตัวระบุอินเทอร์เฟซไม่ใช่ชื่อ อุปกรณ์สองเครื่องที่มีชื่อคล้ายกันแต่ตัวระบุต่างกันไม่ได้ใช้สถานะร่วมกัน และการเชื่อมต่อที่กำหนดค่าด้วยตัวระบุผิดจะติดตั้งสถานะที่ไม่มีเส้นทางใดจะใช้งานเลย
สร้างหนึ่งอันตามลำดับที่ถูกต้อง
เริ่มจากอุปกรณ์ภายนอกและตัวเลขที่คุณจะใส่ในคอนฟิกของดีมอนด้วย ตัวอย่างใช้ eth0 เป็นอินเทอร์เฟซภายนอกและ 42 เป็นตัวระบุ ซึ่งเป็นแอดเดรสที่คุณควรแทนที่ด้วยของคุณเอง
ยกอุปกรณ์ขึ้น แล้วยืนยันตัวระบุที่เคอร์เนลบันทึกไว้ก่อนแตะต้องคอนฟิก VPN
sudo ip link add xfrm0 type xfrm dev eth0 if_id 42
sudo ip link set xfrm0 up
ip -d link show xfrm0 | grep -o 'if_id [0-9]*'ตอนนี้กำหนดค่าการเชื่อมต่อใน strongSwan ด้วยตัวระบุเดียวกัน เพราะดีมอนต้องติดตั้งนโยบายและสถานะที่อ้างถึงตัวระบุดังกล่าว ตั้งค่าตัวเลือกจราจรภายในและระยะไกลให้เป็นช่วงที่คุณตั้งใจจะกำหนดเส้นทาง แล้วกำหนดเส้นทางช่วงนั้นเข้าสู่อุปกรณ์ คอนฟิกของดีมอนและตารางเส้นทางต้องเห็นตรงกันทั้งเรื่องตัวระบุและปลายทาง และไม่มีฝ่ายใดจัดหาให้อีกฝ่าย
เก็บ IKE และ ESP ไว้นอกเส้นทางของอุโมงค์
เส้นทางเริ่มต้นที่ชี้เข้าสู่อุปกรณ์ XFRM จะดักจับทั้งแพ็กเก็ตที่ถูกห่อหุ้มและจราจรที่แพ็กเก็ตเหล่านั้นบรรทุก ผลลัพธ์คือวงวน เกตเวย์พยายามส่ง ESP ของตัวเองผ่านอุโมงค์ที่ ESP ควรสร้าง
วิธีแก้คือ เส้นทางที่เฉพาะเจาะจงกว่าสำหรับแอดเดรสภายนอกของคู่ ผ่านอินเทอร์เฟซทางกายภาพ ซึ่งชนะเส้นทางเริ่มต้นเพราะตรงกับบิตมากกว่า การกำหนดเส้นทางแบบอิงเครื่องหมายทำงานเดียวกันเมื่อหลายอุโมงค์ใช้ตารางร่วมกัน และ strongSwan เอกสารทั้งสองแนวทางสำหรับการติดตั้งแบบอิงเส้นทาง
ไม่ว่าคุณจะเลือกแบบใด ตรวจสอบว่าแพ็กเก็ตภายนอกออกไปโดยไม่ถูกห่อหุ้ม การตรวจสอบเร็ว ๆ คือ ping ไปยังแอดเดรสภายนอกของคู่หลังอุโมงค์ขึ้น หากล้มเหลวทั้งที่อินเทอร์เฟซขึ้น ให้สงสัยการดักจับมากกว่าการเข้าถึง เหตุผลเดียวกันใช้กับพอร์ต IKE เพราะจราจร UDP ของดีมอนเองต้องไม่ถูกกำหนดเส้นทางเข้าสู่อุปกรณ์ที่มันกำลังพยายามสถาปนา
ตรวจสอบตัวนับในสองตำแหน่งก่อนโทษการเข้ารหัส
ตัวนับของอินเทอร์เฟซและตัวนับของสถานะวัดคนละขั้นตอน แพ็กเก็ตที่ถูกกำหนดเส้นทางเข้าสู่อุปกรณ์จะเพิ่มตัวนับของอุปกรณ์แม้ไม่มีสถานะใดตรงกัน ขณะที่ตัวนับของสถานะจะขยับเฉพาะจราจรที่ถูกห่อหุ้มจริงเท่านั้น
อ่านทั้งสองอย่าง แล้วอ่านมุมมองของดีมอนต่อสมาคมลูก
ip -s link show xfrm0
sudo ip xfrm state list | grep -E 'src|proto|mode'
sudo swanctl --list-sasตัวนับของอุปกรณ์เพิ่มขึ้นพร้อมผลลัพธ์สถานะว่างเปล่า หมายความว่าการกำหนดเส้นทางทำงานแต่นโยบายไม่ตรงกัน ซึ่งมักเป็นความผิดพลาดของตัวระบุหรือตัวเลือก ตัวนับของสถานะเพิ่มขึ้นขณะที่ฝั่งไกลไม่รายงานอะไรเลย หมายความว่าแพ็กเก็ตออกไปแต่ไม่ถึงหรือล้มเหลวในการยืนยันตัวตน ซึ่งชี้ไปที่เส้นทางหรือคอนฟิกของคู่ สมาคมลูกที่ระบุไว้โดยไม่มีจราจรเป็นปัญหาของตัวเลือกที่ปลายด้านหนึ่ง ไม่ใช่รหัสลับที่เสีย
ตัดสินใจว่าใครจะติดตั้งเส้นทาง
เจ้าของสองรายสำหรับตารางเส้นทางเดียวคือต้นเหตุปกติของการสั่นไหว หากดีมอนติดตั้งเส้นทางอัตโนมัติ ตัวจัดการเครือข่ายของคุณต้องไม่ติดตั้งเส้นทางเริ่มต้นผ่านอุปกรณ์เดียวกันด้วย และเส้นทางที่เพิ่มด้วยมือโดยสคริปต์เริ่มระบบจะถูกถอดออกเมื่อดีมอนกำหนดค่าใหม่ครั้งถัดไป
เลือกเจ้าของหนึ่งรายแล้วจดไว้ เมื่อดีมอนเป็นเจ้าของเส้นทาง ให้เก็บสคริปต์เริ่มระบบไว้นอกตารางและให้คำจำกัดความของการเชื่อมต่ออธิบายตัวเลือกจราจร เมื่อตัวจัดการเครือข่ายเป็นเจ้าของ ให้ปิดการติดตั้งอัตโนมัติและยอมรับว่าดีมอนจะไม่ซ่อมเส้นทางที่หายไปเมื่อเชื่อมต่อใหม่
กฎการส่งต่อและไฟร์วอลล์เป็นการตัดสินใจแยกต่างหากบนสิ่งนี้ เพราะเกตเวย์ที่ปล่อยจราจรของโฮสต์อื่นผ่านไปต้องมีทั้งสองอย่าง IPsec แบบอิงเส้นทางทำให้จราจรนั้นแสดงออกได้ง่ายด้วยเครื่องมือกำหนดเส้นทางทั่วไป แต่ไม่ได้ทำให้ชั้นนโยบายเป็นทางเลือก