Nút thoát ZeroTier không hoạt động? Kiểm tra tuyến, NAT và máy khách
Tuyến 0.0.0.0/0 trên máy khách chưa phải là lối thoát. Nút phải chuyển tiếp và dịch địa chỉ, mạng phải quảng bá tuyến, và máy khách phải chấp nhận nó.
Bảng tuyến hiển thị một tuyến mặc định qua giao diện ZeroTier, mạng báo trực tuyến, và trình duyệt vẫn ra ngoài bằng địa chỉ ISP cục bộ. Sự kết hợp đó là phổ biến và không phải lỗi của máy khách. Tuyến mặc định chỉ cho biết gói tin nên đi đâu; phải có thứ gì đó chuyển tiếp và dịch chúng ở đầu bên kia. Ba phần riêng biệt phải đúng trước khi nút thoát hoạt động.
Tuyến tồn tại nhưng không có gì đi ra
Trước tiên hãy kiểm tra bảng tuyến của máy khách. Một dòng như default via 10.147.20.5 dev zt0 chứng minh tuyến đã được cài đặt, không phải đích sẽ nhận lưu lượng. Bước nhảy tiếp theo phải là một thành viên sẵn sàng và có khả năng chuyển tiếp nó.
Nếu cùng yêu cầu đó vẫn đi ra qua giao diện vật lý, máy khách đã không cài tuyến, hoặc cài với số đo thua tuyến mặc định cục bộ. Nếu yêu cầu biến mất sau khi cài tuyến, thành viên thoát đang nhận gói tin và không chuyển tiếp hay dịch được chúng. Máy khách giữ tuyến mặc định vật lý không gửi gói tin nào đến lối thoát.
Sự khác biệt đó quyết định nơi cần sửa. So sánh một địa chỉ công cộng trước và sau thay đổi sẽ tách tuyến chưa từng dùng khỏi tuyến đã dùng rồi bị bỏ, và chỉ cần một lệnh thay vì rà soát toàn bộ cấu hình. Hãy so sánh trước khi thay đổi bất cứ thứ gì khác, để cả hai kết quả cùng xuất phát từ một trạng thái ban đầu.
Ba phần đều phải đúng
Lối thoát là một chuỗi, và mắt xích yếu nhất quyết định triệu chứng. Bảng dưới đây liệt kê các mắt xích theo thứ tự chúng thường hỏng.
| Part | Where it lives | What a failure looks like |
|---|---|---|
| Forwarding and NAT | Exit node kernel and firewall | Traffic arrives, no reply |
| Managed default route | ZeroTier network controller | No default via the tunnel on the member |
| Client acceptance | Member's per-network setting | Route offered but not installed |
| DNS behavior | Client resolver configuration | Pages fail by name, IP works |
Dòng đầu tiên là phần mà tên tùy chọn che giấu. Một thành viên chỉ trở thành lối thoát khi nhân của nó chuyển tiếp gói tin giữa giao diện ZeroTier và giao diện hướng ra internet, và khi đường phản hồi được dịch ngược về đường hầm. Không có chuyển tiếp đó, thành viên chỉ là một điểm ngang hàng, không phải cổng.
Dòng của bộ điều khiển là cấp quyền, không phải cấu hình. Quảng bá 0.0.0.0/0 qua một thành viên cho mọi máy khách biết lối thoát ở đâu; điều đó không làm thành viên đó có khả năng mang lưu lượng. Nó cũng không xác minh thành viên có đường hoạt động ra internet. Tài liệu về nút thoát của ZeroTier cũng trình bày cùng sự tách biệt giữa nút, tuyến và máy khách.
Cấu hình nút thoát để chuyển tiếp và dịch
Bật chuyển tiếp IPv4 lâu dài, sau đó thêm NAT nguồn cho lưu lượng rời giao diện WAN. Các quy tắc lọc phải cho phép luồng đã chuyển tiếp theo cả hai chiều, vì chuyển tiếp và dịch tách biệt với quyền cho phép:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o zt0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTThay zt0 và eth0 bằng tên trên máy chủ; một quy tắc lưu cho giao diện ví dụ không theo gói tin trên giao diện thật. Hãy làm các thay đổi lâu dài qua trình quản lý tường lửa sở hữu các quy tắc, vì một lệnh trong shell tương tác sẽ mất khi khởi động lại lần sau.
Nếu máy chủ chạy trình quản lý tường lửa như UFW hoặc firewalld, hãy thêm quy tắc qua trình quản lý đó thay vì chồng các dòng iptables bên cạnh. Hai người sở hữu cùng sửa các chuỗi sẽ tạo ra chính sách phụ thuộc thứ tự khởi động. Thứ tự quan trọng khi trình quản lý tự sinh chuỗi. Hãy thử từ máy khách sau khi tải lại trình quản lý, không phải trước đó.
Quảng bá tuyến và chấp nhận nó trên máy khách
Trên bộ điều khiển mạng, thêm một tuyến được quản lý cho 0.0.0.0/0 với bước nhảy tiếp theo là địa chỉ ZeroTier của thành viên thoát. Sau đó, trên thành viên nên dùng nó, cho phép ghi đè cho mạng đó. Quyền là cục bộ: nó không cấu hình lại các thành viên khác và không thay đổi bộ điều khiển.
zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1Lệnh cuối cùng phải báo cáo giao diện ZeroTier và địa chỉ của thành viên thoát. Nếu nó vẫn báo giao diện vật lý, tuyến bị thiếu hoặc một tuyến mặc định cạnh tranh có số đo tốt hơn.
Giữ cài đặt giới hạn trong mạng cần nó. Bật chấp nhận tuyến mặc định trên toàn cầu, hoặc trên mạng chỉ nên cung cấp một mạng con riêng, sẽ gửi lưu lượng qua một lối thoát chưa từng được thiết kế cho việc đó.
Xác minh lối thoát và xem các họ địa chỉ khác
Yêu cầu một địa chỉ công cộng từ dịch vụ báo cáo nguồn, và so sánh với địa chỉ WAN của nút thoát. Sau đó tải một trang theo tên để xác nhận DNS vẫn phân giải, và thử một ứng dụng quan trọng thay vì chỉ trình duyệt.
Máy khách hai ngăn xếp có thể tiếp tục dùng đường IPv6 gốc của mình trong khi IPv4 đi ra qua ZeroTier. Nếu mục tiêu là ẩn hoặc kiểm soát toàn bộ lưu lượng, cần một tuyến ::/0 riêng và chuyển tiếp IPv6 trên lối thoát, và một thử nghiệm IPv4 không nói gì về chúng.
Lọc đường ngược của Linux cũng có thể loại bỏ lưu lượng thoát hợp lệ trên máy khách. ZeroTier có tài liệu về cân nhắc rp_filter cho các thành viên tham gia; hãy thay đổi cài đặt đó một cách có chủ ý và chỉ sau khi tuyến và NAT đã được xác nhận, không phải như thử nghiệm đầu tiên.
Nếu yêu cầu là truy cập NAS hoặc một mạng con văn phòng, một tuyến được quản lý cho tiền tố đó là thay đổi nhỏ hơn và an toàn hơn so với lối thoát đầy đủ. Gửi toàn bộ việc duyệt web qua thiết bị khác là quyết định khác với việc đến một tài nguyên riêng, và nó xứng đáng được xem xét riêng.