IPsec dựa trên tuyến giao cho bảng định tuyến một quyết định mà trước đây các bộ chọn chính sách đưa ra. Trên Linux, phần giúp điều này khả thi là giao diện XFRM: một thiết bị ảo mà lưu lượng của nó được đối chiếu với trạng thái IPsec bằng định danh giao diện thay vì bằng bộ chọn. Tạo một cái chỉ cần một lệnh và không chứng minh gì về việc đường hầm có tồn tại hay không. Thiết bị là một móc nối giữa định tuyến và chính sách bảo mật, và cả hai phía của móc nối đó phải được cấu hình trước khi bất cứ thứ gì được bảo vệ.

Thiết bị là gì và không là gì

Giao diện XFRM là một tay nắm định tuyến. Các gói được định tuyến vào nó được đối chiếu với các chính sách XFRM tham chiếu cùng định danh giao diện, và nếu có chính sách và trạng thái thì chúng được đóng gói. Không có những thứ đó, giao diện vẫn tồn tại, các bộ đếm đứng yên và lưu lượng đi đến một nơi vô ích.

Đó là phân tách chẩn đoán đầu tiên. Tuyến đi vào thiết bị là một thực tế định tuyến, trạng thái đã cài đặt là một thực tế bảo mật, và bộ đếm tăng trên thiết bị không phải cả hai. Khi người ta nói đường hầm đã lên vì giao diện hiển thị UP, họ đang mô tả các cờ liên kết của một thiết bị ảo không có đối tác riêng. Cờ đó chỉ có nghĩa là thiết bị đã được tạo và bật, không hơn.

Một ranh giới nữa: định danh giao diện không phải là tên. Hai thiết bị có tên giống nhau và định danh khác nhau không chia sẻ trạng thái, và một kết nối được cấu hình sai định danh sẽ cài đặt trạng thái mà không tuyến nào sẽ dùng.

Xây dựng một cái theo đúng thứ tự

Bắt đầu với thiết bị bên ngoài và một con số mà bạn cũng sẽ đặt trong cấu hình daemon. Ví dụ dùng eth0 làm giao diện bên ngoài và 42 làm định danh, những địa chỉ bạn nên thay bằng địa chỉ của mình.

Bật thiết bị lên, sau đó xác nhận định danh mà nhân đã ghi lại trước khi chạm vào cấu hình VPN:

sudo ip link add xfrm0 type xfrm dev eth0 if_id 42
sudo ip link set xfrm0 up
ip -d link show xfrm0 | grep -o 'if_id [0-9]*'

Bây giờ cấu hình kết nối trong strongSwan với cùng định danh, vì daemon phải cài đặt các chính sách và trạng thái tham chiếu đến nó. Đặt các bộ chọn lưu lượng cục bộ và từ xa vào dải bạn định định tuyến, rồi định tuyến dải đó vào thiết bị. Cấu hình daemon và bảng định tuyến phải đồng ý cả về định danh lẫn điểm đến, và không bên nào cung cấp bên kia.

Giữ IKE và ESP ra ngoài tuyến của đường hầm

Một tuyến mặc định trỏ vào thiết bị XFRM sẽ bắt cả các gói đã đóng gói lẫn lưu lượng mà chúng mang. Kết quả là một vòng lặp: cổng vào cố gửi ESP của chính nó qua đường hầm mà ESP phải xây dựng.

Cách khắc phục là một tuyến cụ thể hơn cho địa chỉ bên ngoài của đối tác qua giao diện vật lý, tuyến này thắng tuyến mặc định vì khớp nhiều bit hơn. Định tuyến dựa trên dấu làm công việc tương tự khi nhiều đường hầm chia sẻ một bảng, và strongSwan ghi lại cả hai cách cho các triển khai dựa trên tuyến.

Dù bạn chọn gì, hãy xác minh rằng gói bên ngoài đi ra mà không bị đóng gói. Một kiểm tra nhanh là ping địa chỉ bên ngoài của đối tác sau khi đường hầm lên; nếu việc đó thất bại trong khi giao diện vẫn lên, hãy nghi ngờ việc bắt gói chứ không phải khả năng kết nối. Lý do tương tự áp dụng cho cổng IKE, vì lưu lượng UDP của chính daemon không được định tuyến vào thiết bị mà nó đang cố thiết lập.

Kiểm tra bộ đếm ở hai nơi trước khi đổ lỗi cho mã hóa

Bộ đếm giao diện và bộ đếm trạng thái đo các giai đoạn khác nhau. Các gói được định tuyến vào thiết bị làm tăng thiết bị ngay cả khi không có trạng thái nào khớp, trong khi bộ đếm trạng thái chỉ nhích cho lưu lượng thực sự đã được đóng gói.

Đọc cả hai, rồi đọc quan điểm của daemon về hiệp hội con:

ip -s link show xfrm0
sudo ip xfrm state list | grep -E 'src|proto|mode'
sudo swanctl --list-sas

Bộ đếm thiết bị tăng trong khi đầu ra trạng thái trống nghĩa là định tuyến hoạt động và chính sách không khớp, thường là lỗi định danh hoặc bộ chọn. Bộ đếm trạng thái tăng trong khi phía từ xa không báo cáo gì nghĩa là các gói đi ra nhưng không đến hoặc không qua được xác thực, điều này chỉ vào đường đi hoặc cấu hình đối tác. Một hiệp hội con được liệt kê mà không có lưu lượng là vấn đề bộ chọn ở một đầu, không phải bộ mã hóa hỏng.

Quyết định ai cài đặt các tuyến

Hai chủ sở hữu cho một bảng định tuyến là nguồn gốc thường gặp của hiện tượng nhấp nháy. Nếu daemon tự động cài đặt tuyến, trình quản lý mạng của bạn cũng không được cài tuyến mặc định qua cùng thiết bị, và một tuyến thủ công do script khởi động thêm sẽ bị xóa ở lần daemon cấu hình lại tiếp theo.

Chọn một chủ sở hữu và ghi lại. Khi daemon sở hữu các tuyến, hãy giữ script khởi động ngoài bảng và để định nghĩa kết nối mô tả các bộ chọn lưu lượng. Khi trình quản lý mạng sở hữu chúng, hãy tắt cài đặt tự động và chấp nhận rằng daemon sẽ không sửa tuyến bị thiếu khi kết nối lại.

Các quy tắc chuyển tiếp và tường lửa là một quyết định riêng ở trên, vì một cổng vào cho lưu lượng của các máy khác đi qua cần cả hai. IPsec dựa trên tuyến giúp dễ diễn đạt lưu lượng đó bằng các công cụ định tuyến thông thường; nó không làm lớp chính sách thành tùy chọn.

Bài viết liên quan