GRE
GRE (Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол туннелирования сетевых пакетов, разработанный компанией CISCO Systems. Его основное назначение — инкапсуляция пакетов сетевого уровня сетевой модели OSI в IP пакеты. Номер протокола в IP — 47.
Что такое GRE туннель?
GRE туннель представляет собой соединение точка - точка, его можно считать одной из разновидностей VPN туннеля, без шифрования. Основное достоинство GRE это возможность передавать широковещательный трафик, что позволяет пропускать через такой туннель протоколы маршрутизации использующие его, IPSec — протокол защиты сетевого трафика на IP-уровне туннели в чистом виде этого не могут. Причин для организации GRE туннеля может быть множество от банальной необходимости пробросить свою сеть через чужое IP пространство до использования протоколов OSPF, RIPv2, EGRP совместно с IPSec. Так же GRE, в отличии от IPIP, может помочь пробросить немаршрутизируюмые протоколы, такие как NetBios, IPX, AppleTalk.
Различия между туннель GRE или IPIP:
- IPIP — инкапсулирует только unicast IPv4-трафик
- GRE — IPv4/IPv6 unicast/multicast трафик
Туннелирование увеличивает нагрузку на систему и сеть, потому что добавляются дополнительные IP-заголовки. Таким образом, если обычный размер пакета (MTU) в сети равен 1500 байтам, то при пересылке по туннелю, пакет будет меньше, 1476 байт для GRE и 1480 байт для IPIP. Задать MTU можно вручную или с помощью PMTUD (path MTU discovery). Основная проблема в ручной настройке MTU и/или MSS состоит в том, что по пути между вашими площадками может оказаться линк с MTU, скажем, 1300. Тут на помощь может прийти pmtud. Протокол целиком и полностью полагается на ICMP протокол диагностики перегрузки сети unreachable messages, которые должны быть разрешены на всем пути между соседями. Cisco рекомендует устанавливать MTU в 1400 байт вне зависимости от того работает GRE поверх IPSec в туннельном или в транспортном режиме.
Туннелирование подразумевает три протокола:
- пассажир — инкапсулированный протокол (IP, CLNP, IPX, AppleTalk, DECnet Phase IV, XNS, VINES и Apollo)
- протокол инкапсуляции (GRE)
- транспортный протокол (IP)
Как происходит инкапсуляции заголовка GRE в IP-пакет?
GRE-заголовок накладывается «поверх» стандартного IP-пакета. При этом в самом GRE-заголовке содержится так называемый Tunnel IP Header. Именно в нем содержится информация о tunnel source и tunnel destination.
Данные адреса вкладываются в основной пакет, когда он отправляется в публичную сеть. В поле Control Information оригинального IP-пакета содержатся исходные IP-адреса источника и назначения. Таким образом, локальные серые IP-адреса скрыты в пакете, а в маршрутизации участвуют только те адреса которые мы указали в tunnel source и tunnel destination. При передаче пакета в локальную сеть GRE-заголовок отбрасывается и остается «чистый» IP-пакет.
Настройка GRE туннелей в Debian GNU/Linux
GRETap (GRE Tunneling and Packet Reassembly Tool): Это утилита, которая позволяет создавать GRE-туннели на уровне ядра Linux. GRE-туннель позволяет упаковывать сетевые пакеты в другие пакеты IP для передачи через сеть, обеспечивая тем самым возможность создания виртуальной частной сети (VPN) поверх существующей сети. GRETap также обеспечивает функциональность по повторному сбору пакетов в случае их потери или повреждения в процессе передачи через GRE-туннель.
Убедитесь, что у вас установлены необходимые пакеты, включая iproute2, который содержит утилиту ip, позволяющую работать с сетевыми интерфейсами в Linux.
Настройка GRE туннелей в Debian и Ubuntu одинаковы. Имеется 2 удаленных сервера Debian 7.8 Wheezy с реальными статическими IP адресами.
- Листинг всех туннелей можно просмотреть посредством
ip tunnel list
- На обоих серверах в Руководство по iptables: Настройка и оптимизация фаервола Linux разрешим протокол GRE
$IPT -A INPUT -p gre -j ACCEPT or $IPT -A INPUT -p gre -s x.x.x.x -j ACCEPT
- 1 сервер. Скрипт для ручного создания GRE туннеля. IPIP -туннель поднимается совершенно аналогичным образом, в скрипте только mode gre заменится на mode ipip
- gre_to_m86a_create.sh
#!/bin/sh -e #ip tunnel del tun1 ip tunnel add tun1 mode gre remote 91.196.98.162 local 188.230.123.238 dev eth3 ifconfig tun1 10.26.95.254 pointopoint 192.168.35.254 #ifconfig tun1 mtu 1400 #ifconfig tun1 up route add -net 192.168.35.0 netmask 255.255.255.0 gw 192.168.35.254 # Hotel route add -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.35.254 # Service Lan Vlan route add -net 10.90.91.0 netmask 255.255.255.0 gw 192.168.35.254
То же самое только через файл /etc/network/interfaces
auto tun1 iface tun1 inet static address 10.26.95.254 netmask 255.255.255.0 mtu 1400 up ifconfig tun1 multicast pre-up iptunnel add tun1 mode gre local 188.230.123.238 remote 91.196.98.162 dev eth3 post-up route add -net 192.168.35.0 netmask 255.255.255.0 gw 192.168.35.254 post-up route add -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.35.254 post-up route add -net 10.90.91.0 netmask 255.255.255.0 gw 192.168.35.254 pointopoint 192.168.35.254 post-down iptunnel del tun1
- 2 сервер. Скрипт для ручного создания GRE
#!/bin/sh -e ip tunnel add tun1 mode gre remote 188.230.123.238 local 91.196.98.162 dev eth5 ifconfig tun1 192.168.35.254 pointopoint 10.26.95.254 route add -net 10.26.95.0 netmask 255.255.255.0 gw 10.26.95.254 route add -net 172.20.20.0 netmask 255.255.255.0 gw 10.26.95.254
В файл /etc/network/interfaces это будет выгладить так
auto tun1 iface tun1 inet static address 192.168.35.254 netmask 255.255.255.0 mtu 1400 up ifconfig tun1 multicast pre-up iptunnel add tun1 mode gre remote 188.230.123.238 local 91.196.98.162 dev eth5 post-up route add -net 10.26.95.0 netmask 255.255.255.0 gw 10.26.95.254 post-up route add -net 172.20.20.0 netmask 255.255.255.0 gw 10.26.95.254 pointopoint 10.26.95.254 post-down iptunnel del tun1
- Всe! Туннель должен работать. Проверяем ping
- Если не работает запускаем tcpdump Linux примеры использования
tcpdump -n -i eth3 proto 47
Ниже рабочий пример для ping из локальной сети
13:25:04.444375 IP 188.230.123.238 > 91.196.98.162: GREv0, length 88: IP 10.26.95.251 > 192.168.35.55: ICMP echo request, id 5341, seq 15, length 64 13:25:04.459864 IP 91.196.98.162 > 188.230.123.238: GREv0, length 88: IP 192.168.35.55 > 10.26.95.251: ICMP echo reply, id 5341, seq 15, length 64
Заключение
GRETap обеспечивает гибкость и надежность в сетевых архитектурах, позволяя администраторам сетей и разработчикам создавать виртуальные сетевые соединения. Помните, что обычный GRE-туннель не обеспечивает шифрования данных по умолчанию. Он предоставляет механизм для упаковки сетевых пакетов и передачи их через сеть, но без дополнительного слоя безопасности.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах