Các phiếu hỗ trợ gửi đến nói rằng ứng dụng hiển thị một địa chỉ trong khi máy chủ ghi nhận một địa chỉ khác, rồi hỏi cái nào đang nói dối. Không cái nào cả; đây là hai quan sát về hai thứ khác nhau. Một địa chỉ gắn với giao diện, một địa chỉ gắn với socket và một địa chỉ nguồn mà một dịch vụ từ xa nhìn thấy trả lời ba câu hỏi riêng biệt. VPN thêm bối cảnh mạng cho điện thoại và không gộp ba thứ đó thành một con số cho toàn bộ thiết bị. Hãy đọc tên các trường trong phiếu trước khi đọc các địa chỉ.

Phiếu thường mô tả điều gì

Hãy hình dung một điện thoại trên Wi-Fi với một đường hầm đang bật. Giao diện Wi-Fi có một địa chỉ LAN, giao diện đường hầm có một địa chỉ bên trong được cấp, và một yêu cầu đi ra qua đường hầm đến một dịch vụ công cộng từ bất kỳ nguồn nào sống sót qua mọi phép dịch trên đường. Ứng dụng in địa chỉ bên trong và máy chủ ghi lại nguồn đã dịch đều báo cáo chính xác, và hai giá trị đó sẽ không bao giờ khớp nhau.

Ba quan sát khác nhau ở điều chúng có thể chứng minh, không chỉ ở điều chúng mô tả.

ObservationWhat it describesWhat it cannot prove
An address on a local interfaceOne configured attachment: Wi-Fi, cellular or a tunnelThe source a remote site receives
A socket's local endpointThe binding used by that one connectionThe address after translation further along
The peer address at a serviceWhat arrived at that observation pointAny other interface on the phone

Hãy giữ bảng đó bên cạnh đoạn mã điền các giá trị này vào phiếu, vì phần lớn sự nhầm lẫn ở đây là nhầm cột chứ không phải lỗi mạng.

Lời gọi socket có thể và không thể trả lời điều gì

Ở mức API, getsockname báo cáo điểm cuối cục bộ hiện đang gắn với một socket cụ thể. Với socket đã kết nối, đó là nguồn mà nhân đã chọn cho kết nối đó, vốn đã cụ thể hơn bất kỳ danh sách giao diện nào. Đây không phải tra cứu địa chỉ công cộng, và gọi nó trên một socket chưa gắn hầu như không cho bạn biết gì. Bất cứ thứ gì nó trả về vẫn có thể bị ghi lại sau đó trên đường đi, nên chỉ quan sát của chính dịch vụ là có thẩm quyền về điều dịch vụ đã nhận.

Trên nền tảng Apple, phía giao diện có một bề mặt riêng: cài đặt đường hầm liệt kê các địa chỉ được cấp cho giao diện đường hầm. Đọc chúng cho bạn biết đường hầm đã được cấu hình thế nào, và không cho bạn biết một yêu cầu cụ thể đã đi theo đường nào, vì định tuyến và quy tắc theo từng ứng dụng quyết định điều đó cho mỗi kết nối.

Đường hầm chia tách làm khoảng trống trở nên hữu hình. Một yêu cầu có thể đi ra qua đường hầm trong khi yêu cầu tiếp theo, hướng tới một đích hoặc một họ địa chỉ khác, thì không, nên hai kết quả từ cùng một ứng dụng cách nhau vài giây có thể trung thực và khác nhau.

Chọn quan sát khớp với câu hỏi

Hãy chọn có chủ đích thay vì đo mọi thứ. Với điều backend nhìn thấy, hãy ghi nguồn tại backend, và ở nơi có proxy ngược đứng trước, hãy đọc địa chỉ máy khách từ tiêu đề chuyển tiếp mà bản triển khai của bạn thực sự đặt, chứ không phải từ bất cứ thứ gì máy khách đã gửi.

Để biết đường hầm có được cấu hình hay không, hãy đọc giao diện. Để biết lưu lượng của ứng dụng này có dùng nó hay không, hãy gửi lưu lượng từ ứng dụng đó tới một đích bạn kiểm soát và so sánh nguồn ở cả hai đầu.

Các quy tắc theo từng ứng dụng xứng đáng có câu riêng. Kết quả của trình duyệt là bằng chứng về trình duyệt đó, và một đường hầm được quản lý theo từng ứng dụng có thể đặt hai ứng dụng trên cùng một điện thoại vào hai đường khác nhau trong cùng một thời điểm. Xác minh độ phủ nghĩa là gửi lưu lượng từ ứng dụng được nói tới, trong họ địa chỉ được nói tới.

Tên giao diện không phải là máy dò

Cũng đừng dùng tên giao diện như một phép kiểm tra VPN. Các tên không phải hợp đồng công khai, và một điện thoại có thể có nhiều kết nối trong khi chỉ một trong số đó mang yêu cầu của bạn.

Hãy đặt tên trường theo quan sát mà nó lưu giữ. local_interface_address, socket_local_endpoint và service_observed_source vụng về và không mơ hồ, và không mơ hồ chính là điều bạn muốn khi giá trị rơi vào một phiếu hỗ trợ một tuần sau đó. Một cột duy nhất tên device IP sẽ thu cả ba rồi sau đó được tin như thể nó là một.

Giữ danh tính ngoài cột địa chỉ

Một lối ra VPN dùng chung không phải là danh tính người dùng, và một địa chỉ riêng không phải là thông tin xác thực truy cập. Cả hai mô tả một đường đi chứ không phải một con người, và coi bất kỳ cái nào trong đó là xác thực sẽ biến một tai nạn định tuyến thành một quyết định cấp quyền.

Khi ai đó hỏi điện thoại có địa chỉ nào, câu trả lời hữu ích là một câu hỏi về kết nối nào và người quan sát nào. Định nghĩa của getsockname đáng được trích dẫn cho trường hợp ở giữa, vì nó giải quyết câu hỏi về socket mà không giả vờ giải quyết hai câu còn lại.

Sau đó hãy ghi lại cái nào trong ba thứ mà sản phẩm của bạn thực sự cần hiển thị, và xóa hai cái còn lại khỏi giao diện.

Bài viết liên quan