Giả định là đường hầm là một sợi dây riêng và nhanh: bạn dựng nó lên, lưu lượng bên trong được mã hóa, đường đi ngắn hơn và liên kết hành xử như một sợi cáp giữa hai điểm. Mỗi phần của giả định đó là một thuộc tính riêng, và đường hầm chỉ cung cấp thứ đầu tiên bạn yêu cầu, tức là một đường đi logic. Mọi thứ khác phải được chọn và cấu hình có chủ đích. Nhầm lẫn các thuộc tính là cách một thiết kế kết thúc với một liên kết được mã hóa mà không ai có thể khắc phục và một lời hứa về độ trễ mà không ai có thể giữ.

Huyền thoại: một đường hầm, ba bảo đảm

Đường hầm làm một việc một cách đáng tin cậy. Nó khiến hai đầu không kết nối trực tiếp hành xử như thể chúng ở liền kề cho một mục đích nào đó, trong khi mạng ở giữa mang các gói bên ngoài. Đó là một thay đổi cấu trúc liên kết, và bản thân nó thực sự hữu ích.

Mã hóa, vận chuyển giao thức và cô lập chuyển tiếp là những quyết định riêng được xếp lên trên. Một đường hầm GRE không có thuộc tính nào trong ba thuộc tính đó theo nghĩa mật mã, và một đường hầm IP-in-IP là một thiết kế hợp lệ hoàn toàn không có bảo mật. Không cái nào là sai lầm; chúng là những đường hầm làm đúng những gì đường hầm làm. Nhãn trên sơ đồ không cho biết thuộc tính nào hiện diện.

Khi bạn tách các thuộc tính ra, các câu hỏi trở nên có thể trả lời: đường hầm này có mang quan hệ lân cận định tuyến không, có mang khung không, có ẩn địa chỉ bên trong không, có hứa hẹn gì về độ trễ không? Đó là bốn câu trả lời khác nhau với bốn hệ quả cấu hình khác nhau.

Đường hầm thực sự thêm gì vào bản đồ

Các đầu nhận được một đường đi mà trước đây chúng không có. Đường đi đó hành xử như một bước nhảy được định tuyến hay như một phân đoạn Ethernet hoàn toàn phụ thuộc vào đóng gói, và sự khác biệt thay đổi những gì hai điểm có thể làm với nó. Một đường hầm được định tuyến cho bạn bước nhảy tiếp theo và một tiền tố; một phần mở rộng Ethernet cho bạn hành vi quảng bá và miền lỗi lớn hơn nhiều.

Một đường hầm IP không tự động biến điểm xa thành một phần của cùng một mạng con, và không làm cho một giao thức định tuyến chạy qua nó trừ khi việc triển khai hỗ trợ quan hệ lân cận đó. Multicast là một câu hỏi riêng khác với câu trả lời của riêng nó.

ip -d link show type gre
ip route get 10.20.0.5
traceroute -n -T -p 443 10.20.0.5
mtr -n --report -c 20 10.20.0.5

Những lệnh đó trả lời các phần khác nhau của câu hỏi. Lệnh đầu cho biết loại giao diện nào tồn tại, lệnh thứ hai cho biết nhân sẽ chọn đường đi nào, và hai lệnh cuối cho thấy hành vi thực tế của lớp bên dưới thay vì lời hứa của nhãn.

Vận chuyển là một quyết định riêng so với khả năng tiếp cận

Một đường hầm có thể mang một giao thức mà lớp bên dưới không chuyển tiếp. IPv6 trên một đường đi IPv4 là trường hợp kinh điển, và nó hoạt động vì các đầu hiểu cả hai họ, trong khi các bộ định tuyến ở giữa chỉ cần giao các gói bên ngoài. Lớp bên dưới cần một đường đi hoạt động đến đầu đường hầm và không cần gì hơn.

Tuy nhiên, các đầu cần hỗ trợ đầy đủ: chuyển tiếp, địa chỉ và một ứng dụng thực sự sử dụng họ bên trong. Gán một tiền tố IPv6 cho đường hầm không làm cho một dịch vụ chỉ chạy với IPv4 trở nên tiếp cận được qua IPv6, và không làm cho lớp bên dưới trở thành dual-stack.

Vận chuyển khung là một cam kết lớn hơn vận chuyển giao thức. Mở rộng một miền quảng bá qua đường hầm di chuyển theo nó hành vi cây bao trùm, ARP và sự lan truyền lỗi, đó là một quyết định thiết kế chứ không phải một công tắc tính năng.

Cô lập không phải là bảo mật

VPN của nhà cung cấp giữ các tuyến và lưu lượng của khách hàng trong các ngữ cảnh chuyển tiếp riêng, và sự tách biệt đó là thật và có giá trị. Đó không phải là mã hóa. Đặc tả BGP/MPLS VPN nói rõ rằng tính riêng tư của nó đến từ mô hình chuyển tiếp chứ không phải từ mật mã, và đó chính xác là sự phân biệt bị mất trong một trang chiếu chỉ nói VPN.

Nếu bạn cần bảo mật, bạn cần một cơ chế mật mã có xác thực và quản lý khóa, và bạn cần biết nó kết thúc ở đâu. Một đường hầm cung cấp sự tách biệt và một đường hầm cung cấp mã hóa có thể là cùng một đường hầm, nhưng chỉ khi ai đó đã cấu hình cả hai.

Hệ quả thực tế là «nó ở trong một VPN» trả lời một câu hỏi về ngữ cảnh định tuyến và không cho bạn biết gì về việc ai có thể đọc các byte trên đường đi. Hai nhóm có thể đều đúng và vẫn mô tả những thứ khác nhau. Khi câu hỏi bảo mật xuất hiện, hãy hỏi mật mã kết thúc ở đâu và điều gì xác thực các bên, không phải liệu có một đường hầm hay không.

Độ trễ và QoS tuân theo lớp bên dưới

Một cạnh logic không phải là một đường đi vật lý ngắn hơn. Các gói bên ngoài vẫn đi qua cùng các liên kết, hàng đợi và nhà cung cấp, và đóng gói thêm chi phí trên mỗi gói cộng với xử lý ở cả hai đầu. Một đường hầm có thể nhanh vì lớp bên dưới tốt, không bao giờ vì nó là đường hầm.

Việc xử lý chất lượng dịch vụ còn tệ hơn, vì nó phụ thuộc vào các miền quản trị mà bạn có thể không kiểm soát. Các dấu bên trong phải được ánh xạ một cách có chủ đích sang các dấu bên ngoài, và mỗi nhà cung cấp trên đường đi phải cung cấp cách xử lý mà bạn mong đợi. Mã hóa không tạo ra ưu tiên; nó ẩn trường mà một hộp trung gian có thể đã dùng để phân loại luồng.

Hãy đo lớp bên dưới trước khi hứa bất cứ điều gì. Một báo cáo cho thấy độ trễ ổn định và không mất gói trên đường đi bên ngoài là bằng chứng; một sơ đồ có đường hầm trên đó thì không phải.

Chọn đường hầm cho mối quan hệ mạng mà bạn cần, sau đó chỉ định riêng mã hóa, chính sách truy cập, kích thước gói và hiệu năng. Bốn quyết định, bốn bằng chứng, và không có một nhãn duy nhất nào thay thế cho bất kỳ điều nào trong số đó.

Bài viết liên quan