URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7721
[ Назад ]

Исходное сообщение
"Пакеты для двух сетевых интерфейсов идут через один."

Отправлено Paladin84 , 24-Ноя-08 14:10 
Здравствуйте.
У меня возникла следующая проблема:
В компьютере две сетевые карточки. Нужно чтобы пакеты посылались через обе. Однако после вызова bind() к конкретному IP адресу, пакеты все равно посылаются через одну карточку. Проверяю tcpdump ом. Все пакеты корректно сформированы - у них различные адреса источников, но посылаются через один и тот же (eth0) сетевой интерфейс. Обе карточки находятся в одной подсети.

Система: Ubuntu 8.04
Настроки маршрутизации не трогал.

Не подскажете, как это исправить? Или хотя бы куда копать?


Содержание

Сообщения в этом обсуждении
"Пакеты для двух сетевых интерфейсов идут через один."
Отправлено vic , 24-Ноя-08 14:18 
tcp or udp? :)

(следующий ответ будет - коды в студию)


"Пакеты для двух сетевых интерфейсов идут через один."
Отправлено Paladin84 , 24-Ноя-08 15:02 
Tcp.
По поволу кодов - все проще. Минимальный тест - запустить wget с параметром "--bind-address" на нужный ip адрес, качать большой файл. Пакеты ходят все равно только по одной сетевухе. Под виндой (виндовый wget + какойто то там cниффер) данный тест показывает нормальный результат (разные сетевухи в зависимости от bind а). Честно говоря думал что и под linux так же.

"Пакеты для двух сетевых интерфейсов идут через один."
Отправлено SunRock , 24-Ноя-08 21:50 
> Под виндой (виндовый wget + какойто то там cниффер)
> данный тест показывает нормальный результат (разные
> сетевухи >в зависимости от bind а).

Брехун несчастный :) А вы повелись ... Там точно так же нужно явно bonding делать ,)


"Пакеты для двух сетевых интерфейсов идут через один."
Отправлено Paladin84 , 25-Ноя-08 07:12 
>Брехун несчастный :) А вы повелись ... Там точно так же нужно
>явно bonding делать ,)

Мне нужен не bonding. Мне нужна функциональность - к какому айпишнику сетевого интерфейса сделал bind, через такой интерфейс пакеты и посылаются. Всегда думал что так оно и работает. А оказалось нет. Неужели никто не знает в чем может быть дело?


"для двух сетевых интерфейсов идут через один"
Отправлено Andrey Mitrofanov , 24-Ноя-08 14:35 
>Обе карточки находятся в одной подсети.
>Система: Ubuntu 8.04
>Настроки маршрутизации не трогал.
>Не подскажете, как это исправить? Или хотя бы куда копать?

Либо google.ru + linux interface bonding, либо http:/openforum/vsluhforumID10/3679.html#3 ... Наверное??...

Или две виртуальные машины "привязывать" к отдельным физ.карточкам?...


"для двух сетевых интерфейсов идут через один"
Отправлено Paladin84 , 24-Ноя-08 15:10 
>Либо google.ru + linux interface bonding, либо http:/openforum/vsluhforumID10/3679.html#3 ...  

bonding это не то. Хотя функциональность на выходе должна получится схожая.
Я знаю что мои пакеты можно перенаправить куда надо(на нужную сетевую карточку). С помощью новых правил маршрутизации. Но очень странно, что оно просто не работает, без всяких ухищрений.

>Или две виртуальные машины "привязывать" к отдельным физ.карточкам?...

Нет все реальное.


"для двух сетевых интерфейсов идут через два"
Отправлено Andrey Mitrofanov , 25-Ноя-08 08:58 
>>либо http:/openforum/vsluhforumID10/3679.html#3

"для двух сетевых интерфейсов идут через два"
Отправлено Paladin84 , 25-Ноя-08 10:05 
>>>либо http:/openforum/vsluhforumID10/3679.html#3

Нет. Это я почитал еще вчера - там куча описаний по настройки маршрутов для двух провайдеров. У меня проблема другая. Я уже говорил что с помощью добавления маршрутов проблема может быть успешно разрешена. Тем не менее это ненормальное поведение (как я думаю).
Я не нашел по ссылкам ничего для моего случая. Если я ошибаюсь - и там решение действительно есть - дайте пожалуйста более конкретную ссылку.

Еще раз - есть две сетевые карточки - выходят в одну локальную сеть. Когда bind к айпишнику второй из карточек - то пакеты все равно уходят через первую, хотя адрес источника как у второй.


"для двух сетевых интерфейсов идут через два"
Отправлено angra , 25-Ноя-08 10:25 
А какую роль играет адресс источника, если маршрут выбирается по назначению. Система ведет себя вполне адекватно, выбирает первый попавшийся маршрут, который позволяет доставить пакет, вот если бы выбирала второй, тогда было бы странно. Если хочется что-то поменять, то добавьте соответствующее правило маршрутизации.

"для двух сетевых интерфейсов идут через два"
Отправлено Paladin84 , 25-Ноя-08 14:07 
>А какую роль играет адресс источника, если маршрут выбирается по назначению. Система
>ведет себя вполне адекватно, выбирает первый попавшийся маршрут, который позволяет доставить
>пакет, вот если бы выбирала второй, тогда было бы странно. Если
>хочется что-то поменять, то добавьте соответствующее правило маршрутизации.

То есть это нормальное поведение системы? А для чего тогда существует bind? Для чего существует возможность bind ится к какому либо ip адресу (реально существующему), если потом пакеты идут все равно только по одному интерфейсу? Для чего реализовали эту возможность (--bind-address) в wget? На что это может влиять?


"для двух сетевых интерфейсов идут через два"
Отправлено devcoder , 25-Ноя-08 14:19 
>То есть это нормальное поведение системы? А для чего тогда существует bind?
>Для чего существует возможность bind ится к какому либо ip адресу
>(реально существующему), если потом пакеты идут все равно только по одному
>интерфейсу? Для чего реализовали эту возможность (--bind-address) в wget?

bind() придуман для привязки локального сокета к ip-адресу
и ни разу не обещает тебе через какую трубу выйдет пакет.
У тебя адрес в источнике исходящих пакетов как указан в случае с bind()?
Правильно, так как ты и задал в bind(). Не требуй больше от него (bind-a).
Если бы сетевухи были в разных подсетках, то было бы так, как ты хочешь.
Но нет, у тебя несколько нетипичная задача и поэтому гуляй
в сторону LARTC (Linux Advanced Routing & Traffic Control HOWTO).


"для двух сетевых интерфейсов идут через два"
Отправлено vic , 25-Ноя-08 14:28 
>>А какую роль играет адресс источника, если маршрут выбирается по назначению. Система
>>ведет себя вполне адекватно, выбирает первый попавшийся маршрут, который позволяет доставить
>>пакет, вот если бы выбирала второй, тогда было бы странно. Если
>>хочется что-то поменять, то добавьте соответствующее правило маршрутизации.
>
>То есть это нормальное поведение системы? А для чего тогда существует bind?
>Для чего существует возможность bind ится к какому либо ip адресу
>(реально существующему), если потом пакеты идут все равно только по одному
>интерфейсу? Для чего реализовали эту возможность (--bind-address) в wget? На что
>это может влиять?

Не так. Пакеты идут согласно правилам маршрутизации. Параметр --bind-address дает возможность указать обратный адрес в пакете и все. Это не значит что исходящий пакет пойдет через другую сетевую карту. Этой командой указывается на какой адрес удаленная сторона должна слать ответ. Т.е. wget сделает стандартный bind на указанный IP (просто в поле источник в пакете вписывается IP). Но ниже по стеку уже включаются правила маршрутизации которые управляют пакетами на данном хосте. По правилам у вас в локалку два маршрута, но при равных дефолтных условиях будет выбираться всегда первый маршрут.

В общем это абсолютно нормально. Но рыть доку в поисках точного объяснения лень.