Продолжая тему туннелей привожу ещё один способ поднять туннель между серверами под 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):
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