WireGuard: hai nửa tuyến so với 0.0.0.0/0 trong wg-quick
Hai dải /1 bao phủ cùng các địa chỉ như /0, nhưng wg-quick định tuyến chúng khác đi. Hãy kiểm tra quy tắc chính sách, dấu và đường đến điểm cuối trước khi sửa.
Hai tiền tố /1 bao phủ đúng cùng các địa chỉ IPv4 như một /0 duy nhất, và sự bằng nhau đó chỉ đúng bên trong danh sách tiền tố được phép của peer. Nó hết đúng ngay khi công cụ thiết lập quyết định cách định tuyến, vì Linux wg-quick xử lý tiền tố mặc định như một trường hợp đặc biệt chứ không như số học. Nhánh đặc biệt cài một bảng riêng, hai quy tắc chính sách, một dấu socket và các thiết lập đường ngược mà một cặp nửa tuyến không bao giờ nhận được. Vì vậy khi proxy hoặc trình duyệt ngừng hoạt động sau khi sửa, các tiền tố là phần kém thú vị nhất của thay đổi.
Danh sách tiền tố không phải toàn bộ cấu hình
AllowedIPs làm hai việc cùng lúc, và chỉ một việc liên quan đến độ phủ. Với chính WireGuard, danh sách là định tuyến bằng khóa mật mã: nó quyết định đích nào được mã hóa về phía peer và peer đó được dùng những địa chỉ nguồn nào. Với wg-quick, cùng danh sách đó còn đóng vai trò đặc tả tuyến, và tuyến nó tạo ra phụ thuộc vào việc danh sách tình cờ khớp với nhánh nào. Do đó độ phủ giống nhau ở hai dạng danh sách khác nhau không nói gì về trạng thái máy chủ giống nhau.
Cấu hình mặc định lấy quyết định đó khỏi tay bạn, vì Table mặc định là tự động và công cụ tự chọn nơi các tuyến đáp xuống. Một trình quản lý mạng khác, một lớp bọc bản phân phối hay một giá trị Table tùy chỉnh lại thay đổi kết quả, nên lời khuyên viết cho một máy chủ có thể trông sai trên máy kế tiếp.
Nhánh mặc định thêm gì ngoài một tuyến
Một mục /0 đưa wg-quick vào đường tuyến mặc định của nó: một bảng định tuyến riêng nhận tuyến mặc định, một quy tắc chính sách đưa lưu lượng không dấu tới đó, quy tắc thứ hai giữ các tuyến cụ thể hơn của bảng chính là có thẩm quyền, và giao diện nhận một dấu tường lửa trên socket của chính nó. Dấu đó là người canh vòng lặp. Các datagram mã hóa mang lưu lượng đường hầm đi ra với dấu đã đặt, để quy tắc đẩy mọi thứ khác vào đường hầm không nuốt chính các gói vận chuyển của đường hầm.
Thay vào đó, một cặp mục /1 đi theo đường tuyến thông thường. Hai tuyến đáp xuống bảng đã cấu hình, và không bộ máy nào xung quanh xuất hiện, không phải vì nó không cần thiết mà vì đường mã đó chưa bao giờ được đi vào.
Nơi hai cách bố trí tách nhau
Khác biệt hiện ra trước tiên như đệ quy. Khi các nửa tuyến nằm trong bảng chính, địa chỉ vận chuyển của chính peer rơi vào bên trong một tiền tố đường hầm, nên gói lẽ ra phải mang đường hầm khớp với một tuyến trỏ vào trong đường hầm. Một thứ gì đó phải miễn trừ nó: một tuyến máy chủ cho điểm cuối hiện tại, một dấu đặt bằng tay hoặc một quy tắc riêng cho giao diện. Một tuyến máy chủ hoạt động cho đến khi địa chỉ điểm cuối thay đổi, điều xảy ra với các điểm cuối dựa trên DNS, máy khách chuyển vùng và cấu hình nhiều peer.
Thứ hai, mọi thứ suy luận về dấu đều đổi hành vi. Một proxy trong suốt chuyển hướng kết nối cục bộ tạo ra các socket mới có dấu và nguồn khác với luồng máy khách ban đầu, và các quy tắc chính sách do nhánh mặc định sinh ra là một phần của thứ đã tách các luồng đó. Đọc kết nối đi ra của chính proxy là một bài tập khác với việc kiểm tra xem đích ban đầu có tới được không.
Hãy đọc quy tắc và dấu trước khi sửa
Ghi lại trạng thái hiện tại khi đường hầm còn khỏe, rồi ghi lại sau khi thay đổi, và so sánh hai bản kết xuất thay vì suy luận từ tệp cấu hình. Bao gồm các quy tắc chính sách, mọi bảng, dấu của giao diện và các điểm cuối đã ghi.
ip rule show
ip -4 route show table all | grep -E 'default|wg1'
wg show wg1 fwmark
wg show wg1 endpoints
Nếu dòng đầu của kết quả mất quy tắc cho lưu lượng không dấu và bảng riêng trống, nhánh mặc định không chạy và không phép tính tiền tố nào khôi phục hiệu ứng của nó. Một dấu bằng không trên giao diện trước đó có một dấu là cùng tín hiệu, nhìn thấy trong một giá trị duy nhất.
Hãy tập mất đường hầm trước khi phát hành
Nếu cách bố trí nửa tuyến là lựa chọn có chủ đích, nó phải cung cấp rõ ràng các phần còn thiếu: một đường điểm cuối chịu được thay đổi địa chỉ, hành vi dự kiến khi đường hầm sụp và cách xử lý tương đương cho IPv6. Hãy viết chúng thành yêu cầu thay vì phát hiện trong lúc sự cố. Rồi tập sự cố, vì một đường hầm đầy đủ lặng lẽ rơi trở lại uplink vật lý còn tệ hơn một đường hầm ngừng hoạt động.
sudo ip -4 route add 198.51.100.20/32 via 192.0.2.1 dev eth0
ip -4 route get 198.51.100.20
sudo wg-quick down wg1
Việc tra tuyến nên phân giải điểm cuối từ giao diện vật lý mà không đi qua đường hầm, và việc hạ giao diện nên để máy chủ ở trạng thái mà thiết kế đã hứa. Một proxy hoạt động sau khi thay thế chứng minh rằng trạng thái máy chủ được sinh ra có ý nghĩa; nó không chứng minh rằng việc chặn vòng lặp và hành vi ở trạng thái tắt đã sống sót qua thay đổi.