Một gói rời khỏi máy tính xách tay, không bao giờ đến được cổng VPN, và không có bộ đếm tường lửa nào nhúc nhích. Bảng tuyến đã quyết định số phận của gói: một mục blackhole khớp với nó và nhân hệ điều hành đã bỏ nó trước khi bất kỳ giao diện nào nhìn thấy. Hành vi đó hữu ích khi một đích phải thất bại theo kiểu đóng, nhưng đây là hành động định tuyến có phạm vi hẹp. Coi nó là kill switch hoàn chỉnh chính là chỗ các thiết kế sai.

Hành động loại bỏ thực sự khớp với gì

Một lần tra cứu tuyến chọn một bảng, rồi tiền tố khớp dài nhất trong đó. Tuyến blackhole là một mục bình thường có hành động là loại bỏ, nên nó chỉ ảnh hưởng đến các gói sẽ chọn mục đó sau toàn bộ quyết định. Thay đổi bảng bằng một quy tắc chính sách, hoặc thêm tiền tố cụ thể hơn, và việc loại bỏ không còn áp dụng.

Vì vậy phạm vi của blackhole là chính xác và dễ nêu: nó bao phủ tiền tố, trong bảng, cho họ địa chỉ đó. Nó không bao phủ một đích mà bảng khác sẽ thắng, và không bao phủ IPv6 chỉ vì tiền tố IPv4 bị loại bỏ.

ip route get hiển thị quyết định trước khi bạn triển khai bất cứ thứ gì, bao gồm bảng và loại tuyến. Đọc kết quả đó nhanh hơn là suy ra từ một yêu cầu thất bại xem quy tắc hay tiền tố nào đã tác động.

Blackhole không giống unreachable hay prohibit

Linux cung cấp ba loại tuyến giống loại bỏ, và chúng khác nhau ở những gì người gửi quan sát. Blackhole bỏ gói mà không trả lời, nên máy khách thấy hết thời gian chờ. Tuyến unreachable trả về thông điệp ICMP unreachable, nên kết nối thất bại nhanh với lỗi máy chủ hoặc mạng. Tuyến prohibit trả về lỗi cấm quản trị, gần với việc từ chối chính sách có chủ đích hơn.

Chọn hành vi bạn muốn ứng dụng thấy. Loại bỏ im lặng phù hợp khi bạn không muốn tiết lộ chính sách, và lỗi tức thì tốt hơn khi người dùng cần hiểu vì sao một đích không khả dụng. Trộn các loại trong một mạng tạo ra phiếu hỗ trợ mô tả cùng một chính sách như ba sự cố khác nhau.

Đừng cho rằng mọi mục loại bỏ đều thay thế được khi bạn chẩn đoán một kết nối. Văn bản lỗi, thời điểm và bản bắt gói khác nhau, và loại tuyến trong bảng cho bạn biết đang xem loại nào. hướng dẫn ip-route liệt kê các loại và hành vi lỗi của chúng.

Nó so với kill switch thế nào

Kill switch là lọc gói: một quy tắc tường lửa loại bỏ lưu lượng ra ngoài sẽ rời khỏi tunnel. Tuyến blackhole là quyết định chuyển tiếp được đưa ra sớm hơn trong ngăn xếp. Cả hai đều có thể chặn lưu lượng, nhưng chúng thấy những thứ khác nhau và bỏ sót những trường hợp khác nhau.

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

Phạm vi là chỗ phép so sánh có ý nghĩa. Tường lửa có thể khớp chủ sở hữu, cổng hoặc giao diện và chặn một ứng dụng trong khi điểm cuối vẫn truy cập được; tuyến thì không. Ngược lại, tuyến có thể đưa cả một tiền tố vào loại bỏ mà không cần nạp bất kỳ bộ lọc gói nào, điều này hữu ích trên một hệ thống tối giản.

AllowedIPs của WireGuard là định tuyến bằng khóa mật mã, không phải tường lửa. Nó quyết định tiền tố đích nào được chấp nhận vào giao diện, và một hồ sơ chỉ liệt kê mạng con của tunnel sẽ để các đích khác cho tuyến mặc định thông thường. Đó là lý do các hồ sơ tunnel đầy đủ dùng 0.0.0.0/0 và cũng là lý do wg-quick cài cả quy tắc tường lửa khi có thể.

Giữ điểm cuối của tunnel ngoài phạm vi loại bỏ

Địa chỉ bên ngoài của điểm cuối phải vẫn truy cập được qua giao diện vật lý. Một loại bỏ cũng bắt địa chỉ đó sẽ ngăn bắt tay đi ra, và tunnel không bao giờ lên, trông giống sự cố VPN hơn là chính sách định tuyến. Kiểm tra tuyến đến điểm cuối trước và sau khi thay đổi.

Truy cập quản trị cũng thuộc cùng đợt xem xét. Nếu con đường duy nhất đến bộ định tuyến hoặc máy khách là tunnel, một loại bỏ quá rộng có thể khóa bạn ra khỏi máy sẽ cho phép bạn gỡ nó. Giữ một tuyến ngoài băng đã ghi lại, một bảng điều khiển hoặc một lần hoàn tác có hẹn giờ.

IPv6 cần mục riêng và đợt xem xét riêng. Một thiết kế loại bỏ IPv4 vào blackhole trong khi để IPv6 trên tuyến mặc định sẽ rò rỉ đúng lưu lượng mà chính sách định chặn, và lỗi đó vô hình trong một bài kiểm tra chỉ có IPv4.

Triển khai theo từng bước với bộ hẹn giờ và hoàn tác

Áp dụng tuyến với việc tự động gỡ bỏ ngắn để một sai sót không tồn tại qua lần khởi động lại. Các lệnh dưới đây dùng một dải tài liệu; hãy thay bằng tiền tố mà thiết kế của bạn thực sự loại bỏ:

sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8

Lệnh thứ hai phải báo cáo tuyến blackhole và bảng mà nó đến từ đó. Lệnh thứ ba lên lịch gỡ bỏ sau một phút, đủ thời gian để xác nhận chính sách và đủ ngắn để phục hồi sau sai sót trên một máy chủ từ xa. Sau khi hành vi được xác nhận, hãy làm mục này vĩnh viễn qua cùng hệ thống quản lý cấu hình sở hữu các tuyến khác.

Kết thúc thay đổi bằng cách ghi lại tiền tố, bảng, họ địa chỉ và phương pháp hoàn tác. Loại bỏ là một ngoại lệ có chủ đích trong thiết kế định tuyến, và kỹ sư tiếp theo cần biết nó định chặn lưu lượng nào trước khi quyết định xem nó còn phù hợp hay không.

Bài viết liên quan