IPv6 หยุดส่งทราฟฟิกในจังหวะที่ OpenVPN รีสตาร์ต และ IPv4 ยังทำงานอยู่ อินเทอร์เฟซของทันเนลถูกสร้างใหม่ และมีอย่างอื่นที่ดูแลสถานะ IPv6 ของมันสูญเสียที่อยู่หรือเส้นทางที่ทำให้คำนำหน้าเข้าถึงได้ มีสถานะสามส่วนแยกกันเกี่ยวข้อง และแต่ละส่วนมีเจ้าของต่างกัน: คำนำหน้าที่ผู้ให้บริการมอบหมายและอายุของมัน ที่อยู่ที่มอบให้ไคลเอนต์ VPN และเส้นทางต้นน้ำที่ส่งคำนำหน้าของไคลเอนต์นั้นกลับไปยังเซิร์ฟเวอร์ ระบุเจ้าของของแต่ละส่วนก่อนแตะเดมอนตัวใด เพราะการรีสตาร์ตตัวที่ผิดจะซ่อนปัญหาไว้หนึ่งวันแล้วทำให้กลับมาในการเชื่อมต่อครั้งถัดไป

สถานะ IPv6 สามส่วน เจ้าของสามราย

StateTypical ownerWhat breaks when it is wrong
Delegated prefix and lifetimeUpstream router or provider via DHCPv6-PDClients keep addresses that the upstream no longer routes
Client addresses inside the tunnelOpenVPN server config or a delegation daemonNo global address, or an address outside the routed prefix
Return route for the client prefixUpstream router, or the server's own routing tableOutbound works, replies never arrive

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

นั่นคือเหตุผลที่การคัดลอก /64 สาธารณะลงในพูลทันเนลก็เสี่ยง คำนำหน้าที่ถูกเส้นทางไปยังเซิร์ฟเวอร์ไม่เหมือนกับคำนำหน้าที่ฝั่งต้นน้ำถือว่าเป็น on-link และการค้นหาเพื่อนบ้านจะไม่เติมช่องว่างนั้น

อ่านสถานะเซิร์ฟเวอร์ก่อนเปลี่ยนแปลงอะไร

บันทึกสถานะสองครั้ง ครั้งหนึ่งขณะ IPv6 ทำงาน และอีกครั้งหลังรีสตาร์ต แล้วเปรียบเทียบ มุมมองแบบอ่านอย่างเดียวก็เพียงพอ และไม่มีค่าใช้จ่ายใด ๆ ในช่วงหน้าต่างบำรุงรักษา:

ip -6 addr show
ip -6 route show table all
ip -6 rule show
sysctl net.ipv6.conf.all.forwarding

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

ถ้าที่อยู่หายไปแต่คำนำหน้าไม่เปลี่ยน เดมอนที่จัดสรรที่อยู่นั้นหยุดจัดการอินเทอร์เฟซ ถ้าคำนำหน้าเปลี่ยนแต่ที่อยู่ไม่เปลี่ยน การกำหนดค่าไคลเอนต์ล้าสมัย ความล้มเหลวทั้งสองดูเหมือนกันจากเบราว์เซอร์และไม่มีอะไรเหมือนกัน

ตัดสินใจว่า dhcpcd ควรจัดการทันเนลหรือไม่

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

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

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

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

ตรวจสอบ IPv6 แยกจาก NAT ของ IPv4

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

การมาสค์ IPv4 แก้ปัญหาอื่น: เส้นทางขากลับสำหรับแหล่งที่มาแบบส่วนตัว มันไม่ได้ทำอะไรกับคำนำหน้า IPv6 ที่ถูกถอน และการเพิ่มมันจะไม่ทำให้ IPv6 กลับมา

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

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