Нотатки про мережевий міст

Напевно, багато хто помічав - у Windows існує така штука - як організація мережевого мосту. Вибираються дві мережеві карти і з низ виходить один мережевий міст. Виглядає так, ніби кручена пара з першої мережевої карти скрутили з крученою парою другої мережевої карти. І вся ця справа чудово працює. Але це лише вступ, спробуємо розібратися як це працює.

Мережевий міст виконує те саме завдання, тільки замість різних комп'ютерів виступають мережеві інтерфейси самого себе.

Уявімо слід. картину: Є комп'ютер, який має 4 мережевих інтерфейсу. Причому не обов'язково, що мережевий інтерфейс — це мережна карта, це може бути спокійним і віртуальним інтерфейсом. Тепер додамо віртуальний свіч:

нотатки
bridge0 - це якраз і є наш мережевий міст. Як і звичайний свіч, він скомутував на собі 4 різні вузли.

Тепер спробуємо застосувати цю теорію для вирішення такого завдання: 1. Є сервер доступу, одним інтерфейсом підключений до інтернету, другим — до нашої ЛОМ; 2. Є віддалений клієнт, якому необхідно забезпечити доступ до ресурсів ЛОМ; 3. Клієнт у ЛВС повинен мати такий вигляд — слово підключений до ethernet-сегменту ЛВС.

Отже, одразу кілька зауважень. Для підключення клієнтів – використовується OpenVPN. Чому? Легкий у налаштуванні, шифрований трафік і існує під різні платформи. Як встановлювати та налаштовувати OpenVPN – виходить за межі цієї статті. Просто зійдемося на тому, що він працює, і клієнти підключаються на віртуальний інтерфейсtap2. Також варто зауважити, що на сервері доступу працює фаєрвол (pf), але про це пізніше. У сервері також існує мережевий інтерфейсvlan102, який підключений до нашої ЛОМ, інтерфейсvlan101— який підключений до Інтернету.

Наведумалюнок фізичної топології:

нотатки

Логічна топологія:

нотатки
Як видно - додався інтерфейсtap2та мережаVPN.

Тепер наше завдання зводиться до того щоб об'єднати дві мережі,ЛВСіВПН. Використовуючи наші знання про мережеві мости — спробуємо це замалювати: Як видно, усередині нашого сервера створили мережевий містbridge0куди і підключили дві наші мережі, які необхідно скомутувати.

Підготуємо мережевий міст, для цього потрібно завантажити модуль if_bridge:

Створюємо наш міст:

Зверніть увагу на слово "up" в кінці. За замовчуванням міст створюється у відключеному стані. "up" - саме його включає (аналогія з кабелем харчування на свічі).

Добре, пакети до нас долітають. Тепер подивимося, чи проходять пакети через мережевий міст:

Порядок пакети є. Дивимося, чи є пакети на інтерфейсіЛВС:

А пакетів і немає… Отже, визначили — через мережевий міст пакети не проходять. Бігло окинувши поглядом man if_bridge дізнаємося:

Коли включена фільтрація (а за замовчуванням вона включена), пакет пробирається ланцюжком вхідний інтерфейс -> мережевий міст -> вихідний інтерфейс. Можна сказати, що у нас не просто L2 свіч, а повноцінний із L3 фільтрацією. Дозволяємо у фаєрволі прохід пакетів за таким маршрутом:

і ще раз дивимося, що діється в нашому свічі:

Добре, все працює як треба. Але варіант - щоб під кожного клієнта робити винятки у фаєрвол - не зовсім те, що хотілося. Спробуємо з нашого L3 свіча зробити старенький добрий L2. man if_bridge з цього приводу каже: — фільтрація на інтерфейсах мережного мосту (в даному випадку — цеvlan102таtap2) і: — фільтрація на самому мережевому мосту (у нашому випадку - bridge0 ). Те що треба, перетворюємо на свіч у тупий L2 двома командами:

І перевіряємо, що вийшло:

Пакети справно літають обидві сторони.

Сподіваюся, ця замітка внесе деяку ясність у розуміння мережного мосту в ОС FreeBSD :)