GRE – Сетевой протокол от компании
CISCO Systems для туннелирования соединений, путем инкапсуляции пакетов сетевого уровня в IP пакеты. С помощью протокола GRE создается непрерывное соединение между двумя узлами ( маршрутизаторами ), через общедоступную сеть. Протокол GRE может быть использован для создания простой частной сети (VPN), между пользователями, подключенными через сеть провайдера, или между пограничными маршрутизаторами с среде провайдера, для обмена обновлениями таблиц маршрутизации.
Имейте в виду, что данный протокол не поддерживает шифрование данных на маршруте, если для вас это критично и основной приоритет безопасность, лучше его не использовать.
Операционная система FreeBSD, полностью поддерживает создание и управление туннелями, протокола GRE.
Поддержка GRE, осуществляется на уровне ядра, соответствующую опцию можно включить в конфигурации ядра на стадии конфигурирования и последующей компиляции, если-же по каким-либо причинам это не сделано, при попытке активировать GRE устройство, в ядро динамически будет загружен необходимый модуль (
if_gre.ko ).
Самый простой способ создать GRE интерфейс, использовать программу
ifconfig, например командой:
# ifconfig gre0 create
будет создан интерфейс с именем
gre0, если при создании интерфейса, не указывать номер устройства, будет назначен первый свободный, например,
gre0 у нас уже есть, теперь, командой:
# ifconfig gre create
будет создан интерфейс с именем
gre1, как видите команда
ifconfig назначила первый свободный номер.
С помощью той-же команды
ifconfig, можно удалить не используемый интерфейс:
# ifconfig gre1 destroy
Теперь, когда интерфейс GRE создан, нужно настроить всех участников соединения, делается это с помощью все той-же команды
ifconfig. Предположим, нам нужно настроить туннель между хостами
А и
Б, схема выглядит следующим образом:
Для начала создаем интерфейс
gre0 на хосте
А и назначаем конечные точки туннеля:
# ifconfig gre0 create
# ifconfig gre0 192.168.10.1 192.168.10.2 netmask 255.255.255.0
# ifconfig gre0 tunnel 10.0.2.1 10.0.1.1
На хосте
Б делаем то-же самое, используя соответствующие адреса:
# ifconfig gre0 create
# ifconfig gre0 192.168.10.2 192.168.10.1 netmask 255.255.255.0
# ifconfig gre0 tunnel 10.0.1.1 10.0.2.1
- Первой строкой, вышеприведенных команд, мы создаем интерфейс gre0.
- Второй, назначаем интерфейсу IP адреса, для текущего хоста и для другого конца туннеля.
- И наконец в третьей строке устанавливаем туннель между хостами, здесь нужно использовать реальные IP адреса сетевых интерфейсов.
Посмотрим настройки туннеля на хосте
А:
# ifconfig gre0
gre0: flags=9051metric
0 mtu 1476
tunnel inet 10.0.2.1 --> 10.0.1.1
inet 192.168.10.1 --> 192.168.10.2 netmask 0xffffff00
Значение MTU, будет высчитано и назначено автоматически с учетом GRE протокола.
Теперь, когда интерфейсы туннеля подняты ( запущены, приведены в состояние UP ), можно проверить соединение пропинговав с хоста
А, командой
ping, IP адрес туннеля, хоста
Б:
# ping -c3 192.168.10.2PING 192.168.10.2 (192.168.10.2): 56 data bytes
64 bytes from 192.168.10.2: icmp_seq=0 ttl=128 time=0.359 ms
64 bytes from 192.168.10.2: icmp_seq=1 ttl=128 time=2.512 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=128 time=0.196 ms
--- 192.168.10.2 ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.196/1.022/2.512/1.055 ms
Итак, мы довольно быстро подняли туннель, с помощью протокола GRE, между хостом
А и
Б. Тоже самое можно проделать и на маршрутизаторах ( CISCO или Juniper ). В данном примере мы создавали туннель вручную, этого вполне достаточно что-бы «потренироваться на кошках», но что-бы соединение было постоянным, то есть, после перезагрузки настраивалось автоматически, нужно дописать в стартовый скрипт
/etc/rc.d следующие строчки:
cloned_interfaces="gre0"
ifconfig_gre0="inet inet 192.168.10.1 192.168.10.2 netmask 255.255.255.0 tunnel 10.0.2.1 10.0.1.1"
Таким образом, с помощью переменной
cloned_interfaces можно назначить столько туннелей, сколько вам нужно, и обратите внимание, во второй строке мы объединили 2 команды в одну, то-же самое можно сделать и через командную строку.