Одновременная работа двух сетевых карт
Всем привет. Дебиан 9. Две сетевые карты
привязываю к ним интерфейсы eth0 и eth1
если в /etc/network/interfaces прописать сразу оба интерфейса, то активен и пингуется только eth0
если прописывать по отдельности, то работает и eth0 и eth1 соответственно.
auto eth0 iface eth0 inet static address 192.168.0.121 gateway 192.168.0.228 netmask 255.255.252.0
auto eth1 iface eth0 inet static address 192.168.0.122 netmask 255.255.252.0
Подозреваю, что дело в шлюзе, так? Вроде бы шлюз прописывается только для первого интерфейса, а для второго надо прописывать маршрут. Но никак не могу разобраться, как правильно. Подскажите, пожалуйста, что сделать, чтобы заработало )
Зачем две сетевые карты? Тем более в одной подсети IPv4? Если нужна избыточность, то нужна агрегация LACP, если нужно два айпишника, то можно привязать к одной сетевухе, алиасингом или еще чем-то.
Опечатка же во втором конфиге?
auto eth1 iface eth0 inet static address 192.168.0.122 netmask 255.255.252.0
Русские форумы такие форумы?
Только тут тебе расскажут, почему ты -мудак- не прав?
Раскажи чего ты хочешь этим добиться?
Чтобы понять почему идея гавно, надо чутка почитать как именно линукс роутит пакеты, в реальном мире, для каждого сконфигурированного интерфейса создаётся маршрут x.x.x.x/netmask означающий, что на адреса в этой подсети слать пакеты напрямую получателям, в твоём примере создастся: 192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.121
Это значит, что всё исходящее в 192.168.0.0/22 должно уходить с eth0, а всё приходящее на eth0 из 192.168.0.0/22 адресовано нам. Когда ты создаешь второй интерфейс с адресом в той же сети, ещё один маршрут для подсети 192.168.0.0/22 создасться не может, т.к. её уже обслуживает eth0. Все входящие пакеты на 192.168.0.122 будут приходить на eth1, а в соотвествии с таблицей маршрутизации за 192.168.0.0/22 ответственный eth0, такие пакеты по дефолту считаются не парвильными и называются «марсианскими» (martian), если проверишь dmesg то наверняка увидишь там такие записи. Кароче в реальном мире твоя схема кривая и работать не должно, но обойти эти ограничения можно, но это ппц костыли и я бы за такое ими тебя и ***покарал***, например ты можешь включить Promiscuous режим на eth1, тогда ядро будет пропускать марсианские пакеты и твоё поделие начнёт подавать признаки жизни, но исходящий трафик всё равно будет ходить через eth0 по умолчанию.
Re: Русские форумы такие форумы?
На украинских форумах такая же история, на англоязычных ресурсах также песня.
но исходящий трафик всё равно будет ходить через eth0 по умолчанию
А что мешает сделать «ip ro add 192.168.0.32/28 dev eth1 scope link src 192.168.0.122» ? Пусть к .32-.47 ходят через eth1 !
PS любимые грабли нужно знать по именам: rp_filter, arp_accept, arp_announce, arp_filter, arp_ignore
Чёта не понял про грабли))) Я бы в ситуации ТС создал ещё одну таблицу маршрутизации в /etc/iproute2/rt_tables и загнал туда eth1 правилом. Хотя всё равно решение плохое и так делать не надо
Я бы в ситуации ТС создал ещё одну таблицу маршрутизации
Он пока с одной не разобрался.
В такой ситуации ТС может просто реализовать только статическую схему, в которой часть хостов в сети будет адресоваться через eth0, а часть через eth1, просто добавив маршруты. Например, dgw через eth1, а все остальное через eth0, или половину сети через один интерфейс, а остальных через другой.
Но ему нужно пройти грабли которые специально разложены на пути для тех, кто начинает использовать несколько самостоятельных интерфейсов в одной подсети. Это не запрещено, но ты должен доказать системе, что ты понимаешь на что подписался. Это как раз и нужно выразить через sysctl net.ipv4.conf.
Re: Русские форумы такие форумы?
А белорусы с казахами чё ?
Re: Русские форумы такие форумы?
- мудаком его никто не называл
- неправым тоже
- но, о ужас! презренные хелперы-помогаторы дерзнули объяснять, как может (должно) сделать и стали требовать дополнительных пояснений (ну, тупые, ага)
- да — «Русские форумы такие форумы» ©
unixforum.org
Форум для пользователей UNIX-подобных систем
Два сетевых интерфейса в одной подсети (Как разнести?)
Модератор: SLEDopit
Два сетевых интерфейса в одной подсети
Сообщение be9 » 14.12.2008 13:35
Дано: комп с тремя сетевыми интерфейсами, работающий маршрутизатором и файлопомойкой (samba и ftp). Система — убунта 8.10.
Задача: разнести по разным интерфейсам файлопомойку и маршрутизатор.
Сейчас конструкция такая:
Интерфейс ethext смотрит наружу.
И ethint, и ethsrv воткнуты в один свитч.
Хочется, чтобы вся деятельность, связанная с файлопомойкой, проходила _только_ через интерфейс ethsrv и никак не затрагивала интерфейс
ethint.
Однако arp, делаемый с другой машины, показывает, что и 10.0.0.200, и 10.0.0.250 имеют MAC интерфейса ethint — 00:15:58:60:d9:fb. Соответственно, все входит и выходит через ethint (10.0.0.250), а адрес 10.0.0.200 работает просто как его алиас, хотя и будучи включенным в ту же подсеть.
Как сделать, чтобы интерфейс ethint не перехватывал ничего для 10.0.0.200?
Re: Два сетевых интерфейса в одной подсети
Сообщение ford1813 » 14.12.2008 14:18
Контакты для связи:
Re: Два сетевых интерфейса в одной подсети
Сообщение Poor Fred » 14.12.2008 15:52
Re: Два сетевых интерфейса в одной подсети
Сообщение be9 » 14.12.2008 16:31
2 wertik: файлопомоечные сервисы, естественно, биндятся на ethsrv.
2 Poor Fred: дефолтные конфиги я читать умею, а умеете ли вы внимательно читать посты?
Еще раз: есть две сетевые карты, воткнутые в одну подсеть с одинаковой нетмаской. Допустим, кто-то хочет зайти на 10.0.0.200 (адрес ethsrv). Посылается arp-запрос, который приходит на оба интерфейса: на ethint и ethsrv, причем на ethint первым (он на шине PCI первым стоит). И ethint отвечает, что адрес 10.0.0.200 — это его адрес! Видимо смотрит, что в системе есть адрес 10.0.0.200, лежащий в той же подсетке, и откликается. А пакет, зашедший на ethsrv, отбрасывается системой, ибо она его уже обработала.
В итоге потом все пакеты начинают валить через физический интерфейс ethint, попадая на ethsrv через межинтерфейсное взаимодействие внутри ядра.
При этом я могу вообще вынуть патчкорд из ethsrv — оно все равно будет работать. А мне надо, чтобы электроны бежали именно по тому патчкорду и чтобы лампочка моргала у ethsrv, а не ethint
Два сетевых интерфейса и два IP-адреса в одной подсети в Linux
Недавно я столкнулся с ситуацией, когда мне понадобилось два IP-адреса в одной подсети, назначенной одному хосту Linux, чтобы мы могли запускать два сайта SSL /TLS. Мой первый подход заключался в использовании IP-алиасинга, например. используя eth0: 0, eth0: 1 и т. д., но у наших администраторов сети есть довольно строгие настройки для обеспечения безопасности, которые подавили эту идею:
- Они используют отслеживание DHCP и обычно не разрешают статические IP-адреса. Статическая адресация выполняется с использованием статических записей DHCP, поэтому один и тот же MAC-адрес всегда получает одно и то же назначение IP-адреса. Эта функция может быть отключена для каждого коммутатора, если вы спросите, и у вас есть причина для этого (к счастью, у меня хорошие отношения с сетевыми парнями, и это не сложно).
- При отключении DHCP-отслеживания в коммутаторе им пришлось ввести правило коммутатора, в котором указанному MAC-адресу X разрешен IP-адрес Y. К сожалению, это имело побочный эффект, также заявляя, что MAC-адрес X является ТОЛЬКО разрешено иметь IP-адрес Y. Инициализация IP-адресов требовала, чтобы MAC-адрес X был назначен два IP-адреса, поэтому это не сработало.
Возможно, возникла проблема с этими проблемами в конфигурации коммутатора, но, пытаясь сохранить хорошие отношения с сетевыми администраторами, я попытался найти другой способ. Наличие двух сетевых интерфейсов казалось следующим логическим шагом. К счастью, эта система Linux является виртуальной машиной, поэтому я смог легко добавить второй сетевой интерфейс (без перезагрузки, я мог бы добавить — довольно круто). Через несколько нажатий клавиш у меня появилось два сетевых интерфейса, и оба они вытащили IP-адреса из DHCP.
Но тогда возникла проблема: сетевые администраторы могли видеть (на коммутаторе) запись ARP для обоих интерфейсов, но только первый сетевой интерфейс, который я поднял, будет отвечать на пинги или любой вид трафика TCP или UDP.
После долгих копаний и выкапывания, вот что я придумал. Кажется, что это работает, но, похоже, это тоже большая работа для того, что кажется простым. Какие-нибудь альтернативные идеи?
Шаг 1: Включить фильтрацию ARP для всех интерфейсов:
Из файла network /ip-sysctl.txt в документах ядра Linux:
Шаг 2. Внедрение маршрутизации на основе источника
В основном я просто следовал указаниям из http://lartc.org/howto/lartc.rpdb.multiple -links.html , хотя эта страница была написана с другой целью (имея дело с двумя интернет-провайдерами).
Предположим, что подсеть 10.0.0.0/24, шлюз 10.0.0.1, IP-адрес для eth0 — 10.0.0.100, а IP-адрес для eth1 — 10.0.0.101.
Определите две новые таблицы маршрутизации с именем eth0 и eth1 в /etc /iproute2 /rt_tables:
Определите маршруты для этих двух таблиц:
Определите правила использования новых таблиц маршрутизации:
В основной таблице маршрутизации уже позаботился DHCP (и даже не ясно, что в этом случае это строго необходимо), но в основном это соответствует:
И вуаля! Кажется, все работает отлично. Отправка писем на оба IP-адреса работает нормально. Отправка писем из этой системы в другие системы и принудительное использование пинга для использования конкретного интерфейса прекрасно работает ( ping -I eth0 10.0.0.1 , ping -I eth1 10.0.0.1 ). И самое главное, весь трафик TCP и UDP на /с любого из IP-адресов работает как ожидалось.
Итак, опять мой вопрос: есть ли лучший способ сделать это? Это похоже на большую работу для кажущейся простой проблемы.
Обновление: Решение выше оказалось неполным. Все работало нормально, если трафик остался в одной подсети, но связь с другими подсетями, использующими второй интерфейс, не будет работать должным образом. Вместо того, чтобы копать большее отверстие, я закончил разговор с администраторами сети и заставил их разрешить несколько IP-адресов для одного интерфейса и использовать IP-псевдонимы (например, eth0 и eth0: 0).