Máy khách hiển thị một địa chỉ IPv6 toàn cầu, quá trình bắt tay đã hoàn tất và không có gì quay trở lại từ internet. Cấu hình nhóm trông có vẻ đúng vì nó đúng; địa chỉ hợp lệ và đường hầm mang nó đi. Thứ thất bại là việc giao nhận, và việc giao nhận phụ thuộc vào một quyết định được đưa ra phía trên máy chủ VPN mà không cấu hình phía máy khách nào có thể ảnh hưởng.

Huyền thoại: một phần /64 của bạn đã có thể tiếp cận được

Câu chuyện hấp dẫn: máy chủ có một /64 công cộng, chia đôi, trao nửa còn lại cho nhóm VPN, và những máy khách đó giờ đây ở trên internet. Việc chia tiền tố thực sự cấp phát địa chỉ mà không trùng lặp. Nhưng nó không thay đổi cách mạng upstream quyết định nơi một gói tin dành cho một trong các địa chỉ đó phải đi.

IPv6 không có lớp dịch mặc định để dựa vào, vì vậy đường về phải tồn tại dưới dạng định tuyến hoặc dưới dạng giao nhận ở mức liên kết. Một gói tin gửi đến địa chỉ đường hầm của máy khách đến bộ định tuyến upstream, và bộ định tuyến đó đưa ra quyết định chuyển tiếp từ bảng của chính nó. Nếu bảng trỏ tới liên kết vật lý, gói tin đi đến đó, bất kể máy chủ VPN của bạn nghĩ gì.

Đó là toàn bộ sự cố: hướng đi hoạt động vì máy chủ của bạn gửi nó, còn hướng về chết cách đó một bước nhảy vì upstream không bao giờ biết máy khách tồn tại.

Giao nhận trên liên kết thực sự yêu cầu gì

Khi upstream coi toàn bộ /64 nằm trên liên kết vật lý, nó phân giải từng địa chỉ đích bằng việc phát hiện láng giềng. Nó gửi một yêu cầu trên liên kết đó và mong chủ sở hữu địa chỉ trả lời. Một máy khách VPN đứng sau đường hầm không nằm trên liên kết đó và không thể trả lời, nên yêu cầu không được đáp lại và gói tin bị loại bỏ.

Cắt ra một /65 không thay đổi kỳ vọng đó. Upstream vẫn coi dải đó là nằm trên liên kết, vì thứ duy nhất khiến nó đổi ý là một tuyến hoặc một proxy trả lời thay cho máy khách. Không cái nào xuất hiện vì bạn đã sửa cấu hình VPN. Chính khoảng trống đó giải thích vì sao một nhóm có thể hoạt động hoàn hảo giữa các máy khách của chính nó mà vẫn không thể tiếp cận từ bất kỳ nơi nào khác.

Phát hiện láng giềng qua proxy là cơ chế có thể bắc cầu giữa hai thế giới. Cổng trả lời các yêu cầu cho những địa chỉ máy khách cụ thể mà nó sở hữu và chuyển lưu lượng vào đường hầm. Nó hoạt động, và phải được giới hạn chính xác ở những địa chỉ đó với vòng đời đi theo nhóm, vì trả lời cho một địa chỉ mà bạn không còn phục vụ sẽ biến lưu lượng của người khác thành hố đen. Một số upstream sẽ không chấp nhận các phản hồi proxy mà họ không lường trước, vì vậy thiết kế này cũng cần sự đồng ý của nhà cung cấp.

Giao nhận có định tuyến yêu cầu gì

Thiết kế sạch hơn là một cấp phát mà upstream thực sự định tuyến đến cổng của bạn. Đó có thể là một tiền tố được ủy quyền hoặc một tuyến tĩnh cho khối nhỏ hơn, và yêu cầu là như nhau trong cả hai trường hợp: bảng của upstream phải trỏ tới máy chủ của bạn cho dải máy khách. Khi đó lưu lượng về đến cổng và cổng chuyển nó vào đường hầm.

Giao nhận có định tuyến loại bỏ hoàn toàn câu hỏi phát hiện láng giềng, đó là lý do đáng để yêu cầu nhà cung cấp về nó trước khi xây dựng bất cứ thứ gì khéo léo. Hãy yêu cầu tuyến bằng văn bản và xác nhận rằng bước nhảy tiếp theo là địa chỉ mà upstream thực sự có thể đến được.

Cả hai thiết kế vẫn cần chuyển tiếp IPv6 được bật trên cổng và các quy tắc tường lửa cho phép luồng được chuyển tiếp theo cả hai hướng. Giao nhận là điều kiện tiên quyết, không phải thứ thay thế, cho phần còn lại của đường đi. Một tuyến hoạt động với chuyển tiếp bị tắt tạo ra đúng sự im lặng như một tuyến bị thiếu, nên hãy kiểm tra cả hai trước khi thiết kế lại bất cứ thứ gì.

Hai tuyến độc lập cần làm đúng

Tiền tố nhóm và tuyến mặc định của chính máy khách là các cài đặt riêng biệt, và nhầm lẫn chúng tạo ra kết nối một phần trông như một đường hầm hỏng. Nhóm cho máy chủ biết địa chỉ nào cần cấp. Các tuyến của máy khách quyết định máy khách gửi lưu lượng đến những đích nào vào đường hầm.

server-ipv6 2001:db8:42:100::/64
push "redirect-gateway ipv6 !ipv4"

Tiền tố ở trên là không gian tài liệu, và việc chuyển hướng chỉ áp dụng cho IPv6, đúng là điều mà một triển khai hai ngăn xếp thường muốn trong khi việc giao nhận IPv6 vẫn đang được sửa. Chuyển hướng IPv4 không thiết lập phạm vi IPv6, và không cài đặt nào hàm ý cài đặt kia.

Giữ cho lưu lượng điều khiển mà IPv6 phụ thuộc vào hoạt động dưới bất kỳ chính sách nào bạn áp dụng. Các thông điệp Packet Too Big là nạn nhân kinh điển của một tường lửa chỉ cho phép TCP và UDP, và việc loại bỏ chúng tạo ra các kết nối được thiết lập rồi bị kẹt ở các lần truyền lớn hơn.

Các quảng cáo của bộ định tuyến là bộ phận chuyển động thứ ba. Nếu cổng bắt đầu quảng cáo trên liên kết lên, nó có thể thay đổi điều mà máy khách và láng giềng tin về các tiền tố trên liên kết, và điều đó có thể âm thầm vô hiệu hóa thiết kế bạn vừa ghi lại.

Ghi lại thiết kế để một lần xây dựng lại tái tạo nó

Viết ba đối tượng riêng rẽ: cấp phát của máy khách, tuyến đích của máy khách và phương thức giao nhận của upstream cho cấp phát đó. Một độc giả có cả ba có thể dựng lại triển khai; một độc giả chỉ có cài đặt nhóm sẽ tái tạo lỗi ban đầu.

Sau đó kiểm tra rõ ràng hướng về, với một gói tin phải quay lại từ bên ngoài. Hướng dẫn openvpn(8) bao gồm các tùy chọn server-ipv6 và redirect, và xác nhận định tuyến từ nhà cung cấp của bạn bao gồm nửa mà hướng dẫn không thể.

Bài viết liên quan