Listen, Bind và BindSame trong Tinyproxy: địa chỉ nào thắng
Listen chọn địa chỉ tiếp nhận máy khách, Bind chọn nguồn cho các kết nối đi ra. Cả hai đều không cài tuyến đường, nên hãy kiểm tra đường đi riêng.
Proxy trả lời, yêu cầu hoàn tất, và dù vậy đích vẫn ghi lại địa chỉ của LAN. Không có gì trong nhật ký proxy trông sai, và dòng bạn sửa đúng là dòng mà tài liệu bảo bạn sửa. Trên một máy chủ có cả địa chỉ LAN và địa chỉ đường hầm, ba chỉ thị quyết định địa chỉ nào xuất hiện ở đâu, và chỉ một trong số đó liên quan đến phía đi ra. Đọc chúng sai thứ tự sẽ đưa bạn vào bảng định tuyến mà không có lý do.
Triệu chứng: đích nhìn thấy địa chỉ LAN
Máy khách kết nối tới proxy trên địa chỉ LAN, và proxy mở kết nối riêng của nó tới đích. Kết nối thứ hai đó chọn địa chỉ nguồn theo các quy tắc của nhân, và mặc định là địa chỉ mà tra cứu tuyến đường chọn. Vì vậy đích ghi lại địa chỉ chính của máy chủ dù mọi byte đã đi qua proxy. Về mặt chuyển tiếp không có gì hỏng, và đó là lý do nhật ký proxy không có gì để nói.
Hình ảnh ngược của lỗi đó dễ thấy hơn: ghim nguồn đi ra vào địa chỉ đường hầm và máy khách LAN không còn tới được trình lắng nghe nữa. Bản đó tự thông báo, còn bản đầu tiên ẩn sau một yêu cầu đang hoạt động. Cả hai đều do coi một chỉ thị như thể nó trả lời cả hai câu hỏi.
Ba chỉ thị, ba địa chỉ khác nhau
Listen định danh địa chỉ cục bộ tiếp nhận máy khách của proxy. Bind cung cấp địa chỉ nguồn cho các kết nối mà proxy tạo ra phía ngoài, và BindSame bảo nó dùng lại địa chỉ cục bộ của kết nối vừa được chấp nhận. Đó là ba câu hỏi riêng biệt, và một dòng chỉ trả lời một câu. Nhầm lẫn giữa chúng là lý do thường gặp khiến một thay đổi có vẻ không làm gì.
| What you observe | Check first |
|---|---|
| A client cannot connect at all | Listen: the local address the listener binds |
| The request works but the far side logs the LAN address | Bind: the outgoing source is not being applied |
| A configured Bind appears to have no effect | BindSame yes: the accepted local address overrides the Bind list |
| The lookup names the LAN interface | The route, not the proxy: the source cannot reach that destination |
Hãy đọc cấu hình có chú thích đi kèm phiên bản đã cài, vì giá trị mặc định và cú pháp được chấp nhận thay đổi giữa các bản phát hành. Cấu hình mẫu của dự án ghi lại từng chỉ thị bên cạnh những chỉ thị khác. So sánh tệp đó với tệp trên đĩa, không phải với hướng dẫn viết cho bản phân phối khác.
Đặt trình lắng nghe và nguồn đi ra một cách độc lập
Lấy một máy chủ có địa chỉ LAN là 192.168.50.10 và địa chỉ đường hầm là 10.90.0.3. Nếu máy khách LAN phải tới được proxy trong khi yêu cầu của họ đi ra qua đường hầm, đó là hai quyết định độc lập và cả hai đều phải được ghi ra. Đoạn dưới đây diễn đạt đúng điều đó và không gì khác.
Listen 192.168.50.10
Bind 10.90.0.3
BindSame noĐây không phải cấu hình đầy đủ, nên hãy giữ cổng đã được phê duyệt, xác thực, kiểm soát truy cập của máy khách và các giới hạn đích. Cả hai địa chỉ phải thuộc về máy chủ này bên trong không gian tên mạng của Tinyproxy, vì một giá trị Bind mà tiến trình không thể sở hữu sẽ thất bại khi kết nối, không phải khi khởi động. BindSame yes mô tả một chính sách khác, trong đó địa chỉ cục bộ của kết nối được chấp nhận trở thành nguồn đi ra. Trong các bản phát hành hiện tại nhánh đó được ưu tiên hơn danh sách Bind, và đó là cách một nguồn đã cấu hình biến mất mà không có lỗi.
Kiểm tra tuyến đường mà nguồn ngụ ý
Chọn một địa chỉ nguồn không tạo ra đường đi, nên hãy hỏi nhân xem nó sẽ làm gì với nguồn và đích đó. Một tra cứu nêu giao diện đường hầm là bằng chứng tối thiểu, và tra cứu nêu giao diện LAN nghĩa là nguồn không thể hoạt động như đã viết. Tra cứu mang tính ngữ cảnh: nó đánh giá các quy tắc chính sách và bảng đang có hiệu lực cho không gian tên đó. Đó không phải là kết nối, và nó không nói gì về điều mà NAT phía sau sẽ trình bày với dịch vụ.
ip -4 route get 203.0.113.25 from 10.90.0.3Dùng một địa chỉ dành cho tài liệu trong ví dụ và thay bằng dịch vụ mà bạn được phép kiểm thử. Chạy tra cứu bên trong không gian tên của proxy khi proxy chạy trong vùng chứa, vì quy tắc của máy chủ không phải là quy tắc mà tiến trình nhìn thấy. Khi thiếu tuyến đường hầm dự định, hãy để chủ sở hữu mạng sửa nó thay vì thêm quy tắc riêng cho đích trên máy chủ proxy. Không xóa tuyến đường của máy chủ và không tắt các tuyến đường do máy chủ đẩy xuống để một tra cứu thành công, kể cả khi hướng dẫn cũ đã làm vậy, vì những thay đổi đó dịch chuyển toàn bộ hành vi VPN đã được phê duyệt của máy chủ để sửa một đường đi của proxy.
Xác nhận nguồn tại đích
Đọc nguồn ở nơi yêu cầu tới, không phải nơi nó đi. Nhật ký ứng dụng ở đích, hoặc thiết bị biên phía trước nó, ghi lại địa chỉ mà nó thực sự thấy, trong khi proxy chỉ có thể cho bạn biết ý định của nó. Thực hiện một yêu cầu mới qua trình lắng nghe dự định sau thay đổi, vì một kết nối đã lưu trong bộ đệm không chứng minh được gì về ràng buộc mới. Sau đó so sánh địa chỉ đã ghi với địa chỉ bạn đã cấu hình.
ss -ltnp | grep tinyproxy
curl -x http://192.168.50.10:8888 https://example.com -o /dev/null -sScurl chỉ là bộ tạo lưu lượng; địa chỉ đáng kiểm chứng là địa chỉ mà phía xa đã ghi, không phải đối tác mà curl tình cờ kết nối tới. Nếu hai bên không khớp, hãy xác định xem khác biệt đến từ việc chọn nguồn hay từ một phép chuyển đổi xa hơn trên đường, vì chúng được sửa ở những nơi khác nhau. Lập kế hoạch thay đổi địa chỉ và khởi động lại proxy cùng nhau, vì ràng buộc một địa chỉ mà đường hầm không còn giữ sẽ thất bại âm thầm sau khi kết nối lại. Cũng hãy định nghĩa hành vi DNS và IPv6 riêng, vì đoạn IPv4 ở trên không chứng minh được gì về cả hai.