Что ж, я провел много (слишком много!) часов, исследуя и изучая различные решения, прежде чем опубликовать здесь, но разве вы не знаете, я нашел свой собственный ответ менее чем через час. Ответ Интики на другой вопрос, наконец, привел меня в правильное направление. Я уверен, что есть решения с сетевыми пространствами имен и т. д., но это был самый простой способ достичь желаемой цели.
iptables -t mangle -A ВЫВОД -m владелец --gid-owner "студенты" -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
ip правило добавить fwmark 42 таблица 42
ip route добавить по умолчанию через 192.168.20.2 dev enp1s0.20 таблица 42
netfilter-постоянное сохранение
IP-адрес vlan: 192.168.20.10; отфильтрованный шлюз — 192.168.20.2.
ПРИМЕЧАНИЕ 1: iptables-save не делает это постоянным при перезагрузке.; только netfilter-persistent сохранит изменения iptables.
ПРИМЕЧАНИЕ 2. Это не сохраняет конфигурацию IP-маршрута. Это необходимо настроить на перезагрузку каждый раз, когда интерфейс повторно активируется (отключение кабеля, перезагрузка и т. д.). Чтобы сделать эту конфигурацию постоянной, вам нужно настроить соответствующий файл в /etc/netplan. Поскольку мне не удалось разобрать синтаксис или найти соответствующие примеры, я добавил оригинальные iptables -j УДАЛИТЬ
правило и сохранил его (с netfilter-persistent), чтобы в случае автоматического сброса сети доступ всех учащихся был заблокирован. Затем я написал очень простой скрипт, удалив эту строку из таблицы фильтров и добавив IP-маршрут
линия снова.
#!/бин/баш
# Удалить постоянную блокировку группы «студенты» из таблицы фильтров: sudo iptables -D OUTPUT -p tcp -m multiport --dport 80,443 -m owner --gid-owner «students» -j DROP
# Добавьте политики маршрутизации, которые не сохраняются при перезапуске сети, без редактирования конфигурации сетевого плана:
sudo ip route add default через 192.168.20.2 dev enp1s0.20 таблица 42
echo "Фильтрованный доступ должен быть настроен для группы "студенты""
выход