Android sử dụng rất nhiều quy tắc và bảng định tuyến, có thể là một bảng cho mỗi ứng dụng.
Như có thể thấy, nếu không thêm quy tắc như vậy và có thể là fwmark tương ứng của nó, một gói sẽ gặp quy tắc định tuyến 32000: không thể truy cập.
Sẽ hơi yếu khi thực hiện một số thao tác thủ công trên cơ chế này. Cụ thể, quy tắc định tuyến 10500 cho phép (chỉ) root sử dụng giao diện gửi đi ccmni1
, nhưng oif
không phải là cho phép một gói được chọn vào giao diện này, mà là cho phép một gói từ một ổ cắm ràng buộc với giao diện này (dùng SO_BINDTODEVICE
) được chọn (oif
không phải là một tương đương trực tiếp của nếu
được sử dụng cho các gói được định tuyến và tôi nếu lo
cũng là trường hợp đặc biệt đối với các gói không được định tuyến).
Nhiều quy tắc nhận được dấu tường lửa có thể được đặt bởi phức tạp tương đương iptables quy tắc để chọn quy tắc định tuyến cụ thể cho mỗi ứng dụng (và cả UID cụ thể của nó). Tôi đoán có các API Android cụ thể để đăng ký các quy tắc như vậy khi ứng dụng được cài đặt.
Nếu bạn muốn cho phép root sử dụng bảng định tuyến chính trước, do đó tránh không thể truy cập số phận, trong số nhiều lựa chọn có thể:
quy tắc ip add pref 998 tra cứu uidrange 0-0 chính
Hoặc nếu bạn không quan tâm rằng bất kỳ người dùng nào thì bất kỳ ứng dụng nào cũng có thể sử dụng usb0 đơn giản:
quy tắc ip thêm tra cứu trước 998 chính
Điều này có thể sẽ không tích hợp tốt với hệ thống Android, điều này có thể xáo trộn các quy tắc xung quanh khi các ứng dụng được cài đặt hoặc khởi động và người ta không thể biết những gì còn lại với iptables/nftables (hoặc thậm chí dọc theo SELinux, tc v.v.) về việc chặn truy cập.Ngay cả việc liên kết với ổ cắm cũng có thể bị hạn chế bởi cơ chế bổ sung (xem ví dụ: CONFIG_ANDROID_PARANOID_NETWORK
).