ไคลเอนต์ OpenVPN ของคุณควรใช้ nobind หรือพอร์ตคงที่
nobind ปล่อยให้เคอร์เนลเลือกพอร์ตต้นทางสำหรับไคลเอนต์ที่เชื่อมต่อออกไป เงื่อนไขสามข้อตัดสินว่าคุณต้องการสิ่งนั้น หรือจะใช้พอร์ตโลคอลที่ปักหมุดไว้แทน
โปรไฟล์สองไฟล์ที่ต่างกันเพียงบรรทัดเดียวทำงานต่างกันในวินาทีที่ไคลเอนต์ตัวที่สองเริ่มบนโฮสต์เดียวกัน ตัวหนึ่งมี nobind และรับพอร์ตโลคอลใดก็ได้ที่เคอร์เนลกำหนดให้ อีกตัวจอง 1194 และอินสแตนซ์ที่สองตายด้วยที่อยู่ที่ถูกใช้อยู่แล้ว บรรทัดนั้นตัดสินว่าใครเลือกพอร์ตต้นทาง ซึ่งนำไปสู่การตัดสินว่าโปรไฟล์จะอยู่ร่วมกับสิ่งอื่นบนเครื่องได้หรือไม่ คำถามสามข้อตัดสินเรื่องนี้ และข้อแรกตอบโปรไฟล์ส่วนใหญ่ก่อนที่คุณจะไปถึงอีกสองข้อ
nobind ข้ามอะไรไปจริง ๆ
โดยค่าเริ่มต้นไคลเอนต์ผูกซ็อกเก็ตโลคอลก่อนเชื่อมต่อ และพอร์ตโลคอลคือ 1194 เว้นแต่โปรไฟล์จะบอกเป็นอย่างอื่น nobind ลบการจองนั้นออก สแตกจึงจัดสรรพอร์ตที่ยังไม่ถูกใช้ในตอนเชื่อมต่อ นี่เป็นข้อยกเว้น ไม่ใช่ค่าเริ่มต้น และไคลเอนต์ที่ไม่มีบรรทัดนั้นยังคงถือ 1194 ซึ่งเป็นเหตุผลที่อินสแตนซ์ที่สองซึ่งไม่ได้ปักหมุดชนกัน โปรไฟล์ไคลเอนต์ที่แจกจ่ายส่วนใหญ่มีไดเรกทีฟนี้ด้วยเหตุผลนั้น และการที่ไฟล์ตัวอย่างทำอะไรบางอย่างไม่เหมือนกับกลไกทำสิ่งนั้นโดยค่าเริ่มต้น
สิ่งที่ไม่เปลี่ยนคือฝั่งไกล เซิร์ฟเวอร์ยังคงฟังอยู่ที่ที่โปรไฟล์บอกว่าฟัง และพอร์ตปลายทางในการกำหนดค่ายังคงเป็นพอร์ตปลายทาง พอร์ตต้นทางแบบไดนามิกเปลี่ยนที่อยู่ตอบกลับของซ็อกเก็ตของคุณเอง และไม่เปลี่ยนอะไรของเซิร์ฟเวอร์
มันไม่ได้ซ่อนอะไรเช่นกัน ที่อยู่สาธารณะของคุณคือสิ่งที่เส้นทางแปลงให้ แพ็กเก็ตยังคงข้ามเครือข่ายโลคอล และใครก็ตามที่ดูแลเครือข่ายนั้นยังคงเห็นโฟลว์ nobind ไม่ใช่คุณสมบัติความเป็นส่วนตัวและไม่ใช่วิธีหลบไฟร์วอลล์
สามเงื่อนไขที่ตัดสิน
คำถามข้อหนึ่งตัดสินอีกสองข้อ ดังนั้นตอบข้อนั้นก่อนแก้ไขอะไร ถ้าคู่ค้าเชื่อมต่อออกไป คำถามที่เหลือเพียงปรับแต่งการตัดสินใจที่ทำไปแล้ว ถ้ามันรับการเชื่อมต่อขาเข้า การปรับพอร์ตโลคอลใด ๆ ก็ไม่ทำให้เข้าถึงได้
คู่ค้านี้เริ่มการเชื่อมต่อหรือไม่ ถ้าเชื่อมต่อออกไป พอร์ตต้นทางแบบไดนามิกไม่เป็นอันตรายและมักดีกว่า เพราะคำตอบกลับมาตามโฟลว์เดียวกัน ถ้ารอการเชื่อมต่อขาเข้า พอร์ตไดนามิกทำให้เข้าถึงไม่ได้ เว้นแต่มีอะไรข้างหน้าประกาศพอร์ตนั้น คำตอบเดียวนั้นแยกโปรไฟล์ไคลเอนต์ทุกไฟล์ออกจากโปรไฟล์เซิร์ฟเวอร์ทุกไฟล์
เส้นทางกรองตามพอร์ตต้นทางหรือไม่ กฎที่เข้มงวดซึ่งเขียนสำหรับพอร์ตที่รู้จักหนึ่งพอร์ตบังคับให้ระบุพอร์ตโลคอลอย่างชัดเจน และโปรไฟล์ควรบันทึกว่าตรงกับกฎใด เครือข่ายส่วนใหญ่กรองเฉพาะปลายทาง เงื่อนไขนี้จึงพบได้น้อยกว่าข้อแรก ในที่ที่ใช้ มันเหนือกว่าการเลือกลำดับความสำคัญของพอร์ตไดนามิก
หลายอินสแตนซ์แชร์โฮสต์หรือไม่ พอร์ตคงที่หนึ่งพอร์ตให้บริการสองตัวไม่ได้ และอินสแตนซ์ที่รีสตาร์ตอาจพบ 1194 ยังอยู่ในสถานะปิด พอร์ตไดนามิกลบความขัดแย้งนั้นโดยไม่เปลี่ยนสิ่งอื่น ถ้าตอบเรื่องนี้ไม่ได้อย่างมั่นใจ ให้ถือว่าใช่และปล่อยให้เคอร์เนลเลือก
ที่ที่พอร์ตปักหมุดเป็นคำตอบที่ถูก
บางเครือข่ายกรองทั้งพอร์ตต้นทางและปลายทาง ผู้ดูแลอาจเขียนกฎที่ปล่อยเฉพาะทราฟฟิกจากพอร์ตที่รู้จักหนึ่งพอร์ต การปักหมุดพอร์ตโลคอลจึงถูกต้อง และโปรไฟล์ควรมีความคิดเห็นที่ระบุกฎที่ตรง การปักหมุดเพื่อความสมมาตรกับพอร์ตเซิร์ฟเวอร์ไม่ใช่เหตุผล เพราะตัวเลขสองตัวนั้นไม่เกี่ยวข้องกัน ถ้าการปักหมุดมีอยู่เพียงเพราะเทมเพลตมี ให้ลบออก
ไม่เช่นนั้นพอร์ตปักหมุดจะซื้อปัญหา: ไคลเอนต์สองตัวบนเครื่องเดียวไม่สามารถถือ 1194 ทั้งคู่ได้ และตัวที่สองล้มเหลวด้วยข้อผิดพลาดที่ชี้ไปที่พอร์ตไม่ใช่โปรไฟล์ คอนเทนเนอร์ที่รีสตาร์ตเร็วก็ชนกำแพงเดียวกัน การซ่อมคือไดเรกทีฟที่โปรไฟล์ที่แจกจ่ายมีอยู่แล้ว
เซิร์ฟเวอร์และไคลเอนต์ไม่สมมาตรกัน
คู่มือ OpenVPN 2.6 วาง nobind ข้าง lport ซึ่งเป็นข้อโต้แย้งในบรรทัดเดียว: ตัวเลือกหนึ่งบอกว่าเคอร์เนลเลือก อีกตัวบอกว่าคุณเลือก พอร์ตโลคอลแบบไดนามิกใช้ได้เฉพาะกับคู่ค้าที่เชื่อมต่อออกไป เพราะฝั่งที่ตอบกลับไม่สามารถรู้พอร์ตล่วงหน้าได้ นั่นคือเหตุผลที่การคัดลอกโปรไฟล์ไคลเอนต์ไปยังเซิร์ฟเวอร์สร้างผู้ฟังที่ไม่มีใครเข้าถึงได้
บนโฮสต์ที่มีหลายอินเทอร์เฟซเครือข่าย ที่อยู่เป็นการตัดสินแยกจากพอร์ต การผูกที่อยู่โลคอลเฉพาะและการผูกพอร์ตเฉพาะเป็นการตั้งค่าสองอย่างที่ต่างกัน และเซิร์ฟเวอร์ที่มีลิงก์ขึ้นสองเส้นมักปักหมุดทั้งสอง ไคลเอนต์ที่ปักหมุดทั้งสองรับความแข็งเกร็งแบบเดียวกันโดยไม่มีประโยชน์ใด ๆ
บทสรุปเกี่ยวกับบทบาทไม่ใช่ความปลอดภัย ใครที่เชื่อมต่อออกไปยืดหยุ่นเรื่องต้นทางของตัวเองได้ และใครที่ตอบกลับทำไม่ได้ ไม่มีตัวเลือกใดเปลี่ยนสิ่งที่อีกฝั่งเรียนรู้เกี่ยวกับตัวตนของคุณ นั่นก็เป็นเหตุผลที่ไดเรกทีฟปรากฏในตัวอย่างไคลเอนต์และแทบไม่เคยปรากฏในตัวอย่างเซิร์ฟเวอร์
ตรวจสอบพอร์ตที่เคอร์เนลเลือก
หลังเชื่อมต่อ อ่านซ็อกเก็ตไม่ใช่การกำหนดค่า เพราะการกำหนดค่าบอกเจตนาและซ็อกเก็ตบอกสิ่งที่เกิดขึ้น ข้อเท็จจริงที่ควรบันทึกคือพอร์ตโลคอล จุดปลายทางไกล และยังมีอะไรฟังอยู่หรือไม่ บนโฮสต์ Linux ทั้งสามอยู่ห่างหนึ่งคำสั่ง
ss -unp | grep openvpn
ss -lunp | grep openvpn
sudo lsof -nP -i | grep openvpn
ไคลเอนต์ที่ใช้ nobind จะแสดงพอร์ตโลคอลสูงและพอร์ตไกลที่กำหนดค่าไว้ ซึ่งเป็นรูปแบบที่คาดไว้ เซิร์ฟเวอร์แสดงซ็อกเก็ตที่ฟังบนพอร์ตที่กำหนดค่าไว้ และถ้าซ็อกเก็ตนั้นหายไป โปรไฟล์อาจไม่ใช่ผู้ฟังหรือผูกไม่ได้ เมื่อมีโฟลว์แต่ไม่มีแพ็กเก็ตกลับมา ให้เปรียบเทียบพอร์ตต้นทางที่เลือกกับตัวกรองพอร์ตใด ๆ บนเส้นทางก่อนแก้ไขโปรไฟล์ เปลี่ยนหนึ่งอย่าง เชื่อมต่อใหม่ แล้วอ่านซ็อกเก็ตอีกครั้ง