AllowedIPs là danh sách định tuyến, không phải quy tắc tường lửa
Nó chọn một peer cho lưu lượng đi ra và xác thực nguồn đi vào. Đây không phải danh sách truy cập, và việc tắt quản lý tuyến không sửa được một tunnel chia tách.
Hầu hết mọi người đọc AllowedIPs như một danh sách quyền, tức tập hợp các địa chỉ được phép kết nối tới một peer, gần giống một quy tắc tường lửa viết cho tunnel. Không phải vậy. Trường này là một bảng định tuyến hoạt động theo cả hai chiều: nó chọn peer cho gói đi ra và xác thực nguồn của gói đi vào. Đọc nó như danh sách truy cập sẽ tạo ra các cấu hình định tuyến lưu lượng mà không ai yêu cầu.
Một trường, hai người đọc: chọn đường ra và kiểm tra nguồn
Ở máy khách, các tiền tố quyết định đích nào đi tới peer đó và đích nào ở lại mạng thường. Vì vậy một mục cho 0.0.0.0/0 bắt trọn mọi đích IPv4, và đó là lý do nhập một hồ sơ tunnel đầy đủ gửi việc duyệt web thông thường qua máy từ xa. Các mục hẹp làm ngược lại: chỉ định tuyến những mạng bạn đã liệt kê và để mọi thứ khác ở nguyên chỗ cũ. Phần định tuyến khóa mật mã trong tài liệu WireGuard nêu cả hai nhiệm vụ ở một chỗ: chọn peer đi ra và xác thực nguồn đi vào.
Trên máy chủ, cùng trường đó mô tả các địa chỉ nguồn mà mỗi peer được dùng. Đây là kiểm tra mật mã chứ không phải bộ lọc gói: một gói có nguồn bên trong không khớp danh sách của peer sẽ bị loại bỏ bên trong WireGuard trước khi bất kỳ tường lửa nào trên máy chủ nhìn thấy nó. Hai nhiệm vụ dùng chung một danh sách, và chính vì thế một danh sách sao chép từ nơi khác lại hành xử sai ở chỗ bạn không tính đến.
Khối máy khách là nơi phần lớn sự nhầm lẫn này bắt đầu. Tunnel chia tách nêu tên các mạng từ xa, còn tunnel đầy đủ là cùng trường đó với một tiền tố mặc định:
[Peer]
# split tunnel: only these networks
AllowedIPs = 10.77.0.0/24, 192.168.30.0/24
[Peer]
# full tunnel: everything, both families
AllowedIPs = 0.0.0.0/0, ::/0
Cả hai dạng đều hoàn chỉnh tự thân, và chúng là lựa chọn thay thế chứ không phải các bước. Dạng thứ nhất chỉ gửi hai mạng đó qua tunnel; dạng thứ hai gửi mọi đích, với mục ::/0 thêm IPv6 vào mặc định IPv4. Dù bạn chọn dạng nào, các tiền tố đó là toàn bộ quyết định định tuyến cho peer ấy khi wg-quick bắt đầu cài đặt tuyến.
Hub cần một danh sách khác
Hub liệt kê địa chỉ tunnel của từng máy khách như một tiền tố máy chủ, cộng với bất kỳ mạng nào thực sự nằm sau máy khách đó. Sao chép danh sách rộng của một máy khách sang mọi peer của hub nói với hub rằng nhiều peer có thể dùng cùng địa chỉ làm nguồn, và đó không phải một kế hoạch địa chỉ. Trường Endpoint thuộc về một lớp hoàn toàn khác: nó nêu địa chỉ và cổng bên ngoài của peer, không bao giờ là đích bên trong tunnel.
[Peer]
# laptop: tunnel address 10.77.0.2, office LAN behind it
AllowedIPs = 10.77.0.2/32, 192.168.30.0/24
Tiền tố máy chủ mang địa chỉ tunnel và tiền tố mạng mang thứ nằm sau máy khách, và cả hai đều cần. Không có tiền tố máy chủ, hub không thể trả lưu lượng của chính máy khách về; không có tiền tố mạng, LAN phía sau vẫn không thể tới được; một peer không có gì phía sau chỉ nhận tiền tố máy chủ.
Bỏ qua cài đặt tuyến để lại một khoảng trống
wg-quick, trình trợ giúp dựng giao diện từ tệp cấu hình, cài đặt địa chỉ giao diện và tuyến như một phần của công việc đó. Đặt Table = off bảo trình trợ giúp bỏ qua phần việc tuyến, điều này không cài đặt thứ thay thế và không làm mạng riêng tới được. Khi các tuyến tự động đã làm việc đó, nêu các tiền tố bạn cần là cấu hình rõ ràng hơn. Tắt quản lý tuyến và để thứ thay thế không được viết ra không phải là thiết kế, mà là một thiếu sót.
Công cụ cơ bản wg hành xử khác: nó cấu hình giao diện và không bao giờ chạm vào tuyến, nên một thiết lập dựng trực tiếp trên nó cần các lệnh tuyến riêng. Hướng dẫn viết cho một công cụ có thể trông sai khi làm theo với công cụ kia. Một ping thành công cũng là bằng chứng yếu, vì nó chỉ thử một đường chứ không phải mọi đường của ứng dụng mà bạn cần.
DNS và IPv6 được quyết định riêng
Kiểm tra địa chỉ máy chủ DNS mà tunnel quảng bá, và xác nhận rằng có một tuyến tới địa chỉ đó qua các tiền tố bạn đã chọn. Một thiết lập trình phân giải không làm trình phân giải tới được, và thu hẹp một tunnel có thể âm thầm xóa tuyến từng dẫn tới đó. Cũng hãy kiểm tra IPv6 riêng, vì một cách chia IPv4 đúng không nói gì về tuyến mặc định IPv6 vẫn trỏ tới liên kết vật lý. Ba quyết định riêng biệt có thể thay đổi cùng lúc khi bạn sửa một khối peer.
Sau đó mở một tài nguyên riêng và một trang web thông thường từ một cấu hình khởi đầu đã biết. Nếu tài nguyên phản hồi và việc duyệt web vẫn đi ra qua kết nối cục bộ, cách chia đang làm đúng điều bạn yêu cầu. Nếu việc duyệt web hỏng cùng lúc, tunnel đã lấy tuyến mặc định và danh sách tiền tố là nơi cần xem.