Статья "Виртуальный свитч"

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-06-11 14:51:48

Проброс ethernet через интернет по udp или виртуальныйы свитч на FreeBSD.

Соединяем две ethernet сетки чтобы они видели друг друга как будто находятся в одному коммутаторе.

Делать будем на основе ядерного netgraph, в частности модули ng_ether и ng_bridge.

Добавляем в /boot/loader.conf

Код: Выделить всё

netgraph_load="YES"
ng_ether_load="YES"
ng_bridge_load="YES"

Есть 2 варианта работы системы

1. Без модуля ng_bridge.
Мы получим как бы объединение сетевых интерфейсов в один невидимый.
Сами сервера с этими интерфейсами не будут видить трафик на них.
Получается прозрачное соединение как будто между сетями протянули физический кабель.
Весь трафик приходящий на интерфейс одного из серверов будет прозрачно проходить на другой.

2. С модулем ng_bridge.
Мы получим как бы включение интерфейсов на обоих серверах в один свитч.
Сервера будут видеть трафик на интерфейсах.
Трафик не предназначеный для соседней сети не пойдет по каналу (реализация обычного свитча).


Конфигурация:

Имеем два типичных роутера.

1.
Два сетевых интерфейса
fxp0 - белый интернет адрес для примера 1.1.1.1
fxp1 - серый локальный адрес 192.168.0.1

2.
Два сетевых интерфейса
fxp0 - белый интернет адрес для примера 1.1.1.2
fxp1 - серый локальный адрес 192.168.0.2

При загрузке модуля ng_ether на обоих роутерах в netgraph атоматически были созданы узлы с названием сетевых карт.

Код: Выделить всё

lmik# ngctl list
There are 3 total nodes:
  Name: ngctl3178       Type: socket          ID: 00000009   Num hooks: 0
  Name: fxp0            Type: ether           ID: 00000001   Num hooks: 0
  Name: fxp1            Type: ether           ID: 00000002   Num hooks

Вариант №1 непрактичный и рассматривать его не будем, просто напишу конфигурацию графов вдруг кому-то понадобится.

Код: Выделить всё

ngctl mkpeer fxp0 ksocket lower inet/dgram/udp
ngctl msg switch:link1 bind inet/1.1.1.1:1234
ngctl msg switch:link1 connect inet/1.1.1.2:1234
ngctl msg fxp1: setpromisc 1
ngctl msg fxp1: setautosrc 0


Вариант №2

На первом сервере конфигурация нетграфов будет выглядеть так:

Код: Выделить всё

#Создаем узел bridge и подключаем к его хуку link0 физический (нижний) уровень fxp1
ngctl mkpeer fxp1: bridge lower link0
#назовем этот узел switch
ngctl name fxp1:lower switch
#создадим узел ksocket и подсоединим его хуком inet/dgram/udp к хуку link1 нашего switch
ngctl mkpeer switch: ksocket link1 inet/dgram/udp
#Отправляем сообщение узлу switch:link1 (туда подключен узел ksocket)
#чтобы тот забиндил сокет для входящего трафика на нашем внешнем IP
ngctl msg switch:link1 bind inet/1.1.1.1:1234
#Отправляем команду узлу switch:link1 (туда подключен узел ksocket)
#чтобы тот соединился со вторым сервером
ngctl msg switch:link1 connect inet/1.1.1.2:1234
#Соединяем хук link2 нашего switch с верхним уровнем интерфейса fxp1
#т.е подключаем наш сервер в наш виртуальный свитч.
ngctl connect switch: fxp1: link2 upper
#включаем на сетевой карте прослушку всех пакетов,
#а не только тех что предназначаются ей.
ngctl msg fxp1: setpromisc 1
ngctl msg fxp1: setautosrc 0

На втором нужно изменить строчки:

Код: Выделить всё

ngctl msg switch:link1 bind inet/1.1.1.2:1234
ngctl msg switch:link1 connect inet/1.1.1.1:1234


Просто поменять местами адреса.

Для красоты оформляем запуск нашего виртуалсвитча в скрипт и при желании кладем в /usr/local/etc/rc.d

Код: Выделить всё

#!/bin/sh

#тут указываем наш белый адрес
self=1.1.1.1
peer=1.1.1.2
#тут порт по которому будет бегать трафик
port=1234
#интерфейс который включаем в свитч
if=fxp1
                                                                                                                 
case "$1" in
        start)
            echo "Starting netgraph switch."
      ngctl mkpeer ${if}: bridge lower link0
      ngctl name ${if}:lower switch
      ngctl mkpeer switch: ksocket link1 inet/dgram/udp
      ngctl msg switch:link1 bind inet/${self}:${port}
      ngctl msg switch:link1 connect inet/${peer}:${port}
      ngctl connect switch: ${if}: link2 upper
      ngctl msg ${if}: setpromisc 1
      ngctl msg ${if}: setautosrc 0
            echo "Ok."
            exit 0
            ;;
        stop)
            echo "Stopping netgraph switch."
            /usr/sbin/ngctl shutdown ${if}:
            /usr/sbin/ngctl shutdown switch:
            echo "Ok."

            exit 0
            ;;
        restart)
            sh $0 stop
            sh $0 start
            ;;
        *)
            echo "Usage: `basename $0` { start | stop | restart }"
            exit 64
            ;;
esac

Красота какая, никаких впн крутить не надо, просто запустить скрипт :), никаких реконектов и т.п...
Возможно попробую в ближайшее время привернуть возможность фильтрования трафика через ipfw и шифрование если это возможно :)
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение dikens3 » 2008-06-11 17:47:21

Прикольно... :bn:
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение manefesto » 2008-06-11 19:16:51

тема...
епт....управляемый свитч...
Надо бы на больше количество сетей сделать...
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-06-11 19:34:57

dikens3 писал(а):Прикольно... :bn:


Нифига не баян, вся дока в инете про вариант 1 (это там сам сервак в этот свитч не включен, а интерфейс на нем висит), а народ в графы с большим трудом втыкает.
Последний раз редактировалось LMik 2008-06-11 19:37:26, всего редактировалось 1 раз.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-06-11 19:35:26

manefesto писал(а):тема...
епт....управляемый свитч...
Надо бы на больше количество сетей сделать...


Ну это не проблема, там все остальное по аналогии, копипаст.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение Morty » 2008-06-11 23:39:39

Понравилось

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение hizel » 2008-06-12 12:53:30

а чем if_bridge не угодил?
stp держит?
и если управлямый свич гиде vlan-ы ? :smile:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-06-12 15:46:02

hizel писал(а):а чем if_bridge не угодил?
stp держит?
и если управлямый свич гиде vlan-ы ? :smile:


Если заюзать if_bridge то можно переработать схемку с использованием ng_eiface вроде, тогда можно рулить через ipfw.
Сам STP не держит, но детектор петель в нем есть.
Вланы делаются на уровне ifconfig а дальше таже схема.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-06-12 19:37:05

Разместил на сайте...
http://www.lissyara.su/?id=1690
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

proDd
рядовой
Сообщения: 46
Зарегистрирован: 2007-10-08 21:13:40

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение proDd » 2008-06-15 18:27:35

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

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-06-15 18:37:07

proDd писал(а):очень нужна конфигурация роутера для проброса мультикастового трафика вышеописанныим образом


Именно для этого я и делал ;)

Будет время поэксперементирую с фильтрацией не нужного трафика по тунелю.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

proDd
рядовой
Сообщения: 46
Зарегистрирован: 2007-10-08 21:13:40

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение proDd » 2008-06-15 21:00:48

ситуация такая есть 2 подсети соединенные собственно роутером(между ними нет великого и ужасного интернета) нужно вышеописанным способом пробрасывать мультикаст т.е. есть 2 сетевых интрефейса(один смотрит в одну сеть второй в другую) нужно сделать бридж между ними, потомучто if_bridge по какойто причине отказываеться подниматься но по этому поводу наверное сделаю отдельный топик

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-13 2:04:03

все сделал по статье, все работает...

но через некоторое время на одной из машин -
PING 192.168.100.1 (192.168.100.1): 56 data bytes
ping: sendto: No buffer space available

помогает ребут.

на этой машине установлено 4 физических интерфейса.
Последний раз редактировалось wanderer 2008-11-13 14:00:38, всего редактировалось 2 раза.

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение schizoid » 2008-11-13 10:45:52

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

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение zingel » 2008-11-13 11:26:13

Код: Выделить всё

sysctl -w net.local.stream.recvspace=65535

Код: Выделить всё

wysctl -w net.local.stream.sendspace=65535
Z301171463546 - можно пожертвовать мне денег

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-13 15:09:08

поискал, нашел еще:

Код: Выделить всё

sysctl -w net.inet.tcp.sendspace=65535
sysctl -w net.inet.tcp.recvspace=65535


но увеличение буферов дает только небольшую отсрочку.
я запускаю пинг на обоих машинах - все тоже самое.
причем, до изменения размера буфера, вторая машина первую пинговала нормально в условиях, когда у первой уже было "No buffer space available", а после пакеты просто стали теряться.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-11-13 15:23:01

wanderer писал(а):поискал, нашел еще:

Код: Выделить всё

sysctl -w net.inet.tcp.sendspace=65535
sysctl -w net.inet.tcp.recvspace=65535


но увеличение буферов дает только небольшую отсрочку.
я запускаю пинг на обоих машинах - все тоже самое.
причем, до изменения размера буфера, вторая машина первую пинговала нормально в условиях, когда у первой уже было "No buffer space available", а после пакеты просто стали теряться.


надо не tcp а udp, нетграф линкуется по udp
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-13 16:09:39

сори, не внимателен был..

Код: Выделить всё

mak# sysctl -w net.inet.udp.recvspace=65535
net.inet.udp.recvspace: 65535 -> 65535
mak# sysctl -w net.inet.udp.sendspace=655535
sysctl: unknown oid 'net.inet.udp.sendspace'


во-вторых тоже самое - ping: sendto: No buffer space available

нашел на опеннете, что ожно еще поменять

Код: Выделить всё

kern.ipc.maxsockbuf=384000 
kern.ipc.nmbclusters=4096

сейчас буду пробовать..

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-13 18:04:36

Код: Выделить всё

sysctl -w net.local.stream.recvspace=65535
sysctl -w net.local.stream.sendspace=65535
sysctl -w net.inet.tcp.sendspace=65535
sysctl -w net.inet.tcp.recvspace=65535
sysctl -w net.inet.udp.sendspace=65535
sysctl -w net.inet.udp.recvspace=65535
sysctl -w kern.ipc.maxsockbuf=384000


вообщем и это не помогло.
народ, подскажите, куда копать?(

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-13 19:07:34

1. Без модуля ng_bridge.
Мы получим как бы объединение сетевых интерфейсов в один невидимый.
Сами сервера с этими интерфейсами не будут видить трафик на них.
Получается прозрачное соединение как будто между сетями протянули физический кабель.
Весь трафик приходящий на интерфейс одного из серверов будет прозрачно проходить на другой.


еще вопрос. какие именно интерфейсы не будут видеть трафик? внутренние или внешние? *как я понял, внутренние*

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-11-13 21:22:28

wanderer писал(а):
1. Без модуля ng_bridge.
Мы получим как бы объединение сетевых интерфейсов в один невидимый.
Сами сервера с этими интерфейсами не будут видить трафик на них.
Получается прозрачное соединение как будто между сетями протянули физический кабель.
Весь трафик приходящий на интерфейс одного из серверов будет прозрачно проходить на другой.


еще вопрос. какие именно интерфейсы не будут видеть трафик? внутренние или внешние? *как я понял, внутренние*


Правильно понял.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-14 1:44:26

так. а с буфером куда копать?(

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение LMik » 2008-11-14 7:30:24

wanderer писал(а):так. а с буфером куда копать?(

Попробуй

net.graph.maxdgram=524288
net.graph.recvspace=524288

не поможет - sysctl -a сюда
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение zingel » 2008-11-14 19:06:56

Код: Выделить всё

net.inet.icmp.icmplim=100
Z301171463546 - можно пожертвовать мне денег

wanderer
ефрейтор
Сообщения: 59
Зарегистрирован: 2007-10-17 18:19:57
Контактная информация:

Re: Статья "Виртуальный свитч"

Непрочитанное сообщение wanderer » 2008-11-15 19:05:40

в общем я поменял сетвую карточку и все заработало =/ без внесения изменений..


Вернуться в «Networks»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя