Имеем:
1. комп с Debian'ом (10.0.0.252)
2. шлюз в и-нет (10.0.0.242) - быстрое но дорогое подключение
3. PPPoE соединение (ppp0) - анлим, но медленный, IP соединения и IP шлюза - динамические
Требуется:
Запустить только одну программу через 10.0.0.242, а всё остальное должно ходить через ppp0.
По портам и IP фильтровать не получится т.к. они разные, да и остальные проги могут их использовать...
Собственно HOWTO?
Разные маршруты по умолчанию для разных программ, как?
-
- Неотъемлемая часть форума
- Сообщения: 354
- Зарегистрирован: 22 сен 2004, 13:47
- Откуда: Minsk
- Контактная информация:
Re: Разные маршруты по умолчанию для разных программ, как?
Можно попробовать использовать cmd-owner модуля match, но, похоже, что поддержку cmd-owner убрали с 2.6.14.
Другой вариант - запускать программу скриптом, который после запуска создаст правило с --uid-owner.
В обоих случаях получится что-то вроде этого:
Другой вариант - запускать программу скриптом, который после запуска создаст правило с --uid-owner.
В обоих случаях получится что-то вроде этого:
Код: Выделить всё
iptables -t mangle -A OUTPUT -m owner --cmd-owner apache -j MARK --set-mark 1
ip ro add table 10 default via 10.0.0.242 dev ethX
ip ru add fwmark 1 table 10
-
- Заглянувший
- Сообщения: 12
- Зарегистрирован: 10 ноя 2007, 09:47
- Откуда: Orsha
- Контактная информация:
Re: Разные маршруты по умолчанию для разных программ, как?
man iptables мне вот что вдало:
1. создаю пользователя, ну например "lanuser"
2. в скрипт запуска в /etc/init.d добавляю:
3. в скрипт в /etc/network/if-up.d дописываю:
что я ещё упустил?
т.е. пошагово:owner
This module attempts to match various characteristics of the packet creator, for locally generated packets. This match is only valid in the OUTPUT and POSTROUTING chains.
Forwarded packets do not have any socket associated with them. Packets from kernel threads do have a socket, but usually no owner.
[!] --uid-owner username
[!] --uid-owner userid[-userid]
Matches if the packet socket’s file structure (if it has one) is owned by the given user. You may also specify a numerical UID, or an UID range.
[!] --gid-owner groupname
[!] --gid-owner groupid[-groupid]
Matches if the packet socket’s file structure is owned by the given group. You may also specify a numerical GID, or a GID range.
[!] --socket-exists
Matches if the packet is associated with a socket.
1. создаю пользователя, ну например "lanuser"
2. в скрипт запуска в /etc/init.d добавляю:
Код: Выделить всё
RUNASUSER=lanuser
start-stop-daemon --start --quiet --oknodo --user $RUNASUSER --pidfile $PIDFILE --startas $DAEMON --chuid $RUNASUSER --
Код: Выделить всё
iptables -t mangle -A OUTPUT -m owner --uid-owner lanuser -j MARK --set-mark 1
ip ro add table 10 default via 10.0.0.242 dev eth0
ip ru add fwmark 1 table 10
-
- Неотъемлемая часть форума
- Сообщения: 354
- Зарегистрирован: 22 сен 2004, 13:47
- Откуда: Minsk
- Контактная информация:
Re: Разные маршруты по умолчанию для разных программ, как?
Spine, пробуй, должно работать
-
- Заглянувший
- Сообщения: 12
- Зарегистрирован: 10 ноя 2007, 09:47
- Откуда: Orsha
- Контактная информация:
Re: Разные маршруты по умолчанию для разных программ, как?
что-то после добавления этих правил и запуска сервиса от левого пользователя забиндить нужные порты не получилось,
решил пойти от обратного - добавил себя любимого
Вроде работает как хотелось, единственный нюанс:
когда отваливается ррр0 пользователь начинает ходить через "default route" (10.0.0.242), а хочется чтоб он туда не совался...
пока добавил "левый" маршрут:
вроде всё встало на свои места, но терзают смутные сомнения что можно было сделать покрасивее...
решил пойти от обратного - добавил себя любимого
Код: Выделить всё
iptables -t mangle -A OUTPUT -m owner --uid-owner spine -j MARK --set-mark 1
ip ro add table 10 default dev ppp0
ip ru add fwmark 1 table 10
когда отваливается ррр0 пользователь начинает ходить через "default route" (10.0.0.242), а хочется чтоб он туда не совался...
пока добавил "левый" маршрут:
Код: Выделить всё
ip route add table 10 default via 10.7.19.254 dev eth0 metric 20