Tomsk Sysadmins Forum

Unix => Администрирование => Topic started by: igor7777 on August 30, 2010, 23:23:26

Title: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on August 30, 2010, 23:23:26
Всем доброго времени суток.

Не сочтите за троллизм и не бейте ногами, задача такова: надо оттестить пару сервисов в "типакластерном" режиме.
Проблема - компутер только один, но на нем 2 сетевые карты. FreeBSD 8.1. Тестировать предполагается чередующимся отрыванием кабелей от сетевых карт. Надо повесить на каждую из сетевух адрес вида 192.168.0.x/24 и при этом чтобы каждая отвечала сама за себя, т.е. ответ шел с той сетевухи, на которую пришел запрос. Обе карты воткнуты в один свитч, естественно.

Можно ли такое сделать без особых танцев с бубном? Варианты "не клепать мозги и сделать по-нормальному" не предлагайте, в рабочем варианты будет все по-нормальному, а потестить хотелось бы на скорую руку с имеющимися средствами.

Заранее благодарен за ответы.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: Green on August 31, 2010, 01:11:01
эээ... уважаемый... как бы так по корректнее ответить то??? эммм... в общем, если я все правильно понял, то тебе надо сильно "по клепать мозги" чтобы сделать наоборот...
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: deepwalker on August 31, 2010, 01:19:25
Когда компутер один, ставят виртуалки. Кластера бывают сильно разными, это довольно общий такой термин, надо уточнить.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: Green on August 31, 2010, 01:23:49
dudes, по дефолту ответ всегда приходит на ту сетевуху (а если мы говорим о все же о классических сервисах, то читать "на тот ip address") с которой пришел запрос... как бы оно по умолчанию так...
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on August 31, 2010, 01:29:10
Вопрос простой - можно или нельзя? Я уже сказал, что это тестовый изврат, что на продакшене будут нормальные 2 машины. Можно ли на скорую руку сделать так, чтобы каждая сетевуха отвечала сама за себя, чтобы на каждый из IPёв можно было повесить по сервису, nginx, mysql & etc, чтобы это работало как 2 разные машины? Работоспособность нужна исключительно в пределах одного свитча.

Убедительно прошу абстрагироваться от философских вопросов зачем так извращаться и советов как сделать "правильно" и просто ответиться на вопрос - можно ли во фре8.1 сделать описанное мною? если нет, то так и отвечаем, на этом диалог иссякнет.

2Green: сегодня проверил. На машине em0 (192.168.0.1) и em1(192.168.0.2), обе тыкнуты в один свитч. В тот же свитч ткнута машина, с которой делались пинги (192.168.0.3). Оба айпи пингуются. При выдергивании кабеля из ем1, перестает пинговаться только 192.168.0.2, 192.168.0.1 - пингуется. При выдергивании кабеля из ем0 пинговаться перестают оба адреса. Очевидно, что принимают запросы оба интерфейса, а ответ уходит с одного дефолтного, в данном случае - ем0. Хочется узнать, можно настроить так, чтобы переставал пингаться только тот интерфейс, из которого выдернут кабель, а второй работал бы при этом?
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: never hood on August 31, 2010, 06:41:26
Перестаньте извращаться и идите по нормальному пути, как это происходит в кластерах. Если позволяет ваш свитч, объедините обе сетевухи в один канал (bonding, etherchannel. etc). Это обеспечит вам надежность канала и увеличение пропускной способности. Доступность сервисов в кластере обеспечивается инфраструктурой кластера, которая "играет" с mac-адресами узлов кластера для обеспечения поддержания подключений при миграции виртуальных машин с одного узла кластера на другой.
Сомневаюсь, что в BSD эти технологии отличаются от применяемых в Linux.
Т.е. RTFM, наконец! ;)
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: SirYorik on August 31, 2010, 09:16:30
Quote
При выдергивании кабеля из ем0 пинговаться перестают оба адреса. Очевидно, что принимают запросы оба интерфейса, а ответ уходит с одного дефолтного, в данном случае - ем0. Хочется узнать, можно настроить так, чтобы переставал пингаться только тот интерфейс, из которого выдернут кабель, а второй работал бы при этом?
сами себе и ответили

абстрагируюсь. задача конечно дурная, но решается скриптом-watchdog типа-демоном (крон не осилит), чекающим состояние линка раз 50-100 в секунду, чуть что - выдаёт команду смены дефолтного интерфейса. python|perl|C|и тп по вкусу.


зы: но bonding всё-же лучше
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: Diver on August 31, 2010, 09:26:37
как вариант, наверное, можно поднять две виртуалки и тестить на них
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on August 31, 2010, 09:55:00
сами себе и ответили

абстрагируюсь. задача конечно дурная, но решается скриптом-watchdog типа-демоном (крон не осилит), чекающим состояние линка раз 50-100 в секунду, чуть что - выдаёт команду смены дефолтного интерфейса. python|perl|C|и тп по вкусу.

Спасибо огромное. Хоть кто-то услышал что мне надо. Я знаю, что задача дурная, о чем честно предупредил сразу.

Quote
зы: но bonding всё-же лучше
Мне надо было выяснить можно ли сделать так, чтобы с точки зрения сети 1 машина выглядела как 2. Не объединить, а наоборот - разделить интерфейсы, чтобы они работали независимо, при этом находясь и логически, и физически в одной сети.

Предложенный метод немного не то, что хотелось бы, но если по-другому нельзя, то подойдет и этот, все одно задача временная.

Еще рас спасибо за подсказку.

Quote from: Diver
как вариант, наверное, можно поднять две виртуалки и тестить на них
Про это думал уже, но времени возиться особо нет.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on August 31, 2010, 10:09:24
абстрагируюсь. задача конечно дурная, но решается скриптом-watchdog типа-демоном (крон не осилит), чекающим состояние линка раз 50-100 в секунду, чуть что - выдаёт команду смены дефолтного интерфейса. python|perl|C|и тп по вкусу.

Кстати, как это делается? Не нагуглил сходу ответа, у ifconfig'а только defaultif похожа на нужное, но она для ICMPv6.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: SirYorik on August 31, 2010, 12:58:33
Quote
с точки зрения сети 1 машина выглядела как 2
bonding + два ip на bond-interface ?

зы: ниже правильно припомнили возможность ipfw (iptables в линукс) возвращать пакет на интерфейс откуда пришел запрос - эффект тотже будет


Quote
Кстати, как это делается?
iproute во фрибсд есть поди ?

было допустим  "default via 192.168.3.1 dev eth0"

  ip ro del default
  ip ro add default dev eth1 via 192.168.3.1

а как на С - взять исходник тогоже iproute


Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: zhenya on August 31, 2010, 13:01:54
В гугле встречал решения для отправки пакета через тот интерфейс откуда он пришел (решается на уровне ipfw). В моем случае были правда vpn + em0.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: SinClaus on August 31, 2010, 13:04:44
Один момент - если оба адреса будут в одной подсети, между ними никакого рутинга настроить не удастся.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: SirYorik on August 31, 2010, 13:07:44
так вроде и не нужен по постановке задачи
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: nuclight on August 31, 2010, 15:31:12
Не, ну сделать-то так конечно можно, хоть задача и извратная. Лет 5 назад я с таким экспериментировал. Вот только это не имеет никакого смысла - потому что тестироваться-то будут совсем другие условия, чем будет в "нормальном" решении. Ключи тоже можно искать под фонарем, да найти не свои...
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on August 31, 2010, 22:36:07
В гугле встречал решения для отправки пакета через тот интерфейс откуда он пришел (решается на уровне ipfw). В моем случае были правда vpn + em0.

хм, типа так? не могу сейчас проверить, будет ли такое работать
ipfw XX add fwd 192.168.0.2 ip from 192.168.0.2 to any via em1
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: nuclight on September 01, 2010, 16:00:43
Такая строка бессмысленна, зачем слать пакет хосту, с которого он пришел?.. Решение, среди прочего, описано на http://nuclight.livejournal.com/124348.html (правда, небольшой патч нужен).

Однако повторюсь - это не та задача, которую следует решать и проверять, потому что реальные условия будут совсем иные. Только вредная потеря времени, это как "ложное чувство безопасности".
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on September 01, 2010, 18:00:14
Однако повторюсь - это не та задача, которую следует решать и проверять, потому что реальные условия будут совсем иные. Только вредная потеря времени, это как "ложное чувство безопасности".

Спасибо, почитаю, попытаюсь осознать. И в свою очередь повторюсь, раз в третий уже наверное: мне надо оттестить работу двух нод. Для двух нод по-хорошему надо 2 машины. Но машина - только одна, зато с двумя сетевухами. Поэтому спросил можно сделать так, чтобы с точки зрения сети машина была не одна, а как бы две. Внутренний роутинг не нужен. Нужно поднять 2 одинаковых сервиса на разных айпи, чтобы каждый из них был доступен только при условии физического соединения соответствующей сетевухи со свитчом. Это очень узкая частная мелкая задачка, которая решается в преддверии полномасштабного проектирования. Не надо при виде слова "кластер" начинать мыслить штампами в виде бондинга, эзерлинка, транков и прочего. Задача ровно такая, как я ее описал, не надо ничего додумывать.

Собственно, вопрос был задан толко потому, что при гуглении видел, что такой вопрос задавался много где, но ответа не было дано, зато везде начинали советовать не клепать мозги и учить как надо делать. Тут, увы, получилось почти то же самое.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: Alloy on September 02, 2010, 08:44:16
аха, афтар таки воткул и настроил две сетевухи в одну сеть и посмотрел что будет происходить и сделал быстрые выводы. выводы не полные, потому как надо четко понимать как работает ARP, адресация на MAC-уровне и какие там таймауты. таймауты ключевое слово.
рекомендую подтянуть мат часть и сделать правильные выводы.

правильно здесь подсказавают про виртуальные машины, никто не мешает запустить две виртуальки на одном компе.
не обязательно запускать полные виртуалки, в данном случае наверно можно обойтись простым FreeBSD'шным jail'ом (я только не уверен допинали ли его в 8.1 до уровня разных ARP таблиц, надо пробовать)

ну и /usr/ports/sysutils/heartbeat вам в помощь.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on September 02, 2010, 10:37:40
Мда. Автор СРАЗУ воткнул две сетевухи в одну сеть. Автор НЕ настроил две сетевухи так, как хотел. Выводов, соответственно, никаких НЕ сделал. Автор способен сам решить, нужна ему такая схема или нет, соответственно, НЕ нуждается в советах так НЕ делать. Автору нужен был простой ответ на вопрос, можно ли сделать описываемое или нельзя. Если можно, то как? Если нельзя, то почему?

ЗЫ: Хёртбит на этой машине мне не нужен, он будет стоять в другом месте.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: SinClaus on September 02, 2010, 10:49:59
Внутренний или внешний, но если "... повесить на каждую из сетевух адрес вида 192.168.0.x/24" то нужно ещё заставить машину забыть, что оба адреса принадлежат ей. Иначе все пакеты спокойно пойдут через lo. А таблица маршрутизации на части не делится...
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: Alloy on September 02, 2010, 11:26:03
2Green: сегодня проверил. На машине em0 (192.168.0.1) и em1(192.168.0.2), обе тыкнуты в один свитч. В тот же свитч ткнута машина, с которой делались пинги (192.168.0.3). Оба айпи пингуются. При выдергивании кабеля из ем1, перестает пинговаться только 192.168.0.2, 192.168.0.1 - пингуется. При выдергивании кабеля из ем0 пинговаться перестают оба адреса. Очевидно, что принимают запросы оба интерфейса, а ответ уходит с одного дефолтного, в данном случае - ем0.

вот тут вы сделали выводы,
потом вы отрицаете, что сделали выводы.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: igor7777 on September 02, 2010, 12:59:30
2SinKlaus: кажется начинает доходить. Выходит, я пытаюсь сделать так, чтобы машина извне была как 2, но при этом сама себя она тоже должна иметь какой-то определенный интерфейс, чтобы видеть сеть. Фактически, надо сделать так,чтобы машина растроилась, 2 для внешних пользователей + одна сама для себя. Мда, это уже шизофрения выходит)

Кстати, в 7.1 добавили опцию ROUTETABLE=X. Несколько таблиц роутинга. Не то ли это самое деление таблицы маршрутизации?
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: nuclight on September 02, 2010, 15:44:43
Вот видите, Вы уже сами начинаете понимать, чем эта задача отличается от настоящих двух нод. Да, её нужно либо "утроить" (хост + 2 ноды-вируталки), либо на хост-машине поднимается виртуалка со своим адресом, подключенная к выходу сетевухи хоста через виртуальный свитч (делается бридж). Тогда двумя нодами будут хост и виртуалка. Правда, здесь будет больше геморроя, чем в варианте с 2 виртуалками, играться с CARP и т.п.

А несколько таблиц роутинга в 7-ке для Вашей задачи не очень подходят, потому что полного разделения сетевого стека при этом нет. Для несколько другого создавались, всё же.
Title: Re: 2 сетевухи в одну подсеть, FreeBSD
Post by: Konstantine on September 21, 2010, 17:17:10
Всем доброго времени суток.

Не сочтите за троллизм и не бейте ногами, задача такова: надо оттестить пару сервисов в "типакластерном" режиме.
Проблема - компутер только один, но на нем 2 сетевые карты. FreeBSD 8.1. Тестировать предполагается чередующимся отрыванием кабелей от сетевых карт. Надо повесить на каждую из сетевух адрес вида 192.168.0.x/24 и при этом чтобы каждая отвечала сама за себя, т.е. ответ шел с той сетевухи, на которую пришел запрос. Обе карты воткнуты в один свитч, естественно.

Можно ли такое сделать без особых танцев с бубном? Варианты "не клепать мозги и сделать по-нормальному" не предлагайте, в рабочем варианты будет все по-нормальному, а потестить хотелось бы на скорую руку с имеющимися средствами.

Заранее благодарен за ответы.

Реально ставь две сетевухи и в rc.conf присваивай им IP обе будут работать только не факт что ответы будут отсылаться с тожу сетевухи на которую пришёл запрос, ну на карйня фаервол PF и там благодаря reply-to всё у тебя будет раюботать.
Ну а так если чесно можно хоть 10 ip из одной и тойже подсети навешать на 1у сетеуху может тебе это пригодится:
ifconfig_em0="inet 192.168.0.1  netmask 255.255.0.0"
ifconfig_em0_alias0="inet 192.168.1.252 netmask 255.255.0.0"
ifconfig_em0_alias1="inet 192.168.10.1 netmask 255.255.0.0"
и т. д.