Windows กับ strongSwan: จับคู่การแปลงทั้งสี่ในข้อเสนอ IKE
รหัสลับร่วมกันเพียงอย่างเดียวไม่พอเมื่อทั้งสองฝ่ายไม่ตรงกันเรื่องกลุ่มแลกเปลี่ยนกุญแจ เปรียบเทียบการแปลงทั้งสี่ แล้วใช้นโยบายโปรไฟล์เดียวแบบจำกัดขอบเขต
ทั้งสองฝ่ายรองรับ AES ทั้งคู่ยอมรับ SHA-256 แต่อุโมงค์ก็ยังไม่ขึ้น ข้อเสนอล้มเหลวที่องค์ประกอบที่ไม่มีใครเทียบ ซึ่งมักเป็นกลุ่มแลกเปลี่ยนกุญแจ คู่มือนี้อ่านการแลกเปลี่ยนจริงก่อนแก้อะไร ใช้นโยบายเดียวแบบจำกัดขอบเขต และทิ้งเส้นทางย้อนกลับที่คืนค่าพารามิเตอร์เดิม
อ่านความล้มเหลวก่อนเปลี่ยนกลุ่ม
«ข้อผิดพลาดการจับคู่นโยบาย» เป็นเพียงบทสรุป ไม่ใช่การวินิจฉัย หมายความว่าไม่พบข้อเสนอที่ทั้งสองฝ่ายยอมรับ และไม่ได้บอกว่าองค์ประกอบใดถูกปฏิเสธ มองมันเป็นจุดเริ่มต้นของการสอบสวน ไม่ใช่หลักฐานเกี่ยวกับกลุ่มใดกลุ่มหนึ่ง
คำตอบมักอยู่ฝั่งเซิร์ฟเวอร์ บันทึก strongSwan ในระดับที่เหมาะสมจะแสดงข้อเสนอที่ได้รับจากไคลเอนต์และข้อเสนอที่กำหนดค่าไว้ให้ยอมรับ และความต่างของสองรายการนั้นก็บอกชื่อองค์ประกอบที่ล้มเหลว
อย่าสันนิษฐานว่าไคลเอนต์เสนอตามที่โพสต์ฟอรัมเก่ากล่าว โปรไฟล์ที่ใช้งานและนโยบายที่ติดตั้งไว้เป็นตัวกำหนดรายการที่เสนอ และบิลด์ Windows ที่อัปเดตแล้วอาจเสนอชุดที่ต่างจากในภาพหน้าจอที่คุณคัดลอกมา
จดทั้งสองรายการไว้ ตำแหน่งแปลงสี่ตำแหน่งกับหนึ่งกลุ่มเป็นรายการสั้น และการเทียบทีละบรรทัดใช้เวลาน้อยกว่าการทดลองใด ๆ ตำแหน่งทั้งสี่จำได้ง่ายในสายตา ไฟล์บันทึกไม่ใช่
เทียบทุกการแปลง ไม่ใช่ชื่อที่คุ้นเคยเพียงชื่อเดียว
ข้อเสนอ IKE คือชุดตัวเลือกที่ทุกตัวต้องตรงกัน การเข้ารหัสปกป้องการเจรจา ความสมบูรณ์หรือ PRF ยืนยันการเจรจา และกลุ่ม Diffie-Hellman สร้างวัสดุกุญแจใหม่ ข้อเสนอที่ตรงสองตัวแรกแต่ต่างตัวที่สามยังคงเป็นที่ยอมรับไม่ได้สำหรับทั้งสองฝ่าย
สองฟิลด์ Windows ที่สับสนกันตรงนี้ อยู่ในเฟสที่ต่างกัน DHGroup ใช้กับการแลกเปลี่ยนกุญแจ IKE ส่วน PfsGroup ใช้กับสมาคมลูกที่ปกป้องทราฟฟิก การเปลี่ยนตัวที่สองไม่อาจซ่อมความล้มเหลวของตัวแรกได้
ชื่อกลุ่มต่างกันระหว่างการใช้งาน และนั่นเป็นแหล่งความสับสนอีกทาง strongSwan เขียน modp2048 และ ecp256 ขณะที่ Windows ใช้ชื่อแบบแจกแจงเช่น Group14 และ ECP256 ดังนั้นการเทียบต้องแปลก่อนจึงจะเทียบได้ เก็บโน้ตสองคอลัมน์ที่มีทั้งสองชื่อ ครั้งต่อไปความไม่ตรงกันจะถูกจำแนกได้ในไม่กี่วินาที
| Transform | Windows parameter | strongSwan name | Failure it causes |
|---|---|---|---|
| Encryption | CipherTransformConstants | aes, aes256gcm and similar | No common proposal at all |
| Integrity or PRF | AuthenticationTransformConstants | sha256, sha512 and similar | Proposal rejected after encryption matches |
| Key-exchange group | DHGroup | modp2048, ecp256 | Exchange fails during key establishment |
| Child SA protection | PfsGroup | esp proposal groups | Tunnel negotiates, data association does not |
ใช้นโยบายเดียวที่สมบูรณ์และจำกัดขอบเขต
เครื่องมือที่รองรับสำหรับโปรไฟล์ IKEv2 แบบเนทีฟคือนโยบาย IPsec ต่อการเชื่อมต่อ ซึ่งตั้งเป็นวัตถุชิ้นเดียว ไม่ใช่ทีละฟิลด์ ดูตัวอย่างก่อน แล้วจึงนำไปใช้ และเก็บพารามิเตอร์เดิมไว้ในบันทึกการเปลี่ยนแปลง
Set-VpnConnectionIPsecConfiguration -ConnectionName "Northwind IKEv2" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup ECP256 -PfsGroup ECP256 -WhatIf
สวิตช์ -WhatIf แสดงตัวอย่างการเปลี่ยนแปลงในเครื่องและไม่นำอะไรไปใช้ นั่นมีประโยชน์และในขณะเดียวกันก็เป็นกับดักที่พบบ่อย เพราะตัวอย่างเพียงพิสูจน์ว่าพารามิเตอร์ยอมรับได้ทางไวยากรณ์สำหรับ cmdlet ในเครื่อง ไม่ได้บอกว่าเกตเวย์จะยอมรับข้อเสนอที่ได้หรือไม่
ปรับขอบเขตไปพร้อมกันด้วย การเชื่อมต่อในที่เก็บของผู้ใช้ทั้งหมดต้องใช้พารามิเตอร์สำหรับผู้ใช้ทั้งหมดที่ตรงกัน และการแก้โปรไฟล์ต่อผู้ใช้ที่ใช้ชื่อที่แสดงเดียวกันจะเปลี่ยนวัตถุอีกชิ้นที่อุโมงค์ไม่ได้ใช้
จากนั้นปรับฝั่ง strongSwan ให้เป็นชุดเดียวกันก่อนทดสอบ การเปลี่ยนแปลงที่ประสานกันทั้งสองด้านเป็นรูปแบบเดียวที่ลู่เข้า การแก้ด้านเดียวแล้วลองซ้ำ ๆ จะได้บันทึกที่เต็มไปด้วยการปฏิเสธเดิม
ตรวจสอบการแลกเปลี่ยนและการต่อกุญแจแยกกัน
การเชื่อมต่อที่สำเร็จเป็นการสังเกตหนึ่งครั้ง และการต่อกุญแจใหม่เป็นการสังเกตอีกครั้ง การเจรจา IKE เริ่มต้นใช้ชุดพารามิเตอร์หนึ่งชุด และสมาคมลูกที่ขนส่งทราฟฟิกอาจถูกเจรจาใหม่ภายหลังด้วยนโยบายของตัวเอง การตั้งค่าที่เชื่อมต่อได้แล้วหลุดในภายหลังมักเป็นกรณีที่สอง
ipsec statusall | grep -A6 "Northwind"
Get-VpnConnection -Name "Northwind IKEv2" | Format-List *
คำสั่งแรกแสดงมุมมองของเซิร์ฟเวอร์ต่อสมาคมที่สร้างแล้ว รวมถึง SA ลูกและอายุที่เหลือ คำสั่งที่สองแสดงว่าโปรไฟล์ไคลเอนต์ถืออะไรอยู่ตอนนี้ และนั่นเป็นวิธีเดียวที่จะยืนยันว่านโยบายที่คุณตั้งไว้คือนโยบายที่มีผล
เฝ้าดูการต่อกุญแจใหม่เต็มรอบก่อนประกาศความสำเร็จ นั่นหมายถึงปล่อยให้การเชื่อมต่อขึ้นนานพอที่สมาคมลูกจะถูกแทนที่ แล้วยืนยันว่าทราฟฟิกยังดำเนินต่อไป ความไม่ตรงกันของนโยบายส่วนใหญซ่อนอยู่ในขั้นตอนนั้น เพราะการเจรจาเริ่มต้นอาจสำเร็จด้วยชุดที่การต่อกุญแจใหม่ไม่ยอมรับ
การย้อนกลับคือชุดพารามิเตอร์เดิม ไม่ใช่ทางเลือกที่ผ่อนปรน หากไคลเอนต์เสนอเพียงกลุ่มเก่าที่อ่อนแอ คำตอบคือปรับนโยบายร่วมของไคลเอนต์และเซิร์ฟเวอร์ให้ดีขึ้น ไม่ใช่เพิ่มกลุ่มนั้นเข้าไปที่เกตเวย์ซึ่งทุกฝ่ายในอนาคตจะเจรจาลดลงมาถึงมันได้
บันทึกพารามิเตอร์ทั้งสี่ กลุ่ม ขอบเขตการเชื่อมต่อ และผลของการต่อกุญแจใหม่ นั่นเป็นโน้ตสั้น ๆ และนั่นคือความต่างระหว่างคู่มือกับเรื่องเล่าว่าครั้งหนึ่งอุโมงค์ขึ้นได้อย่างไร