Документация по ОС FreeBSD Среда, 01.05.2024, 22:34
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Соединение трех и более Ethernet сетей средствами Netgraph во FreeBSD
Готовое решение для обьединения трех отдельных локалок с разными провайдерами в единую сеть.

Эта задачка достаточно просто решается с помощью NEТGRAPH

Исходные данные:

1. есть три офиса в каждом из офисов локалка 192.168.210.0/24
2. каждая локалка ходит в интернет через nat+ipfw FreeBSD 4.3
3. в каждом из офисов свой провайдер.

Задача:

1. сделать, чтобы все клиенты локалок могли пользоваться сетевыми дисками и принтерами независимо от того в каком из офисов они находятся.

Решение:

1. вкрутил в каждый из шлюзовых компов по еще одной сетевухе (кроме двух уже имеющихся)

   fxp0 - подключена к провайдеру
   rl0 - gateway для локальных компов
   rl1 - без адреса подключена к свичу офисной локалки.

2. Перекомпилил кернел с опциями

   options NETGRAPH
   options NETGRAPH_SOCKET
   options NETGRAPH_ECHO

3. Настроил NETGRAPH в главном офисе (будет выполнять функции сервера ethernet тунелей поверх UDP) запускающий скриптик:

        #!/bin/sh                   
        #Загружаю драйвера узлов моста и сетевухи
        /sbin/kldload ng_ether                                     
        /sbin/kldload ng_bridge                   
        # создаю узел типа ng_bridge и подключаю хук link0 к хуку lower сетевухи
        # (lower - физ уровень передачи данных)
        /usr/sbin/ngctl mkpeer rl1: bridge lower link0
        # обзываю созданный узел multi_link
        /usr/sbin/ngctl name rl1:lower multi_link  

        # создаю узел тип:ksocket, транспорт:UDP и цепляю его хук на link1 моста
        /usr/sbin/ngctl mkpeer multi_link: ksocket link1 inet/dgram/udp
        # обзываю созданный узел lnk1
        /usr/sbin/ngctl name multi_link:link1 lnk1
        # создаю сокет на IP выданном провайдером
        /usr/sbin/ngctl msg lnk1: bind inet/81.111.111.31:2515 
        # соединяюсь с сокетом (созданным ниже) во втором офисе
        /usr/sbin/ngctl msg lnk1: connect inet/194.186.121.99:2515

        # создаю узел тип:ksocket, транспорт:UDP и цепляю его хук на link2 моста
        /usr/sbin/ngctl mkpeer multi_link: ksocket link2 inet/dgram/udp
        # обзываю созданный узел lnk2
        /usr/sbin/ngctl name multi_link:link2 lnk2
        # создаю сокет на IP выданном провайдером но уже с другим портом
        /usr/sbin/ngctl msg lnk2: bind inet/81.111.111.31:2516  
        # соединяюсь с сокетом (созданным ниже) во втором офисе
        /usr/sbin/ngctl msg lnk2: connect inet/61.16.121.100:2516

        # Поднимаю интефейс                    
        ifconfig rl1 up
        # Ввожу интерфейс в promission mode
        /usr/sbin/ngctl msg rl1: setpromisc 1
        # отключаю перезапись src адреса в заголовке пакета при прохождении интерфейса
        /usr/sbin/ngctl msg rl1: setautosrc 0


4. Настраиваю NETGRAPH во втором и третьем офисе здесь запускающие скрипты будут анологичны

        #!/bin/sh
        # загрузка драйвера ng_ether
        kldload ng_ether

        # создаю узел тип:ksocket hook:сеть физ уровень транспорт:UDP
        ngctl mkpeer rl1: ksocket lower inet/dgram/udp
        # создаю сокет на внешнем IP
        ngctl msg rl1:lower bind inet/194.186.121.99:2515
        # подключаюсь к сокету на сервере (см п.3)
        ngctl msg rl1:lower connect inet/81.111.111.31:2515 

        # Поднимаем интерфейс без ip
        ifconfig rl1 up
        # Ввожу интерфейс в promission mode
        ngctl msg rl1: setpromisc 1
        # отключаю перезапись src адреса в заголовке пакета при прохождении интерфейса
        ngctl msg rl1: setautosrc 0
                                       
                                       
в третем офисе все аналогично:

        #!/bin/sh
        # загрузка драйвера ng_ether
        kldload ng_ether

        # создаю узел тип:ksocket hook:сеть физ уровень транспорт:UDP
        ngctl mkpeer rl1: ksocket lower inet/dgram/udp
        # создаю сокет на внешнем IP
        ngctl msg rl1:lower bind inet/61.16.121.100:2516
        # подключаюсь ко второму сокету на сервере (см п.3)
        ngctl msg rl1:lower connect inet/81.111.111.31:2516  

        # Поднимаем интерфейс без ip
        ifconfig rl1 up
        # Ввожу интерфейс в promission mode
        ngctl msg rl1: setpromisc 1
        # отключаю перезапись src адреса в заголовке пакета при прохождении интерфейса
        ngctl msg rl1: setautosrc 0


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

Пара замечаний:

1. само собой в каждой из локалок не должно быть повторяющихся ip адресов

2. все это имеет смысл только при скоростном, синхронном, безлимитном интернете.

Особая благодарность http://forum.bestcom.ru/index.php?showforum=7 за помощь в настройке...

Автор: Alexisss, (источник www.opennet.ru)
Категория: Net | Добавил: oleg (17.11.2007)
Просмотров: 986 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024