[Sysadmins] iptables, -j MARK и iproute2
Olvin
=?iso-8859-1?q?olvin_=CE=C1_rambler=2Eru?=
Вс Июл 30 20:57:57 MSD 2006
ALM2.4
Выход в инет был через обычный модем по dialup. Теперь появляется ADSL,
но хочется, чтобы тот, кто платит, ходил через ADSL, а кто не платит,
так и остался на dialup. Пользователей различаю по UID. ADSL-соединение
_постоянно_ (прерывать недопустимо), а модемное - эпизодическое.
Как сделать?
Я пробовал
iptables -t mangle -A OUTPUT \
-m owner --uid-owner 500 \
-j MARK --set-mark 1
ip route add all via 5.6.7.9 dev eth1 table 100
ip rule add fwmark 1 table 100
ip route flush cache
но всё равно пакеты от пользователя с uid=500 идут через ppp0. Поскольку
замена fwmark 1 на fwmark 0 всё-таки даёт перенаправление на eth1, то
заключаю, что дело в первой команде - она не помечает пакет, как её просят.
В документе
file:/usr/share/doc/alt-docs/master/ch06s05.html#distrib.setup.network.firewall
Есть схема, из которой видно, что решение о маршрутизации принимается
ещё до того, как отработает моё правило. Т.е. первая команда бесполезна.
Что делать? Надо различать именно по UID локального пользователя.
Подробная информация о списке рассылки Sysadmins