Đường hầm là thứ dùng một lần; chính sách thì không nên như vậy. Trên một cổng Linux, quy tắc nftables khớp giao diện đường hầm theo tên có thể được nạp một lần và tiếp tục áp dụng mỗi khi giao diện đó xuất hiện. Giao diện vẫn có một vòng đời: nó được tạo ra, nó biến mất, và các tuyến đường cùng bản dịch xung quanh nó theo lịch trình riêng. Chính việc tách riêng những chủ sở hữu đó mới giữ được truy cập ổn định trong lúc kết nối lại.

Khớp theo tên sống lâu hơn giao diện

nftables cung cấp khớp chỉ mục giao diện dạng số và các khớp tên động iifname và oifname. Các quy tắc dùng những tên này vẫn nạp sạch ngay cả khi thiết bị đường hầm chưa được tạo, đúng điều mà một bộ quy tắc cần khi khởi động. Khớp sẽ dừng nếu giao diện được đổi tên và tiếp tục khi một giao diện mới nhận tên đó. Chỉ mục dạng số không có thuộc tính đó, vì vậy dạng tên là lựa chọn thông thường cho đường hầm.

Tên là khóa khớp, không phải bằng chứng về người ở đầu bên kia. Xác thực đối tác vẫn là việc của VPN.

Đọc chuỗi trước khi thêm quy tắc

Hãy xem bộ quy tắc hiện chứa gì và quy tắc mới sẽ nằm ở đâu, vì thứ tự quyết định kết quả.

nft list ruleset
nft -c -f /etc/nftables.conf

Danh sách hiển thị chuỗi, quy tắc và handle, và chế độ kiểm tra xác thực một tệp ứng viên mà không nạp nó. Một cho phép chỉ dành cho đường hầm đặt sau một chấp nhận trước đó cho cùng luồng sẽ không thay đổi gì, vì quy tắc khớp đầu tiên thắng. Vì thế một quy tắc muộn có thể trông đúng mà không có tác dụng. Đọc chuỗi theo thứ tự và xác nhận rằng việc chặn lưu lượng từ máy khách tới liên kết thượng nguồn vẫn đứng trước mọi thứ rộng hơn.

Tuyến đường, bản dịch và luồng có chủ sở hữu khác

Sự hiện diện của giao diện không tạo ra tuyến đường và không xác thực đối tác. Những thứ đó thuộc về trình quản lý VPN, còn bản dịch có vòng đời thứ ba.

conntrack -L -s 10.20.0.0/24 | head
ip route show dev vpn0

Danh sách conntrack hiển thị các luồng hiện có với giá trị gốc và giá trị đã dịch, còn danh sách tuyến đường hiển thị những gì trình quản lý đã cài cho giao diện. Các quy tắc NAT thiết lập trạng thái theo dõi kết nối ngay ở gói đầu tiên, nên một luồng đã thiết lập vẫn giữ bản dịch của nó kể cả sau khi quy tắc thay đổi. Vì thế một quy tắc đang được cập nhật và một luồng dùng đường mới là hai câu khác nhau. Hãy quyết định phiên nào phải kết nối lại và để yên các luồng không liên quan.

Chấp nhận khởi động nguội, mất mát và phục hồi

Kiểm tra cổng với đường hầm vắng mặt khi khởi động, sau đó có mặt, rồi sau khi ngắt và quay lại. Xác nhận rằng chuyển tiếp bị cấm vẫn bị từ chối khi thiếu đường hầm, rằng luồng mới được phép hoạt động sau khi đối tác được xác thực và rằng phục hồi không đòi hỏi xóa trạng thái không liên quan. Không xóa toàn bộ chuỗi POSTROUTING hay mọi mục conntrack như hành động dừng của một hồ sơ, vì các dịch vụ khác dùng chung chúng. Ghi lại thành phần nào đã thay đổi giao diện, tuyến đường và chính sách, thay vì chỉ ghi rằng một hook khởi động thoát với số không.

Một chính sách sống sót qua lần kết nối lại là chính sách có chủ sở hữu được nêu tên và các quy tắc đã được thử với đường hầm cả khi xuống lẫn khi lên. Một hook báo thành công chỉ chứng minh rằng hook đã chạy.

Bài viết liên quan