как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
guglez
Сообщения: 394
ОС: GNU/Linux

как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение guglez »

Имеется одна физическая сетевуха, и два интерфейса на ней. Один из которых алиас (eth0:1). Вопрос - как мне заставить определенные процессы гонять траффик не через основной дефолтный интерфейс eth0, а через алиас eth0:1?
Спасибо сказали:
Аватара пользователя
turun
Сообщения: 117
ОС: CENTOS5.4

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение turun »

может iptables. А какая программа??? может там можно прописать интерпфейс.
Спасибо сказали:
Аватара пользователя
guglez
Сообщения: 394
ОС: GNU/Linux

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение guglez »

Ну вообще wget. Но хотелось бы знать - есть ли общий способ. Нашелся вариант с прописованием роута до нужного адреса через алиас. но этот вариант подойдет если адресов на которые ходить не много будет.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение allez »

guglez, не могли бы вы описать вашу проблему чуть подробнее? Что за приложения, какой именно трафик, почему и для чего, наконец, на один интерфейс "повешено" два адреса?

Если, например, эти приложения работают с достаточно узким диапазоном IP-адресов, то можно ограничиться настройкой таблицы маршрутизации. И в отсутствие внятной постановки задачи таких "если, например" может быть немало, а гадать на кофейной гуще чего-то не хочется. ;)

P. S. О, пока писал, почти на все мои вопросы уже были даны ответы. :)

P. P. S. Почитайте man wget на предмет опции --bind-address, вдруг да поможет?
Спасибо сказали:
Аватара пользователя
guglez
Сообщения: 394
ОС: GNU/Linux

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение guglez »

Диапазон адресов подразумевается широкий. По этому вариант с роутами не всегда подойдет. Внятной постановки задачи не будет - меня именно общий случай интересует. Возможно есть какой-нибудь способ вроде trickle? Только мне надо не резать скорость, а направлять весь траффик через определенный интерфейс.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение allez »

allez писал(а):
06.11.2008 15:28
P. P. S. Почитайте man wget на предмет опции --bind-address, вдруг да поможет?
Спасибо сказали:
Аватара пользователя
guglez
Сообщения: 394
ОС: GNU/Linux

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение guglez »

Спасибо! с wget понятно. А как быть если утилита не умеет к интерфейсу себя привязывать?
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение allez »

В этом случае можно глянуть на AppArmor. Там среди великого множества возможностей есть фишка под названием CAP_NET_ADMIN. Вот что она позволяет (выделение полужирным - мое):
Разрешает настройку интерфейса
Разрешает администрирование брандмауэра IP, маскировку (трансляцию сетевых адресов) и ведение учетных записей
Разрешает установку параметра отладки на сокеты
Разрешает изменение таблиц маршрутизации
Разрешает назначать произвольный процесс (группу процессов) владельцем сокетов
Разрешает привязку к любому адресу для прозрачного прокси-замещения
Разрешает установку TOS (типа службы)
Разрешает установку смешанного режима
Разрешает очистку статистик драйвера
Разрешает многоадресную передачу
Разрешает чтение и запись регистров, зависимых от устройства
Разрешает активацию сокетов управления ATM
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение skor »

Ну достаточно многие утилиты (более-менее развивающиеся) умеют биндиться на нужный интерфейс.
Если все же не умеют, то 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

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение skor »

UPDATE3 :)
Вот еще...
http://www.palfrader.org/libsis/
Спасибо сказали:
Аватара пользователя
vlav
Сообщения: 242

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение vlav »

Можно ли сделать, чтобы скрипт на php обращался наружу через другой алиас интерфейса, чем через который был вызван?
Или хотя бы вообще чтобы можно было указать айпи через который ему работать?
любимая ОС- FC
Спасибо сказали:
Mr Y
Сообщения: 244
ОС: Windows XP, Ubuntu, openSUSE

Re: как заставить некоторые процессы гонять трафик через виртуальный интерфейс?

Сообщение Mr Y »

skor писал(а):
06.11.2008 18:20
Если все же не умеют, то iptables в руки и отлавливать нужный трафик по адресу назначения, порту, идентификтору пользователя и тд и рулить в нужную сторону (-j ROUTE --oif eth0:1 --gw x.x.x.x ... работает в mangle таблице).

А можно попобробнее про это? Что-то я не нашел действия ROUTE в своей версии iptables (1.4.1).
Например, у меня есть два шлюза в инет. Первый - на интерфейсе ppp0 - гейтвей по умолчанию, второй - на интерфейсе ppp1. Нужно пустить траффик на определенный инетвоский адрес и на опрделенный порт через второй шлюз. Как это сделать с помощью iptables? Или есть другие варианты?
Спасибо сказали: