Generic Routing Encapsulation, создание GRE туннелей

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. Предположим, нам нужно настроить туннель между хостами А и Б, схема выглядит следующим образом:

схема gre туннеля

Для начала создаем интерфейс 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 команды в одну, то-же самое можно сделать и через командную строку.

Комментарии

Не понятно какой внешний а какой внутренний интерфейс из-за этого каша.

а вот тут для ключа tunnel используются другие адреса

http://sshd.su/pages/viewpage.action?pageId=819203

где правда ?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
 oooooo   oooo                          ooooooooo.     .ooooo.    ooooo 
`888. .8' `888 `Y88. d88' `8. `888'
`888. .8' .oooooooo .oooooooo 888 .d88' Y88.. .8' 888
`888.8' 888' `88b 888' `88b 888ooo88P' `88888b. 888
`888' 888 888 888 888 888 .8' ``88b 888
888 `88bod8P' `88bod8P' 888 `8. .88P 888
o888o `8oooooo. `8oooooo. o888o `boood8' o888o
d" YD d" YD
"Y88888P' "Y88888P'
Введите код, изображенный в стиле ASCII-арт.