Меню

Linux настройка двух сетевых карт



Одновременная работа двух сетевых карт

Всем привет. Дебиан 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: Русские форумы такие форумы?

  1. мудаком его никто не называл
  2. неправым тоже
  3. но, о ужас! презренные хелперы-помогаторы дерзнули объяснять, как может (должно) сделать и стали требовать дополнительных пояснений (ну, тупые, ага)
  4. да — «Русские форумы такие форумы» ©
Читайте также:  Настройка pro for steam

Источник

Объединение двух и более сетевых карт в bridge

Когда-то впервые увидев, что в одной конторе вместо аппаратных сетевых устройств использовалось все на програмном исполнении, а именно обычный комп, сервера, а уже на него взгромоздили Ubuntu систему которая выступает, как шлюз, почтовый сервер, сервер телефонии и таких систем великое множество, а для объединения их друг с другом использовалось объединение двух и более сетевых карт (канальный уровень) в bridge, при этом пакеты передаются на основе Ethernet-адресов, а не IP (как в маршрутизации), что в последствии давало управление безопасностью на более низком уровне чем ранее. Также к этому применялось использование канального протокола связующего дерева (STP – Spanning Tree Protocol) посредством которого устранялось образованием петель в сети. Задачу STP выполнял полностью – автоматическое блокирование соединений, которые в текущий момент являются излишними. Если каким-либо образом в сети появится “петля” — то сеть оказывается парализованной повторяющимися пакетами, хотя и может работать на отдельных участках, но вот полезная нагрузка очень мала, и выглядит это как полный отказ, к примеру был у меня случай, некоторые отделы подключенные к аппаратный switchaм не видели другие отделы.

Вывод: использование протокола STP – это использование для нахождения кратчайшего пути между двумя ethernet-сетями и для удаления колец из топологий сетей ethernet

Данная заметка покажет, как использовать bridge в системе Ubuntu 12.04.5 Server:

$ sudo apt-get update && sudo apt-get upgrade -y

Выводим какие сетевые карты сейчас определены системой и их MAC-адреса:

$ ifconfig -a | grep -r ‘eth[0-1]’

eth0 Link encap:Ethernet HWaddr 08:00:27:7a:16:e5

eth1 Link encap:Ethernet HWaddr 08:00:27:ce:63:2c

Далее устанавливаем в систему пакет ответственный за использование bridge:

$ sudo apt-get install bridge-utils -y

После создаем bridge воспользовавшись командой brctl с аргументом addbr:

$ sudo brctl addbr br0

С целью предотвращения появления в сети “петель” включаю протокол связующего дерева STP:

$ sudo brctl stp br0 on

Чтобы определить мост для текущий сетевых интерфейсов в системе их нужно освободить от выданных адресов и выключить на время добавления в мост (данные действия нужно проводить подключившись к системе локально либо с использование средств удаленного администрирования (iLo,ipmi,KVM), либо в системе имеется еще одна сетевая карта)

$ sudo ifconfig eth0 0.0.0.0 down

$ sudo ifconfig eth1 0.0.0.0 down

Теперь создаем мост для выключенных сетевых интерейсов , после чего он заработает полностью через совсем малый промежуток времени, в течение которого будет происходит изучение трафика проходящего через него)

$ sudo brctl addif br0 eth0

$ sudo brctl addif br0 eth1

Вот теперь уже можно включить сетевые интерфейсы (eth0 & eth1) и конечно же наш мост (br0)

$ sudo ifconfig eth0 up

$ sudo ifconfig eth1 up

$ sudo ifconfig br0 up

В моем случаем после включения моста ему не присвоился сетевой адрес от DHCP сервера автоматически, потребовалось вручную запросить:

$ sudo dhclient br0

br0 Link encap:Ethernet HWaddr 08:00:27:7a:16:e5

inet addr:10.7.8.154 Bcast:10.7.8.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1266 errors:0 dropped:6 overruns:0 frame:0

TX packets:31 errors:0 dropped:0 overruns:0 carrier:0

RX bytes:89888 (89.8 KB) TX bytes:4910 (4.9 KB)

Дальнейшие действия настройки к примеру статики и динамики также сводятся к правке конфигурационного файла : ekzorchik@srv-mon:

$ sudo nano /etc/network/interfaces

#для ручного указания IP адреса

iface eth0 inet static

iface eth1 inet static

iface br0 inet static

bridge_ports eth0 eth1

#для автоматического получения IP адреса от DHCP сервера

iface eth0 inet dhcp

iface eth1 inet dhcp

iface br0 inet dhcp

bridge_ports eth0 eth1

После изменения настроек перезапускаем сетевую часть:

$ sudo /etc/init.d/networking restart

если в процессе Вы видите сообщение:

Waiting for br0 to get ready (MAXWAIT is 32 seconds)

Читайте также:  Настройка принтера штрих кодов zebra

то это значит что очень долго поднимается мост, чтобы этого избежать можно в файл /etc/network/interfaces добавить следующую строку:

$ sudo nano /etc/network/interfaces

iface br0 inet static

bridge_ports eth0 eth1

Следом после сохранения снова перезапустить сетевую подсистему и проблема будет решена.

Получить информацию о bridge можно так:

$ sudo brctl show

bridge name bridge id STP enabled interfaces

br0 8000.0800277a16e5 yes eth0

Получить информацию о STP:

$ sudo brctl showstp br0

bridge id 8000.0800277a16e5

designated root 8000.0800277a16e5

root port 0 path cost 0

max age 20.00 bridge max age 20.00

hello time 2.00 bridge hello time 2.00

forward delay 15.00 bridge forward delay 15.00

ageing time 300.00

hello timer 1.74 tcn timer 0.00

topology change timer 0.00 gc timer 67.99

port id 8001 state forwarding

designated root 8000.0800277a16e5 path cost 4

designated bridge 8000.0800277a16e5 message age timer 0.00

designated port 8001 forward delay timer 0.00

designated cost 0 hold timer 0.74

port id 8002 state blocking

designated root 8000.0800277a16e5 path cost 4

designated bridge 8000.0800277a16e5 message age timer 19.80

designated port 8001 forward delay timer 0.00

designated cost 0 hold timer 0.00

В процессе Вам также может понадобиться расширенная справка по использование утилиты brctl

Программа brctl предназначена для создания, сопровождения и просмотра конфигурации модуля Ethernet-моста bridge в ядре Linux.

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

Каждая сеть, участвующая в соединении, соответствует одном интерфейсу, подключённому к мосту. Эти отдельные сети ethernet связываются в большую логическую сеть. Этой сети соответствует сетевой интерфейс моста.

Команда brctl addbr создаёт новый экземпляр ethernet-моста. Сетевой интерфейс, соответствующий этому мосту, будет называться name.

Команда brctl delbr удаляет экземпляр моста, который называется name. Сетевой интерфейс, соответствующий мосту, нужно сначала выключить, прежде чем удалять этот мост.

Команда brctl show показывает все экземпляры ethernet-мостов.

У каждого моста есть подключённые к нему порты. Трафик, который приходит через любой из этих портов, прозрачно отправляется на другие; мост остаётся невидимым для остальной сети (в частности, его не видно через traceroute).

Команда brctl addif
делает сетевой интерфейс портом моста
. Это означает, что все кадры, полученные через интерфейс будут обрабатываться, как если они пришли на этот мост. И наоборот, когда кадр приходит на мост
, интерфейс рассматривается как потенциальный порт для отправки трафика.

Команда brctl delif
отключает интерфейс от бриджа
.

Команда brctl show
показывает информацию про мост подключённые к нему порты.

Мост отслеживает какие адреса были на каждом порту. Когда нужно передать кадр, адрес получателя (заданный в кадре) которого был замечен на каком-то порту, он передаётся только на этот порт. В результате не создаётся множество лишних кадров.

Местоположение ethernet это не статические данные. Машины могут переходить на другие порты, сетевые карты могут меняться (и соответственно, будут меняться MAC-адреса) и т.д.

brctl showmacs
показывает список изученных (learned) MAC-адресов для этого моста.

brctl setageingtime
задаёт время жизни (ageing time) MAC-адреса, в секундах. Если в течение времени секунд мост не видит кадров с определённого адреса, этот адрес удаляется из базы данных Forwarding DataBase (fdb).

brctl setgcint
задаёт период сбора мусора (garbage collection interval) для моста
равным секунд. Это значит, что bridge будет проверять forwarding database на наличие устаревших записей каждые секунд.

Spanning Tree Protocol (Протокол основного дерева)

Несколько ethernet-мостов могут быть соединены друг с другом ethernet-сетями и образовывать ещё большую сеть. В таких сетях обычно работает протокол 802.1d (или аналогичный). Это протокол используется для нахождения кратчайшего пути между двумя ethernet-сетями и для удаления колец из топологий сетей ethernet. Поскольку это стандарт, мосты Linux будут нормально взаимодействовать с мостами третьих производителей. Мосты взаимодействуют друг с другом при помощи отправки BPDU (Bridge Protocol Data Units). Эти BPDU можно узнать по Ethernet-адресу получателя 01:80:c2:00:00:00.

Читайте также:  Установка и настройка dosbox

Протокол spanning tree можно выключить совсем (в тех случаях, когда в его использовании нет никакого смысла, например, когда Linux-машина это единственный мост в сети или если если вы уверены, что петель в топологии не будет наверняка).

Программа brctl может настраивать некоторые параметры протокола spanning tree. Объяснение, что обозначают эти параметры можно найти в спецификации IEEE 802.1d. Настройки по умолчанию должны хорошо работать в большинстве случаев. Если вы не знаете, что означают эти параметры, скорее всего вы и не захотите их менять.

  • brctl stp
    управляет тем, будет ли мост принимать участие в работе протокола spanning tree (STP). Если состояние это «on» или «yes», STP будет включён; во всех остальных случаях он будет выключен. При выключенной опции мост не будет отправлять или принимать BPDU и не будет никак участвовать в работе протокола spanning tree. Если этот мост не единственный в сети, или если возможны циклы в сетевой топологии, эту опцию выключать не стоит. Опцию нужно отключать, только если точно представляешь, что делаешь.
  • brctl setbridgeprio

устанавливает приоритет моста равным

. Параметр priority это 16-битное беззнаковое целое без размерности (число между 0 и 65535). Чем ниже приоритет, тем «лучше». Мост с наименьшим приоритетом будет выбран как корневой.

  • brctl setfd
    задаёт параметр ‘bridge forward delay’ равным секунд.
  • brctl sethello
    задаёт параметр ‘bridge hello time’ равным секунд.
  • brctl setmaxage
    задаёт параметр ‘maximum message age’ равным секунд.
  • brctl setpathcost

    задаёт стоимость порта

    равным . Это метрика без единиц измерений.
    brctl setportprio

    устанавливает приоритет порта

    . Значение priority это беззнаковое 8-битное целое (число между 0 и 255) и без единиц измерения. Эта метрика используется при выборе корневого моста (root bridge) и корневого порта (root port).

    Из дополнительной информации по использованию bridge подчерпнул для своего развития, что мосты использующиеся в Ubuntu системе более продвинутей по сравнению с простыми аппаратными мостами и коммутаторами, все дело в том, что они могут отфильтровывать и регулировать трафик. Просто часто в организациях в которых работаешь просто нет финансовой возможности приобретать дорогую железку, если Вы как специалист и объяснили своему руководству, что оно может существенно съекономить для решения поставленной задачи задействовав не аппаратную сторону, а программную. А вы как раз такой специалист который в своей системе (Ubuntu системе) может это сделать, задокумментировать и объяснить коллегам, как он этого добился. На этом заметка завершена, в последствии опираясь на нее я покажу ее использование в дальнейшем, а пока всё, до встречи с уважением автор блога – ekzorchik.

    2 комментария

    Спасибо за описание, всё по полочкам и доступно для начинающих.
    Я хотел бы сделать мост из нотбука подключенного к интернет по WiFi, а сетевой картой подключенного к железному свичу для раздачи через него интернета по проводам.
    Бридж по Вашему описанию без проблем создал, добавил в него сетевую карту с обнулённым IP, задал бриджу свободный IP из диаппазона WiFi и перевел в состояние up.
    Сразу пропала связь с роутером через WiFi, а в таблице маршрутизации появились две строки:
    link-local * 255.255.0.0 U 1000 0 0 br0
    192.168.1.0 * 255.255.255.0 U 0 0 0 br0
    Попробовал добавить к бриджу WiFi-интерфейс (wlc3), но в ответ получил: «can’t add wls3 to bridge br0: Operation not supported».
    Буду признателен, если подскажете, что нужно сделать.

    А у Вас не получится сделать br0 и поместить в него eth0 + wlan0. Вроде так не работает. С такой задачей дело не имел.

    Comments are closed.

    Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

    Поблагодари автора и новые статьи

    будут появляться чаще 🙂

    Карта МКБ: 4432-7300-2472-8059
    Yandex-деньги: 41001520055047

    Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

    Источник

  • Adblock
    detector