Cả hai thiết kế bảo vệ cùng lưu lượng bằng cùng bộ máy IPsec, và chúng khác nhau ở chỗ điều gì quyết định gói nào đi vào đường hầm. Trong kết nối dựa trên chính sách, các bộ chọn lưu lượng đã thương lượng làm việc đó; trong kết nối dựa trên tuyến, một tuyến trỏ tới giao diện đường hầm làm việc đó. Nhầm lẫn hai thứ này tạo ra chuỗi hỗ trợ quen thuộc, trong đó đường hầm báo đã dựng nhưng ứng dụng không tới được đâu. Sự khác biệt quan trọng nhất khi bạn thêm một mạng, chạy giao thức định tuyến hoặc gỡ lỗi một đường đi lặng lẽ thoát qua cổng ra sai.

Hai cách quyết định điều gì đi vào đường hầm

VPN dựa trên chính sách dựng một chính sách bảo mật khớp với tiền tố nguồn và đích, rồi mã hóa mọi thứ phù hợp. Đối phương phải thương lượng các bộ chọn tương thích, vì vậy phạm vi hiệu dụng cuối cùng là giao của những gì cả hai bên đề xuất. Không gì ngoài giao đó được bảo vệ, bảng định tuyến nói gì cũng vậy.

VPN dựa trên tuyến tạo một giao diện đại diện cho đường hầm và để bảng định tuyến gửi lưu lượng vào đó. Tiến trình IKE vẫn cài trạng thái và chính sách theo từng giao diện, và đó là chi tiết người ta bỏ qua khi cho rằng tuyến đã thay thế mã hóa. Cả hai thiết kế đều mã hóa bằng IPsec; chỉ cơ chế chọn là khác.

Hãy đọc bảng so sánh dưới đây như một tập dấu hiệu hỏng hóc chứ không phải bảng điểm, vì không cột nào thắng tự thân.

AspectPolicy-basedRoute-based
What selects trafficNegotiated selectorsA route into the tunnel interface
Adding a networkEdit selectors on both peersAdd a route, widen the selector once
Dynamic routingAwkward to run over the tunnelRuns over the interface directly
Typical failureTunnel up, host outside the selectorTunnel up, no route or wrong source

Dựa trên chính sách: bộ chọn là hợp đồng

Các bộ chọn được thương lượng chứ không chỉ được cấu hình. Đề xuất 10.10.0.0/16 ở một bên và 10.10.1.0/24 ở bên kia, liên kết sẽ bao phủ phần thương lượng đã chốt trong khi mọi máy chủ khác ở ngoài.

Đọc trạng thái đã cài thay vì tệp cấu hình. Trên đối tác Linux, chính các bảng của nhân là sự thật nền tảng, và chúng cho thấy điều gì sống sót sau thương lượng. Một chính sách nêu đúng tiền tố nhưng không có trạng thái khớp nghĩa là liên kết chưa bao giờ dựng lên. Trạng thái đi kèm chính sách cho tiền tố sai là vấn đề ngược lại, và nó tạo ra đường hầm trông khỏe mạnh trong khi một mạng con không tới được đâu.

sudo ip xfrm state
sudo ip xfrm policy
sudo swanctl --list-sas

So sánh cả hai đầu ra với các tiền tố bạn cho là đang được bảo vệ. Chính phép so sánh đó giải quyết phần lớn báo cáo về đường hầm chạy được nhưng máy chủ không tới được. Nó cũng chỉ ra nên đổi bên nào, vì sự lệch thường chỉ thấy ở một hướng.

Dựa trên tuyến: giao diện là hợp đồng

Giao diện XFRM cho đường hầm một cái tên và danh tính, và lưu lượng tới được nó vì bảng định tuyến nói vậy. Nhiều tiền tố từ xa khi đó trở thành vấn đề định tuyến chứ không phải vấn đề bộ chọn, và một giao thức định tuyến có thể quảng bá chúng. Đó mới là lợi ích thực sự, không phải mã hóa.

Giao diện không xóa bỏ nhu cầu về chính sách. Tiến trình cài các quy tắc theo giao diện gắn với danh tính giao diện, nên gói đến sai giao diện vẫn thất bại. Địa chỉ nguồn mà đối phương không chấp nhận cũng thất bại, kể cả với tuyến hoàn hảo. Dựa trên tuyến nghĩa là tuyến quyết định đầu vào, không phải chính sách đã biến mất.

sudo ip link add xfrm0 type xfrm dev eth0 if_id 42
sudo ip route add 10.20.0.0/16 dev xfrm0
ip -s link show xfrm0
ip route get 10.20.5.10

Theo dõi bộ đếm giao diện sau khi tuyến đã vào chỗ. Tuyến tồn tại mà bộ đếm vẫn bằng không nghĩa là không có gì được khớp vào đường hầm, điều này thường chỉ ra trạng thái thiếu chứ không phải tuyến thiếu.

Nơi hai thiết kế thực sự tách ra

Thêm một mạng là phép thử sạch nhất xem mô hình nào hợp với bạn. Thiết kế dựa trên tuyến thêm một tuyến và mở rộng bộ chọn nhiều nhất một lần, còn thiết kế dựa trên chính sách sửa các cặp tiền tố trên cả hai đối tác và thương lượng lại. Hai mạng con ổn định làm việc sửa đó thành tầm thường, và hai mươi thì biến nó thành dự án.

Không mô hình nào thay thế tường lửa, và các so sánh thường dừng trước điểm này. Bộ chọn rộng hay tuyến rộng quyết định cái gì được mã hóa, chứ không phải cái gì được phép.

Hành vi MTU cũng khác trong thực tế. Đóng gói làm giảm tải trọng dùng được, và giao diện dựa trên tuyến mang MTU riêng, nên kẹp MSS ở cả hai cổng tránh triệu chứng hố đen khi phản hồi nhỏ tới được còn phản hồi lớn biến mất. Đường hầm dựa trên chính sách gặp cùng bức tường từ phía bên kia, vì bộ chọn không nói gì về kích thước gói. Hãy đặt mức kẹp một cách có chủ đích thay vì đổ lỗi cho đối phương.

Di trú mà không mất đường quay về

Ghi lại các cặp tiền tố hiện có trước khi thay đổi bất cứ điều gì, sau đó chuyển một đường ứng dụng và theo dõi từ đầu đến cuối. Đường hầm dựng được không phải đường hầm chuyển tiếp được, và khác biệt xuất hiện ở hướng phản hồi.

Khi hai bên kết nối được mà máy chủ LAN không, hãy kiểm tra tuyến quay về và địa chỉ nguồn mà máy chủ từ xa sẽ dùng. Máy chủ có hai giao diện có thể trả lời từ giao diện sai, và không thay đổi bộ chọn nào sửa được điều đó. Bắt lưu lượng ở cả hai đầu trước khi sửa thuật toán.

ip route get 10.20.5.10
sudo tcpdump -ni any host 10.20.5.10 and icmp
sudo swanctl --list-conns

Giữ một đường quản trị không phụ thuộc vào đường hầm trong khi làm việc. Quay lui dễ hơn khi truy cập của chính cổng không đi trên kết nối bạn đang gỡ lỗi.

Bài viết liên quan