как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Модераторы: SLEDopit, Модераторы разделов
-
guglez
- Сообщения: 394
- ОС: GNU/Linux
как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Имеется одна физическая сетевуха, и два интерфейса на ней. Один из которых алиас (eth0:1). Вопрос - как мне заставить определенные процессы гонять траффик не через основной дефолтный интерфейс eth0, а через алиас eth0:1?
-
turun
- Сообщения: 117
- ОС: CENTOS5.4
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
может iptables. А какая программа??? может там можно прописать интерпфейс.
-
guglez
- Сообщения: 394
- ОС: GNU/Linux
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Ну вообще wget. Но хотелось бы знать - есть ли общий способ. Нашелся вариант с прописованием роута до нужного адреса через алиас. но этот вариант подойдет если адресов на которые ходить не много будет.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
guglez, не могли бы вы описать вашу проблему чуть подробнее? Что за приложения, какой именно трафик, почему и для чего, наконец, на один интерфейс "повешено" два адреса?
Если, например, эти приложения работают с достаточно узким диапазоном IP-адресов, то можно ограничиться настройкой таблицы маршрутизации. И в отсутствие внятной постановки задачи таких "если, например" может быть немало, а гадать на кофейной гуще чего-то не хочется. ;)
P. S. О, пока писал, почти на все мои вопросы уже были даны ответы. :)
P. P. S. Почитайте man wget на предмет опции --bind-address, вдруг да поможет?
Если, например, эти приложения работают с достаточно узким диапазоном IP-адресов, то можно ограничиться настройкой таблицы маршрутизации. И в отсутствие внятной постановки задачи таких "если, например" может быть немало, а гадать на кофейной гуще чего-то не хочется. ;)
P. S. О, пока писал, почти на все мои вопросы уже были даны ответы. :)
P. P. S. Почитайте man wget на предмет опции --bind-address, вдруг да поможет?
-
guglez
- Сообщения: 394
- ОС: GNU/Linux
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Диапазон адресов подразумевается широкий. По этому вариант с роутами не всегда подойдет. Внятной постановки задачи не будет - меня именно общий случай интересует. Возможно есть какой-нибудь способ вроде trickle? Только мне надо не резать скорость, а направлять весь траффик через определенный интерфейс.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
-
guglez
- Сообщения: 394
- ОС: GNU/Linux
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Спасибо! с wget понятно. А как быть если утилита не умеет к интерфейсу себя привязывать?
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
В этом случае можно глянуть на AppArmor. Там среди великого множества возможностей есть фишка под названием CAP_NET_ADMIN. Вот что она позволяет (выделение полужирным - мое):
Разрешает настройку интерфейса
Разрешает администрирование брандмауэра IP, маскировку (трансляцию сетевых адресов) и ведение учетных записей
Разрешает установку параметра отладки на сокеты
Разрешает изменение таблиц маршрутизации
Разрешает назначать произвольный процесс (группу процессов) владельцем сокетов
Разрешает привязку к любому адресу для прозрачного прокси-замещения
Разрешает установку TOS (типа службы)
Разрешает установку смешанного режима
Разрешает очистку статистик драйвера
Разрешает многоадресную передачу
Разрешает чтение и запись регистров, зависимых от устройства
Разрешает активацию сокетов управления ATM
-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Ну достаточно многие утилиты (более-менее развивающиеся) умеют биндиться на нужный интерфейс.
Если все же не умеют, то iptables в руки и отлавливать нужный трафик по адресу назначения, порту, идентификтору пользователя и тд и рулить в нужную сторону (-j ROUTE --oif eth0:1 --gw x.x.x.x ... работает в mangle таблице).
UPDATE.
AppArmor - это перебор... Из пушки по воробьям...
UPDATE2
В FreeBSD нашел socketbind
Если все же не умеют, то iptables в руки и отлавливать нужный трафик по адресу назначения, порту, идентификтору пользователя и тд и рулить в нужную сторону (-j ROUTE --oif eth0:1 --gw x.x.x.x ... работает в mangle таблице).
UPDATE.
AppArmor - это перебор... Из пушки по воробьям...
UPDATE2
В FreeBSD нашел socketbind
Код: Выделить всё
This library allows you to bind any application which is dynamically linked
with libc. It provides convient way to bind socket's source IP to one of the
multiple IP's available on computer.
To use it first of all point LD_PRELOAD to installed library and set BINDTO
variable to desired IP address to bind.
Here is the wrapper to run any command binded to some IP address:
env LD_PRELOAD=/usr/local/lib/libsocketbind.so.1 BINDTO=$MY_IP_ADDRESS $*
Author can be reached at "nm at web dot am" address.-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
-
vlav
- Сообщения: 242
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
Можно ли сделать, чтобы скрипт на php обращался наружу через другой алиас интерфейса, чем через который был вызван?
Или хотя бы вообще чтобы можно было указать айпи через который ему работать?
Или хотя бы вообще чтобы можно было указать айпи через который ему работать?
любимая ОС- FC
-
Mr Y
- Сообщения: 244
- ОС: Windows XP, Ubuntu, openSUSE
Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?
А можно попобробнее про это? Что-то я не нашел действия ROUTE в своей версии iptables (1.4.1).
Например, у меня есть два шлюза в инет. Первый - на интерфейсе ppp0 - гейтвей по умолчанию, второй - на интерфейсе ppp1. Нужно пустить траффик на определенный инетвоский адрес и на опрделенный порт через второй шлюз. Как это сделать с помощью iptables? Или есть другие варианты?