เราเตอร์ยุติ VPN เอง แต่กฎการส่งต่อเก่ายังคงส่งพอร์ต UDP เดียวกันไปยังเครื่องใน LAN มีเพียงหนึ่งเดียวเท่านั้นที่เป็นจุดปลายทางจริง และเคอร์เนลไม่ได้ตัดสินระหว่างทั้งสอง การแปลปลายทางเขียนแพ็กเก็ตใหม่ก่อนที่จะสอบถามบริการภายใน ดังนั้นกระบวนการ VPN จึงรอทราฟฟิกที่ถูกส่งไปที่อื่นแล้ว งานคือ ตัดสินว่าใครเป็นเจ้าของพอร์ต แล้วทำให้กฎสอดคล้องกัน

พอร์ตเดียว เจ้าของที่อ้างสิทธิ์สองราย

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

จดข้ออ้างก่อนแก้ไข: ตระกูล ที่อยู่ภายนอก การขนส่ง พอร์ต และเป้าหมายที่แปลแล้ว

การแปลทำงานก่อนการตรวจสอบภายใน

NAT ปลายทางเปลี่ยนเป้าหมายของแพ็กเก็ตในขั้นก่อนการกำหนดเส้นทาง ก่อนที่เคอร์เนลจะเลือกระหว่างการส่งมอบภายในและการส่งต่อ เมื่อเป้าหมายเป็นโฮสต์ LAN แพ็กเก็ตจะใช้เส้นทางการส่งต่อ กฎขาเข้าสำหรับซ็อกเก็ตของเราเตอร์เองไม่เคยถูกพิจารณา นี่คือเหตุผลที่บันทึก VPN ว่างเปล่าขณะที่ไคลเอนต์หมดเวลา

Intended local entry:
WAN UDP 1194 -> router local socket -> input path

Conflicting old entry:
WAN UDP 1194 -> DNAT 192.168.50.10:1194 -> forward path

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

ถ้าโฮสต์ LAN เป็นจุดปลายทางที่ตั้งใจ การส่งต่อนั้นถูกต้องและเราเตอร์ไม่ควรรับฟังบนพอร์ตนั้นด้วย

เก็บการแมปหนึ่งและลบอีกอัน

แสดงรายการ NAT สำหรับพอร์ตและตระกูลนั้นแล้วเลือกผู้รอดชีวิต:

sudo iptables -t nat -S | grep 1194
sudo ss -lunp | grep :1194

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

ถ้า VPN อาศัยอยู่บนโฮสต์แยก การส่งต่อคือวัตถุที่ถูกต้อง บริการในคอนเทนเนอร์หรือเครื่องเสมือนอาจต้องใช้พอร์ตที่เผยแพร่แม้กล่องจะถูกเรียกว่าเราเตอร์ ดังนั้นให้ติดตามซ็อกเก็ตและเนมสเปซของมัน ไม่ใช่ฉลากบนกล่อง

ยืนยันเจ้าของจากภายนอก

ทดสอบแต่ละตระกูลแยกกัน เพราะการเชื่อมต่อ IPv6 ที่สิ้นสุดบนเราเตอร์ไม่ได้บอกอะไรเกี่ยวกับการเชื่อมต่อ IPv4 ที่กฎเก่าเปลี่ยนเส้นทาง อ่านบันทึกของบริการที่รับเพื่อดูว่าจุดปลายทางใดตอบ และถือข้อความสำเร็จของไคลเอนต์เป็นหลักฐานที่อ่อนแอ ต้องมีโฟลว์ใหม่สำหรับการทดสอบที่มีความหมาย ส่งโพรบจากโฮสต์ภายนอกด้วย nc -zvu 203.0.113.7 1194 และอ่านบันทึกของผู้ชนะด้วย journalctl -u openvpn@server -n 20 ตัวรับฟังของเราเตอร์บันทึกการเชื่อมต่อเอง ขณะที่โฮสต์ LAN บันทึกในบริการของตัวเอง

การติดตามการเชื่อมต่อทำให้โฟลว์ที่มีอยู่คงอยู่บนการแมปเดิม ดังนั้นเซสชันที่สร้างแล้วอาจมีอายุยืนกว่ากฎที่คุณเพิ่งแก้

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

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