Hai con số xuất hiện trong cùng một cuộc trò chuyện, và không con số nào sai. Nhật ký máy chủ hiển thị bộ lắng nghe cung cấp dịch vụ, máy tính xách tay hiển thị ổ cắm đã gửi gói dữ liệu, và bộ định tuyến ở giữa có thể viết lại con số thứ hai khi đi ra. So sánh hai đầu của cuộc trò chuyện hữu ích hơn so sánh các chữ số. Phép so sánh dưới đây tách riêng bộ lắng nghe, ổ cắm của máy khách và nguồn đã dịch, vì chúng trả lời những câu hỏi khác nhau.

Hai con số mô tả hai đầu đối lập

Cổng được cấu hình của máy chủ là đích mà máy khách gọi tới. Nó được chính sách cố định, xuất hiện trong hồ sơ và phải mở ở phía máy chủ. Cổng nguồn của máy khách được chọn cục bộ, thường từ dải tạm thời, và tồn tại để phản hồi có nơi hạ cánh. Nó có thể thay đổi mỗi lần kết nối lại, và không gì trong thiết kế phụ thuộc vào việc nó ổn định.

Bộ định tuyến ở giữa có thể viết lại nguồn đó vào ánh xạ 'NAT' của riêng nó. Đó là lý do con số quan sát được trên máy chủ thường không liên quan đến con số máy tính xách tay đã chọn.

Nơi số nguồn thay đổi trên đường ra

Lấy một ví dụ IPv4 hư cấu: một máy khách sau bộ định tuyến có dịch, một máy chủ với một bộ lắng nghe 'UDP', và một gói dữ liệu duy nhất đi qua cả hai. Bảng nêu tên từng đầu và điều gì xảy ra với nó, thay vì phát lại gói tin tại ba điểm quan sát.

EndpointWhat stays fixedWhat changes on reconnectWho owns it
Server listenerThe service port and the address the profile namesNothing; the listener does not follow the clientThe server operator
Client socketThe destination it dialsThe local source port, chosen per socketThe client, or its operating system
Translated sourceUsually the public address of the routerThe port, and sometimes the address after a network switchThe NAT device or the upstream carrier

Đích là không đổi trong mọi hàng, và chỉ danh tính của nguồn thay đổi. Yêu cầu UDP NAT phân biệt địa chỉ và cổng bên trong với ánh xạ bên ngoài, và đó chính xác là khoảng cách giữa hàng thứ hai và hàng thứ ba. Bộ định tuyến có thể giữ cổng nguồn của máy khách hoặc chọn cổng khác; việc giữ lại không phải điều ứng dụng nên mặc định.

Đọc ba đầu từ chính các máy chủ

Các danh sách dưới đây đến từ ba máy khác nhau và cùng nhau cho thấy toàn bộ cuộc trò chuyện. Chạy cái thứ nhất trên máy chủ, cái thứ hai trên máy khách và cái thứ ba ở bất cứ đâu có ánh xạ. Một dòng nhật ký không bao giờ hiển thị cả ba.

ss -lunp 'sport = :1194'
ss -unp | grep 1194
conntrack -L -p udp | grep 1194

Danh sách đầu tiên chứng minh máy chủ gắn with cổng dịch vụ và cho biết tiến trình nào sở hữu nó. Danh sách thứ hai cho thấy ổ cắm cục bộ của máy khách và đích nó đã gọi. Danh sách thứ ba cho thấy ánh xạ bộ định tuyến đã tạo, và đó là nơi duy nhất nguồn đã dịch xuất hiện. Đọc chúng theo thứ tự đó và hai con số không còn trông mâu thuẫn.

Kết nối lại thay đổi gì và không thay đổi gì

Một số bộ định tuyến giữ cổng nguồn của máy khách khi nó trống, số khác cấp một cổng khác mỗi lần. Cả hai hành vi đều bình thường, và ứng dụng đòi hỏi cái đầu sẽ hỏng ở cái sau. Thay đổi ánh xạ sau khi kết nối lại hoặc chuyển mạng không phải lỗi máy chủ: máy khách mở ổ cắm mới, bộ định tuyến cấp những gì nó có, và máy chủ thấy nguồn mới trên cùng bộ lắng nghe. Lỗi sẽ là mong máy chủ chấp nhận lưu lượng gửi tới một cổng máy khách tùy ý.

Các máy khách OpenVPN của cộng đồng nhận được hành vi này qua nobind, cho phép hệ điều hành chọn cổng cục bộ; cổng từ xa vẫn đến từ hồ sơ. Ràng buộc rõ ràng là lựa chọn có chủ đích, không phải yêu cầu của giao thức. Máy chủ tiếp tục cung cấp một đầu trong khi máy khách chọn danh tính cục bộ của riêng chúng.

Dán nhãn các lớp riêng biệt trong bản ghi

Bên trong đường hầm có cuộc trò chuyện thứ hai với các cổng riêng. Yêu cầu HTTPS được đường hầm mang có đích TCP 443, trong khi kết nối mã hóa bên ngoài dùng UDP 1194, nên thay đổi cổng nguồn bên ngoài không thay đổi gì ở dịch vụ bên trong.

Ngay ở lớp ngoài, giao thức cũng quan trọng. UDP 1194 và TCP 1194 là hai đầu khác nhau, và bộ lắng nghe 'TCP' sẽ không bao giờ nhận gói dữ liệu UDP chỉ vì số khớp. Khi ghi tài liệu triển khai, hãy dán nhãn bộ lắng nghe của máy chủ, ổ cắm của máy khách và nguồn đã dịch là ba thứ riêng biệt, và thêm giao vận cho từng cái.

Sau đó để chính sách theo vai trò. Máy chủ mở giao vận dự định trên bộ lắng nghe của mình và vẫn xác thực đối tác; tường lửa của máy khách cho phép phản hồi cho trao đổi đi ra của chính nó mà không công bố dịch vụ vào. Bộ lọc không trạng thái cần hướng trả về được viết rõ ràng, và đó là lý do thực tế khiến sự phân biệt này quan trọng ngoài những sơ đồ gọn gàng.

Bài viết liên quan