Cổng UDP cố định có thể bỏ qua chuyển tiếp cổng, nhưng không phải mọi NAT
Tường lửa có trạng thái chấp nhận gói tin của đối tác như lưu lượng quay về khi cả hai đầu cố định một cổng. Đây là khi nó hoạt động, và điều gì lặng lẽ kết thúc nó.
Hai router trong nhà, không có cổng nào được chuyển tiếp, và một VPN đôi khi vẫn kết nối được. UDP cho phép điều đó, vì tường lửa sẽ chấp nhận một gói tin mà nó có thể khớp với một luồng mà máy đã bắt đầu. Đây là một mẹo có điều kiện, không phải tính năng, và các điều kiện rất dễ nêu ra khi bạn biết tường lửa so sánh điều gì. Chúng cũng là lý do các cấu hình giống hệt nhau lại hành xử khác nhau trên các mạng khác nhau.
Phép so sánh mà tường lửa thực hiện
Mỗi datagram đi ra tạo một mục tồn tại ngắn: địa chỉ nguồn, cổng nguồn, địa chỉ đích, cổng đích. Bất cứ thứ gì đến và khớp với mục đó đều được coi là câu trả lời và được cho đi qua. Các quy tắc cho lưu lượng vào không liên quan ở đây.
Vậy câu hỏi không phải là tường lửa có cho đối tác vào hay không. Mà là gói tin của đối tác có trông giống câu trả lời mà mục đó đang chờ hay không. Đổi một trường trong bộ bốn phần đó và gói tin trở thành kẻ lạ. Đó là lý do một thiết lập đang chạy có thể hỏng khi chỉ số cổng thay đổi, và cũng là lý do cùng một cổng có thể chạy trên router này mà hỏng trên router kế tiếp.
Cố định cổng nguồn cục bộ, và cùng con số đó sẽ xuất hiện ở cả hai phía của cuộc trao đổi. Đó là toàn bộ cơ chế, và nó giải thích vì sao mẹo này mong manh chứ không bí ẩn.
Cố định một cổng ở mỗi đầu
Cổng UDP mặc định của OpenVPN là 1194, và lport đặt cổng nguồn mà nó gửi đi. Cố định cả hai đối tác và bộ bốn phần đi ra của mỗi bên sẽ trỏ tới một cổng mà bên kia đang lắng nghe:
# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194
Điều này chỉ hoạt động chừng nào không có router nào ở giữa ghi lại cổng nguồn. Khi gói tin xuất hiện trong bản bắt gói nhưng không có đường hầm nào dựng lên, việc ghi lại chính là nghi phạm đầu tiên.
Nơi bộ bốn phần thôi khớp
Một NAT ánh xạ theo đích trao cho mỗi đối tác một cổng ngoài khác nhau. Địa chỉ mà đối tác của bạn được bảo dùng không phải là địa chỉ đến được nó, nên gói tin đi vào không khớp với gì cả và bị bỏ đi lặng lẽ.
Chuyển dịch cấp nhà mạng, NAT chồng tầng và việc ngẫu nhiên hóa cổng đều kết thúc giống nhau. Bất kỳ hộp trung gian nào ghi lại cổng mà để yên địa chỉ cũng vậy.
Các giao vận dạng luồng còn tệ hơn. Bắt tay TCP được theo dõi từng bước, nên một VPN dựa trên TCP hoàn toàn không thể bị đục lỗ theo cách này và cần một bên lắng nghe ở đâu đó trên đường đi.
Thường thì một bên hỏng trước
Trên thực tế hai mạng hiếm khi hành xử giống nhau. Một router có thể cho ánh xạ dự đoán được trong khi router kia cho cổng theo đích, và kết quả là một cấu hình chạy được giữa hai nhà nhưng hỏng khi từ mạng di động. Những báo cáo mâu thuẫn nhau thường mô tả hai cặp router khác nhau. Không tác giả nào sai, và không kết quả nào khái quát được.
Hãy tìm ra bên nào đã bỏ gói tin trước khi chạm vào cấu hình. Bắt gói ở cả hai đầu giải quyết việc này trong một lần thử: các datagram rời A mà không bao giờ tới B nghĩa là luồng đã bị ghi lại trên đường, còn các datagram tới B mà không có câu trả lời quay lại nghĩa là tường lửa đã không chấp nhận chúng là có liên quan.
Hai đối tác có địa chỉ IPv6 công cộng tránh được toàn bộ vấn đề. Không có chuyển dịch thì không có gì để khớp, nên một quy tắc tường lửa nêu tên các đối tác là đủ và thiết kế không còn phụ thuộc vào hành vi của router.
Khi nào nên dừng thử
Một máy chủ có địa chỉ công cộng là câu trả lời đáng tin cậy. Nó có thể kết thúc đường hầm cho cả hai đối tác, hoặc chỉ đơn giản giúp họ tìm ra địa chỉ ngoài hiện tại của nhau, và cả hai cách sắp xếp đều hoạt động bất kể NAT làm gì. Một lớp phủ được quản lý cung cấp sự phối hợp tương tự nếu chính sách cho phép.
Không điều nào trong số này cần một tường lửa bị tắt. Tắt bảo vệ để giành lấy kết nối trực tiếp là vứt bỏ lý do khiến lần thử trực tiếp trở nên hấp dẫn, và để máy mở trong suốt thời gian kiểm tra.
Hãy thử cách sắp xếp trực tiếp trước, rồi ghi lại những gì bạn thấy. Hành vi của NAT và bản bắt gói đã cho thấy nó đáng giá hơn cặp cổng mà bạn cuối cùng dùng, vì mạng tiếp theo sẽ khác. hướng dẫn OpenVPN 2.6 ghi lại lport và các tùy chọn remote mà điều này phụ thuộc vào.