โปรไฟล์ strongSwan ที่โหลดแล้วไม่ใช่ทันเนลที่ทำงานอยู่
strongSwan โหลดคำนิยามแล้วเจรจา IKE และ CHILD SA การที่โปรไฟล์ถูกโหลดไม่ได้บอกอะไรเลยว่ามีทันเนลอยู่หรือใครเป็นคนเริ่มมัน
การระบุการเชื่อมต่อในคอนฟิกูเรชันของ strongSwan พิสูจน์เพียงว่าคำนิยามถูกโหลดแล้ว ไม่ได้หมายความว่ามีการติดต่อคู่ตรงข้าม มี IKE SA อยู่ หรือมีทราฟฟิกใดถูกป้องกัน เดมอนถือว่าคำนิยามและความสัมพันธ์ที่ยังมีชีวิตเป็นวัตถุคนละชิ้น และระยะห่างระหว่างสองสิ่งนี้เป็นการออกแบบที่ตั้งใจไว้ การรู้ว่าคุณกำลังตรวจวัตถุชิ้นไหนเปลี่ยนความล้มเหลวที่คลุมเครือให้เป็นคำสั่งถัดไปที่ชัดเจน
การโหลดไม่ใช่การเชื่อมต่อ
การเชื่อมต่อที่โหลดแล้วคือข้อความบอกว่าอะไรจะเจรจาได้ในภายหลัง ที่อยู่ของคู่ตรงข้าม ข้อมูลรับรอง ข้อเสนอ และตัวเลือกทราฟฟิก ไม่มีอะไรในข้อความนั้นบังคับให้เดมอนต้องโทรหาหาใคร เกตเวย์อาจรออีกฝ่าย เริ่มเองตอนบูต หรือรอให้ทราฟฟิกที่เข้าคู่ปลุกขึ้นมา ทั้งสามแบบใช้ได้ทั้งหมด และทั้งสามแบบดูเหมือนกันในไฟล์คอนฟิกูเรชันจนกว่าคุณจะอ่านนโยบายการเริ่ม
ผู้ดูแลระบบมักมีปัญหาจากการอ่านรายการคำนิยามเป็นรายการสถานะ โปรไฟล์อยู่ตรงนั้น จึงถือว่าทันเนลทำงานอยู่ และชั่วโมงถัดมาหมดไปกับการแก้เส้นทางของความสัมพันธ์ที่ไม่เคยถูกสร้าง
ความผิดพลาดตรงข้ามก็พบได้บ่อยเท่ากัน โปรไฟล์ที่หายไปทำให้คนออกไปหาปัญหาเครือข่ายทั้งที่คอนฟิกูเรชันไม่เคยถูกโหลด ตั้งชื่อวัตถุให้ชัด แล้วรันคำสั่งที่สังเกตมัน
สามวัตถุ สามการสังเกต
strongSwan เก็บคำนิยามที่โหลดไว้ หนึ่ง IKE SA และหนึ่ง CHILD SA อย่างแรกคือคอนฟิกูเรชัน อย่างที่สองคือความสัมพันธ์ควบคุมที่ผ่านการพิสูจน์ตัวตน และอย่างที่สามคือการป้องกันที่เจรจาแล้วสำหรับทราฟฟิกที่เลือก พวกมันมีชื่อแยกกันด้วยซ้ำ โปรไฟล์ชื่อ hq จึงสามารถมี child ชื่อ hq-lan ได้
ตารางจับคู่แต่ละชั้นกับคำสั่งที่แสดงมัน อ่านแถวก่อนอ่านบันทึก
| Layer | What it contains | Command |
|---|---|---|
| Definition | Peer addresses, credentials, proposals, and traffic selectors | swanctl --list-conns |
| IKE SA | One authenticated control channel to the peer | swanctl --list-sas |
| CHILD SA | Keys and selectors for the traffic being protected | Child 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 ที่ทำงานอยู่ไม่ใช่เส้นชัย กฎการส่งต่อ เส้นทาง และสิทธิ์ของแอปพลิเคชันเองยังต้องตรงกัน วงจรชีวิตตอบว่าเจรจาอะไรไว้ แต่ตัดสินไม่ได้ว่าใครมีสิทธิ์ใช้บริการ