Организация GRE-туннеля на FreeBSD

()

Операционная система FreeBSD продолжает пользоваться популярностью за простоту настройки и надёжность. Ровно за тоже самое пользуется популярностью протокол GRE. И даже отсутствие шифрования не является большой преградой: внутри GRE-туннеля можно использовать протоколы с шифрованием, а сам туннель использовать исключительно как транспорт.

С помощью GRE-туннеля можно связать несколько локальных сетей между собой. Далее будет рассмотрена настройка GRE-туннеля и маршрутизации на сервере под управлением FreeBSD.

Начальные условия:

  • Сервер под управлением FreeBSD 11.1 с IP-адресом 2.2.2.2;
  • Удалённая машина с IP-адресом 1.1.1.1;
  • Сети 10.10.0.0/24 и 10.20.0.0/24 за удалённой машиной;
  • Необходимо настроить GRE-туннель для доступа в эти сети. Адрес на "нашей" стороне: 172.17.0.1, на удалённой - 172.16.0.1.

Схема сети

Приступаем к настройке. Первым делом надо загрузить модуль ядра для поддержки протокола GRE:

kldload if_gre

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

echo 'if_gre_load="YES"' >> /boot/loader.conf

Далее добавляем в /etc/rc.conf строки:

# Обязательно указываем список клонируемых интерфейсов
cloned_interfaces="gre0"

# Настройки интерфейса gre0 (интерфейса GRE-туннеля)
ifconfig_gre0="inet 172.17.0.1 172.16.0.1 tunnel 2.2.2.2 1.1.1.1"

# Список имён маршрутов, которые надо поднять
static_routes="net10:gre0 net20:gre0"

# Именованные маршруты
route_net10="-net 10.10.0.0/24 -iface gre0"
route_net20="-net 10.20.0.0/24 -iface gre0"

Тут надо сделать остановку и объяснить одну тонкость: в параметре «static_routes» указываются имена маршрутов, которые надо поднять. Иногда может сложиться ситуация когда добавление маршрутов будет выполнено раньше чем будет поднят соответствующий интерфейс и потому завершится ошибкой.

Чтобы этого избежать нужно к именам маршрутов добавить через двоеточие имена интерфейсов, которые должны быть подняты для корректного добавления этого маршрута. В данном примере как раз описано что маршруты «route_net10» и «route_net20» должны быть добавлены только после поднятия интерфейса «gre0». Поднимем интерфейс:

/etc/rc.d/netif start gre0

Вывод должен выглядеть примерно так:

Created clone interfaces: gre0.
Starting Network: gre0.
gre0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1476
        options=80000<LINKSTATE>
        tunnel inet 2.2.2.2 --> 1.1.1.1
        inet 172.17.0.1 --> 172.16.0.1  netmask 0xffff0000 
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        groups: gre 
add net 10.10.0.0: gateway gre0
add net 10.20.0.0: gateway gre0

Для проверки доступности можно "пропинговать" второй конец тоннеля. Проверить таблицу маршрутизации можно командой:

netstat -nr

На этом всё. Приятной работы!

Ключевые слова: gre, gre-туннель, freebsd, static_routes.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Anonymous 2018-04-24 08:05:45 (#)

«Адрес на "нашей" стороне: 172.17.0.1, на удалённой - 172.16.0.1.»
Про это на картинке никаких пояснений,и поэтому из статьи не понятно что это за адреса

MooSE 2018-04-24 14:01:15 (#)

Про это на картинке никаких пояснений,и поэтому из статьи не понятно что это за адреса
Это адреса внутри туннеля.
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE