Firefox trỏ tới 127.0.0.1:8000, biên N2N đang hoạt động, máy ngang hàng trả lời ping trên địa chỉ lớp phủ của nó, và trình duyệt vẫn báo rằng proxy đã từ chối kết nối. Không có gì mâu thuẫn trong chuỗi đó. Lớp phủ cấp cho máy chủ một địa chỉ có thể tới được trên mạng riêng; nó không tạo ra tiến trình nói giao thức proxy. Trình duyệt không yêu cầu một tuyến đường tới máy ngang hàng. Nó yêu cầu một trình lắng nghe cục bộ.

Hai kết nối đang bị nhầm lẫn ở đây, và vẽ chúng riêng ra sẽ làm rõ phần lớn sự nhầm lẫn trong một phút.

Hai kết nối, không phải một

Kết nối thứ nhất chạy từ trình duyệt tới bất cứ thứ gì lắng nghe trên cổng loopback. Đó là một socket cục bộ, và nếu không có gì sở hữu nó, kết nối bị từ chối trước khi một gói tin kịp tới N2N. Kết nối thứ hai chạy từ tiến trình proxy tới nguồn mà nó đang lấy. Đường đi đó do bảng định tuyến của máy chủ proxy chọn, và nó có thể là đường lên thông thường, một đường hầm khác hoặc một tuyến chính sách không liên quan gì tới lớp phủ.

Ping tới máy ngang hàng chứng minh lớp phủ có thể chuyển gói tin giữa các địa chỉ biên. Nó không chứng minh gì về trình lắng nghe trên cổng 8000, và cũng không chứng minh máy chủ đó có tới được nguồn hay không. Lỗi riêng, cách sửa riêng.

Trình lắng nghe phải sống ở đâu

Proxy gắn với 127.0.0.1 là cố ý cục bộ: nó chỉ chấp nhận kết nối từ máy nơi nó chạy. Đó là mặc định đúng cho proxy cá nhân và là hình dạng sai để chia sẻ nó qua lớp phủ. Phục vụ các máy ngang hàng của lớp phủ cần hoặc một địa chỉ bind trên giao diện lớp phủ, hoặc một thành phần chuyển tiếp kết thúc kết nối loopback và chuyển tiếp nó. Dù thế nào, một chính sách rõ ràng nên quyết định nguồn lớp phủ nào được dùng dịch vụ, vì proxy mở trên mạng chia sẻ là một lời mời.

Kiểm tra bind thực tế bằng danh sách socket thay vì tệp cấu hình. Một daemon khởi động trước khi lớp phủ lên có thể vẫn gắn với một địa chỉ không còn tồn tại.

localhost không phải máy ngang hàng

Trong trường proxy của trình duyệt, localhost trỏ tới máy của chính trình duyệt. Nó không phải biên, không phải supernode và không phải máy chủ ở đầu xa của đường hầm. Nếu proxy chạy trên máy ngang hàng khác, hãy đặt địa chỉ lớp phủ có thể tới được và cổng của máy đó vào trường, rồi xác nhận rằng trình lắng nghe chấp nhận kết nối từ địa chỉ biên của bạn.

Supernode giúp các biên tìm thấy nhau; chúng không phải dịch vụ proxy. Coi địa chỉ supernode là điểm cuối proxy tạo ra cùng sự từ chối với thêm một bước nhầm lẫn.

Một tuyến đường không thể thực hiện bắt tay

Ngay cả khi địa chỉ đúng, định tuyến không phải là làm proxy. Kết nối proxy HTTP bắt đầu bằng yêu cầu CONNECT hoặc dòng yêu cầu dạng tuyệt đối, và proxy SOCKS bắt đầu bằng thương lượng phiên bản và phương thức. Bộ định tuyến hoặc lớp phủ chuyển tiếp byte; nó không phân tích các thông điệp đó hay mở kết nối tiếp theo thay bạn. Đó là lý do một tuyến đường hoạt động với ping và SSH vẫn có thể thất bại với proxy của trình duyệt: trình duyệt cần một tiến trình hợp tác, không chỉ là khả năng tới được.

Nếu mục tiêu chỉ là tới một dịch vụ trên máy ngang hàng, hãy bỏ cài đặt proxy và dùng trực tiếp địa chỉ lớp phủ của dịch vụ.

Kiểm tra các ranh giới theo thứ tự

Xác nhận địa chỉ lớp phủ trả lời, sau đó xác nhận có trình lắng nghe trên cổng đã cấu hình và ghi lại địa chỉ bind của nó. Thực hiện một yêu cầu có kiểm soát và đọc nhật ký proxy, để biết lỗi nằm ở trình lắng nghe hay ở bước lấy tiếp theo. Cuối cùng, kiểm tra tuyến đường của máy chủ proxy và chính sách DNS cho nguồn.

Dự án N2N ghi nhận các biên và supernode là thành phần của lớp phủ. Nó không biến một biên thành proxy ứng dụng, và không cấu hình định tuyến nào thêm một trình xử lý giao thức mà không ai khởi động.

Bài viết liên quan