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

การโหลดไม่ใช่การเชื่อมต่อ

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

ผู้ดูแลระบบมักมีปัญหาจากการอ่านรายการคำนิยามเป็นรายการสถานะ โปรไฟล์อยู่ตรงนั้น จึงถือว่าทันเนลทำงานอยู่ และชั่วโมงถัดมาหมดไปกับการแก้เส้นทางของความสัมพันธ์ที่ไม่เคยถูกสร้าง

ความผิดพลาดตรงข้ามก็พบได้บ่อยเท่ากัน โปรไฟล์ที่หายไปทำให้คนออกไปหาปัญหาเครือข่ายทั้งที่คอนฟิกูเรชันไม่เคยถูกโหลด ตั้งชื่อวัตถุให้ชัด แล้วรันคำสั่งที่สังเกตมัน

สามวัตถุ สามการสังเกต

strongSwan เก็บคำนิยามที่โหลดไว้ หนึ่ง IKE SA และหนึ่ง CHILD SA อย่างแรกคือคอนฟิกูเรชัน อย่างที่สองคือความสัมพันธ์ควบคุมที่ผ่านการพิสูจน์ตัวตน และอย่างที่สามคือการป้องกันที่เจรจาแล้วสำหรับทราฟฟิกที่เลือก พวกมันมีชื่อแยกกันด้วยซ้ำ โปรไฟล์ชื่อ hq จึงสามารถมี child ชื่อ hq-lan ได้

ตารางจับคู่แต่ละชั้นกับคำสั่งที่แสดงมัน อ่านแถวก่อนอ่านบันทึก

LayerWhat it containsCommand
DefinitionPeer addresses, credentials, proposals, and traffic selectorsswanctl --list-conns
IKE SAOne authenticated control channel to the peerswanctl --list-sas
CHILD SAKeys and selectors for the traffic being protectedChild rows under the IKE SA

การขอ child จะสร้าง IKE SA แม่ของมันก่อนเมื่อยังไม่มี การขอแค่ IKE SA เป็นอีกการเรียกหนึ่ง ช่องควบคุมที่พิสูจน์ตัวตนได้ดีไม่ได้ประกัน child ที่คุณขอ

ความต่างนี้สำคัญเมื่อเกิดความล้มเหลวบางส่วน IKE SA อาจแข็งแรงอยู่ได้ ในขณะที่ child ล้มเหลวเพราะตัวเลือกไม่ตรงกันหรือข้อเสนอที่คู่ตรงข้ามไม่ยอมรับวัตถุสองชิ้นล้มเหลวด้วยเหตุต่างกัน จึงสมควรได้รับการสังเกตแยกกัน

เลือกการกระทำตอนเริ่มอย่างตั้งใจ

ใน swanctl.conf ค่า start_action ของ child กำหนดพฤติกรรมหลังโหลด ค่าเริ่มต้น none ปล่อยคำนิยามไว้ให้เริ่มด้วยมือหรือใช้เป็น responder ส่วน start จะโทรออก ในขณะที่ trap ทิ้งนโยบายที่จะเจรจาทันทีเมื่อมีทราฟฟิกที่เข้าคู่ปรากฏขึ้น

ดังนั้นทั้ง «การโหลดไม่เคยเริ่มทันเนล» และ «การโหลดเริ่มมันเสมอ» ต่างก็ผิด การกระทำเป็นส่วนหนึ่งของโปรไฟล์ และควรตรงกับบทบาทของคู่ตรงข้าม เกตเวย์สองตัวที่ต่างรออีกฝ่ายจะสร้างความเงียบ ไม่ใช่ทันเนล

กับ trap ทราฟฟิกต้องตรงกับตัวเลือก ดังนั้น ping ที่ไม่เกี่ยวข้องจะไม่ปลุกอะไรเลย กับ start ที่อยู่ของคู่ตรงข้ามต้องใช้งานได้ และทั้งสองฝ่ายต้องเห็นตรงกันเรื่องการพิสูจน์ตัวตนและข้อเสนอ ไม่มีคำสั่งไหนทดแทนการตรวจเงื่อนไขเหล่านี้ได้

การกู้คืนเป็นนโยบายแยกต่างหาก

การเริ่มไม่ใช่ keepalive การตรวจจับคู่ตรงข้ามที่ตาย การปิดอย่างชัดเจนจากฝ่ายนั้น การเปลี่ยนคีย์ และการรีสตาร์ตโปรเซสเป็นเหตุการณ์คนละแบบในวงจรชีวิตซึ่งมีค่าตั้งของตัวเอง ตั้งค่าแต่ละอย่างอย่างตั้งใจแทนที่จะคาดว่าการเริ่มครั้งแรกจะครอบคลุมทั้งหมด

ทันเนลที่ขึ้นตอนบูตแล้วตายในหนึ่งชั่วโมงเป็นคำถามเรื่องการกู้คืน นโยบายการเริ่มทำงานเสร็จแล้วก็หมดความสำคัญ ดูค่าตั้ง DPD และการเปลี่ยนคีย์ก่อนจะโทษการเจรจาครั้งแรก

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

ตรวจว่ามีอะไรอยู่ก่อนแก้เส้นทาง

ทำการสังเกตทั้งสามตามลำดับ คำนิยามที่โหลดแล้ว IKE SA ที่ทำงานอยู่ และรายการ child คำตอบแต่ละข้อทำให้คำถามถัดไปแคบลง ถ้าข้ามขั้นตอนหนึ่งคุณจะไปแก้ชั้นที่ไม่เคยถูกสร้าง

เริ่มจากสิ่งที่โหลดอยู่และสิ่งที่ถูกสร้างขึ้นจริง:

swanctl --list-conns
swanctl --list-sas

ถ้า child หายไปทั้งที่โปรไฟล์ถูกต้อง เริ่มมันด้วยชื่อแล้วดูว่าเกิดอะไรขึ้น โดยปกติผลลัพธ์จะบอกว่าแม่ขึ้นก่อนหรือไม่

swanctl --initiate --child hq-lan

CHILD SA ที่ทำงานอยู่ไม่ใช่เส้นชัย กฎการส่งต่อ เส้นทาง และสิทธิ์ของแอปพลิเคชันเองยังต้องตรงกัน วงจรชีวิตตอบว่าเจรจาอะไรไว้ แต่ตัดสินไม่ได้ว่าใครมีสิทธิ์ใช้บริการ

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