Mã hóa bắt đầu tại một ranh giới, và ranh giới đó là một quyết định định tuyến mà điểm cuối đưa ra trước khi bất kỳ gói tin nào được đóng gói. Một mạng không bao giờ thấy khóa của bạn vẫn có thể cấp cho máy của bạn một tuyến mà nó thích hơn tuyến của chính đường hầm. Ở đây có hai lỗi bị nhầm lẫn: đọc một gói tin đã ở trong đường hầm, và lái một gói tin chưa từng được đặt vào đó.

Sự phân biệt này quan trọng vì lỗi thứ hai rẻ hơn để dàn xếp và dễ bị bỏ sót hơn nhiều. Nó xuất hiện như một yêu cầu đi ra qua giao diện sai trong khi máy khách vẫn báo cáo kết nối khỏe mạnh.

Hai cách một mạng có thể ảnh hưởng đến bạn

Một gói tin đến được đường hầm có phần tải trọng bị ẩn khỏi mọi chặng nó đi qua, và sự bảo vệ đó vẫn đứng vững ngay cả khi đường đi làm bạn bất ngờ. Một gói tin không bao giờ đến đường hầm là một yêu cầu bình thường từ địa chỉ của bạn, được gửi đến nơi bảng tuyến chỉ tới. Lỗi thứ nhất cần một mật mã bị phá hoặc một đối tác bị xâm phạm, trong khi lỗi thứ hai chỉ cần một thông điệp cấu hình mà máy của bạn đã chọn tin tưởng. Chính sự bất đối xứng đó là lý do nửa phần định tuyến xứng đáng có một lần xem xét riêng.

Thiết bị trên đường đi không cần khóa của bạn để tác động đến trường hợp thứ hai. Nó chỉ cần điểm cuối của bạn chấp nhận một tuyến, một bộ phân giải hoặc một quy tắc chính sách tạo ra một tuyến như vậy.

expected:  app -> tunnel device -> encapsulation -> internet
observed:  app -> wlan0        -> plaintext     -> internet

Một tuyến có thể đến từ đâu trước khi đường hầm tồn tại

DHCP phân phát nhiều hơn một hợp đồng thuê địa chỉ. Tùy chọn tuyến tĩnh không phân lớp có thể mang tiền tố đích và chặng kế tiếp, và RFC 3442 thảo luận về hậu quả an ninh của một địa chỉ bộ định tuyến sai: lưu lượng bị chệch hướng, từ chối dịch vụ, hoặc một kẻ quan sát đậu trên đường đi. Một máy khách chấp nhận những tuyến đó trước khi đường hầm được dựng lên có thể rơi vào một đường đi ưu tiên không liên quan gì đến nhà cung cấp của bạn.

Không điều nào trong đó làm cho việc chèn tuyến trở nên phổ quát. Máy khách phải chấp nhận tùy chọn, tiền tố phải bao phủ lưu lượng bạn quan tâm, chặng kế tiếp được chọn phải đến được, và chính sách thực thi phải cho phép gói tin đi ra theo đường đó. Bỏ bất kỳ điều nào trong số đó và cùng một phản hồi trở nên vô hại. Đó cũng là lý do hai máy trên cùng một mạng có thể hành xử khác nhau, vì chúng không chạy cùng máy khách, cùng chính sách, hay thậm chí cùng họ địa chỉ.

IPv6 xứng đáng có một lượt riêng, vì các quảng bá bộ định tuyến mang tuyến mặc định qua mã khác với tùy chọn DHCPv4. Một bài kiểm tra chỉ soi bảng v4 thì chưa bao phủ điều đó.

Kiểm tra đường đi mà nhân thực sự chọn

Các truy vấn tuyến có thể được trả lời, nên hãy hỏi chúng thay vì suy đoán từ một đèn trạng thái. Các lệnh dưới đây cho thấy tuyến và nguồn được chọn cho một đích, cùng các quy tắc có thể ghi đè bảng chính. Hãy chạy chúng khi đang kết nối và chạy lại sau khi kết nối lại, vì việc gia hạn hợp đồng thuê có thể thay đổi câu trả lời.

ip route get 203.0.113.10
ip route show table all | grep -E '^(default|203\.0\.113)'
ip rule show
resolvectl query example.com

Đọc kết quả để tìm hai điều: giao diện được nêu trong tuyến và địa chỉ nguồn được chọn. Tuyến đường hầm nêu thiết bị đường hầm, tuyến bị rò nêu thiết bị vật lý, và sự khác biệt thấy được mà không cần giải mã bất cứ thứ gì. Nếu câu trả lời thay đổi giữa các lần chạy, hãy giữ cả hai kết quả và so sánh các quy tắc đã tạo ra chúng.

Đừng dừng ở tuyến mặc định. Một ngoại lệ ứng dụng, một tiền tố đường hầm chia tách, hoặc một quy tắc chính sách thứ hai có thể đưa một đích cụ thể đi vòng qua đường hầm trong khi tuyến mặc định vẫn chỉ vào trong.

Quyết định nơi thực thi nên đặt

Ba điều kiện quyết định việc thực thi phía máy khách đã đủ chưa hay bạn cần thứ gì đó bên ngoài nó. Nếu máy khách cài đặt và bảo vệ các tuyến cho mọi họ địa chỉ bạn dùng, một đường hầm sở hữu tuyến mặc định thường là đủ. Nếu máy phải đến được các tài nguyên cục bộ trong khi mọi thứ khác ở trong đường hầm, những ngoại lệ đó phải được liệt kê và chịu trách nhiệm thay vì phó mặc cho những gì mạng truy cập quảng bá. Và nếu nền tảng có thể ràng buộc lưu lượng vào một giao diện theo từng ứng dụng, ràng buộc đó là bảo đảm mạnh hơn một tuyến mà bất cứ thứ gì cũng có thể ghi đè.

Dù bạn chọn gì, hãy viết quyết định ở nơi cấu hình sống. Một quy tắc tồn tại vì ai đó đã gõ nó trong một sự cố sẽ không sống sót qua lần khởi động lại tiếp theo, nên hãy giữ các ngoại lệ cục bộ và khởi động hẹp và ghi lại vì sao mỗi cái tồn tại.

Chạy lại các lệnh truy vấn sau mỗi lần nâng cấp máy khách và mỗi lần thay đổi mạng, và so sánh với kết quả ghi lại gần nhất. Bảng tuyến là ranh giới thực thi, nên hãy đối xử với nó như vậy.

Bài viết liên quan