ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Продолжая тему туннелей привожу ещё один способ поднять туннель между серверами под OS FreeBSD — это netgraph туннели.

Netgraph туннель как и OpenVPN туннель позволяет выбрать порт и протокол по которому будет устанавливаться туннель.

Их основное отличие в том, что netgraph туннель реализован на уровне ядра системы и использует все доступные ядра CPU, а OpenVPN реализован в userland`е и использует только одно ядро CPU.

Задача

Поднять netgraph туннель между двумя FreeBSD серверами и пророутить через туннель некоторые подсети.

Дано

  • Внешний IP-адрес сервера FreeBSD1: 1.1.1.1
  • Внешний IP-адрес сервера FreeBSD2: 2.2.2.2
  • Тунельный IP-адрес сервера FreeBSD1: 10.0.0.1
  • Тунельный IP-адрес сервера FreeBSD2: 10.0.0.2

Настройка

Туннель устанавливается между двумя внешнему IP-адресами по выбранному нами порту 2000 и протоколу UDP,  на туннеле назначаются IP-адреса из серой подсети 10.0.0.0/30.

Я приведу настройку только одной стороны, т.к. вторая сторона это просто зеркальное отражение первой.

Создадим интерфейс ng:
# ngctl mkpeer iface dummy inet

Укажем что будем использовать протокол UDP:
# ngctl mkpeer ng0: ksocket inet inet/dgram/udp

Укажем внешний IP сервера FreeBSD-1 (с которого мы и начали настройку) и зададим порт:
# ngctl msg ng0:inet bind inet/1.1.1.1:2000

Укажем внешний IP сервера FreeBSD-2 и порт, на которой мы и устанавливаем туннель:
ngctl msg ng0:inet connect inet/2.2.2.2:2000

Назначим IP-адреса на сам туннель (созданный интерфейс ng0):
ifconfig ng0 10.0.0.1 10.0.0.2 netmask 255.255.255.252

Теперь можно посмотреть что получилось:

# ifconfig ng0

ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
        inet 10.0.0.1 --> 10.0.0.2 netmask 0xfffffffc

Туннель с одной стороны готов, настройте зеркально вторую сторону (сервер FreeBSD-2) и вы должны «увидеть» (пинговать) туннельные IP-адреса с обоих сторон.
После чего можно уже роутить что угодно через установленный вами туннель.

Команда для уничтожения netgraph туннеля:

# ngctl shutdown ng0:

Внимание ! Символ двоеточия в конце это не очепятка, как многие думают, он должен там быть.

Для автозапуска туннеля заглянем в предоставленный нам пример /usr/share/examples/netgraph/udp.tunnel и создадим свой стартовый скрипт /usr/local/etc/rc.d/ng_tun_start.sh

#!/bin/sh

case "$1" in
stop)
        if ifconfig ng0 >/dev/null 2>&1; then
                ifconfig ng0 inet down delete >/dev/null 2>&1
                ngctl shutdown ng0:
                echo "tunnel ng0 was destroyed";
        fi
        ;;
start)
        LOC_EXTERIOR_IP=1.1.1.1
        REM_EXTERIOR_IP=2.2.2.2

        LOC_INTERIOR_IP=10.0.0.1
        REM_INTERIOR_IP=10.0.0.2

        UDP_TUNNEL_PORT=2000
        if ifconfig ng0 >/dev/null 2>&1; then
                echo "tunnel ng0 already up";
        else
                ngctl mkpeer iface dummy inet
                ngctl mkpeer ng0: ksocket inet inet/dgram/udp
                ngctl msg ng0:inet bind inet/${LOC_EXTERIOR_IP}:${UDP_TUNNEL_PORT}
                ngctl msg ng0:inet connect inet/${REM_EXTERIOR_IP}:${UDP_TUNNEL_PORT}
                ifconfig ng0 ${LOC_INTERIOR_IP} ${REM_INTERIOR_IP} netmask 255.255.255.252
        fi
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        ;;
esac

Теперь при старте сервера туннель будет автоматически создан и у вас есть возможность в ручную стартовать туннель:
# /usr/local/etc/rc.d/ng_tun_start.sh start

или разрушать его:
# /usr/local/etc/rc.d/ng_tun_start.sh stop

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор: Панфилов Алексей (lehis (at) subnets.ru)

Похожие статьи:

    Не найдено

Прочитано: 13 070 раз(а)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 1, среднее: 4,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Добавить комментарий

Вам следует авторизоваться для размещения комментария.