gre туннель является стандартом при необходимости организовать соединение точка-точка. gre позволяет туннелировать multicast и IPv6
GRE туннель — тип соединения двух сетей типа точка-точка. Присоединении используется протокол GRE, который представляет собой стандарт, описывающих технологию соединения двух узлов со статическими адресами в канал через публичную сеть общего доступа.
GRE тоннели позволяют передавать multicast и IPv6 трафик.
Настройка GRE туннелей проста и является стандартом, такие туннели используются очень часто, но имеют существенный недостаток заключающийся в отсутствии какого-либо шифрования трафика.
Еще один минус — через туннель такого вида нельзя работать через NAT.
Чтобы из Linux роутера сделать узел, который мог бы быть одной из точек туннеля нужно чтобы ядро было скомпилировано с модулем ip_gre.ko.
Обычно оно используется при компиляции — проверить поддержку модуля можно так:
find /lib/modules/`uname -r` -name 'ip_gre.ko'
GRE туннель — пример настройки на Linux роутере
Изначальные данные : имеется 3 сети: сети A и B для каждой из которых выделен диапазон локальных адресов, внешняя сеть C (Internet).
Сеть A:
network 10.0.1.0
netmask 255.255.255.0
router 10.0.1.1 (адрес из диапазона 10.х.х.х назначается на роутере)
Роутер в сети С с адресом 172.16.11.12
Сеть В:
network 10.0.2.0
netmask 255.255.255.0
router 10.0.2.1 (адрес из диапазона 10.х.х.х назначается на роутере)
Роутер в сети С с адресом172.18.20.2
Настройки на роутере в сети А:
ip tunnel add netb mode gre remote 172.18.20.22 local 172.16.11.12 ttl 255
ip link set netb up
ip addr add 10.0.1.1 dev netb
ip route add 10.0.2.0/24 dev netb
Командой в первой строке создается туннель и режиме gre в сеть netb и указывается удаленный и локальный адреса устройств (ttl максимальный). Вторая строка активирует сеть. Третья присваивает адрес роутеру в локальной сети (для более крупных сетей этот адрес может быть, например, 10.0.2.1), а четвертая задает маршрут в саму сеть netb указанием адреса с маской /24.
Пакет, который попадет в туннель будет иметь следующий вид:
Т.е. к данным будет добавляться 2 экземпляра заголовков с IP адресом (из приватной сети и из публичной, а также заголовок GRE их разделяющий)
Настройки на роутере в сети В задаются точно также:
ip tunnel add neta mode gre remote 172.16.11.12 local 172.18.20.22 ttl 255
ip link set neta up
ip addr add 10.0.2.1 dev neta
ip route add 10.0.1.0/24 dev neta
Чтобы удалить туннель на роутере A нужно выполнить:
ip link set netb down
ip tunnel del netb
На роутере B:
ip link set neta down
ip tunnel del neta
Читайте также про ip-ip туннели — самый простой способ туннелирования между двумя хостами.