Chà, tôi đã dành nhiều giờ (quá nhiều!) để nghiên cứu và khám phá các giải pháp khác nhau trước khi đăng ở đây, nhưng bạn biết không, tôi đã tìm thấy câu trả lời của riêng mình chưa đầy một giờ sau đó. Câu trả lời của intika đến một câu hỏi khác cuối cùng đã đưa tôi vào đúng hướng. Tôi chắc chắn rằng có các giải pháp với không gian tên mạng, v.v., nhưng đây là cách đơn giản nhất để đạt được kết quả mong muốn của chúng tôi.
iptables -t mangle -A OUTPUT -m owner --gid-owner "students" -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o enp1s0.20 -m mark --mark 42 -j SNAT --to-source 192.168.20.10
quy tắc ip thêm fwmark 42 bảng 42
tuyến ip thêm mặc định qua bảng 192.168.20.2 dev enp1s0.20 42
netfilter-liên tục lưu
IP vlan là 192.168.20.10; cổng được lọc là 192.168.20.2.
LƯU Ý 1: iptables-save không khiến điều này xảy ra liên tục khi khởi động lại; chỉ netfilter-persistent mới lưu các thay đổi của iptables.
LƯU Ý 2: Thao tác này không lưu cấu hình tuyến ip. Điều này cần được đặt để tải lại bất cứ khi nào giao diện được kích hoạt lại (rút cáp, khởi động lại, v.v.). Để duy trì cấu hình này, bạn cần định cấu hình tệp thích hợp trong /etc/netplan. Vì tôi không thể phân tích cú pháp hoặc tìm các ví dụ có liên quan, nên tôi đã thêm vào các iptables ban đầu -j THẢ
và lưu quy tắc này (với netfilter-persistent) để trong trường hợp thiết lập lại mạng không giám sát, tất cả quyền truy cập của sinh viên sẽ bị chặn. Sau đó, tôi đã viết một kịch bản rất đơn giản để xóa dòng đó khỏi bảng Bộ lọc và thêm lộ trình ip
dòng một lần nữa.
#!/bin/bash
# Xóa khối vĩnh viễn trên Nhóm 'sinh viên' khỏi bảng Bộ lọc: sudo iptables -D OUTPUT -p tcp -m multiport --dport 80,443 -m owner --gid-owner "students" -j DROP
# Thêm các chính sách định tuyến không tồn tại khi khởi động lại mạng mà không chỉnh sửa cấu hình netplan:
Sudo ip route thêm mặc định qua 192.168.20.2 dev enp1s0.20 bảng 42
echo "Quyền truy cập đã lọc phải được định cấu hình cho Nhóm 'sinh viên'"
lối ra