Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

gre [2018/08/02 07:31]
gre [2020/11/18 19:10] (текущий)
Строка 1: Строка 1:
 +====== GRE ======
  
 +~~Title: GRE туннели ~~
 +{{htmlmetatags>
 +metatag-description=(Протокол GRE служит для туннелирования сетевых пакетов. Примеры настроек GRE в Debian. GRE туннели в Linux.)
 +}}
 +
 +**GRE** (Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол туннелирования сетевых пакетов, разработанный компанией CISCO Systems. Его основное назначение — инкапсуляция пакетов сетевого уровня сетевой модели OSI в IP пакеты. Номер протокола в IP — 47.
 +
 +===== Что такое GRE туннель? =====
 +
 +**GRE туннель** представляет собой соединение точка - точка, его можно считать одной из разновидностей VPN туннеля, **без шифрования**. Основное достоинство GRE это возможность **передавать широковещательный трафик**, что позволяет пропускать через такой туннель протоколы маршрутизации использующие его, [[IPSec]] туннели в чистом виде этого не могут. Причин для организации 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-header.png?nolink&600 |}}
 +===== Настройка GRE туннелей в Debian GNU/Linux =====
 +
 +Настройка GRE туннелей в [[Debian]] и [[Ubuntu]] одинаковы. Имеется 2 удаленных сервера Debian 7.8 Wheezy с реальными статическими IP адресами.
 +
 +  * Листинг всех туннелей можно просмотреть посредством<file bash>
 +ip tunnel list
 +</file>
 +  * На обоих серверах в [[iptables]] разрешим протокол GRE<file bash>
 +$IPT -A INPUT -p gre -j ACCEPT
 +or
 +$IPT -A INPUT -p gre -s x.x.x.x -j ACCEPT
 +</file>
 +  * 1 сервер. Скрипт для ручного создания GRE туннеля. IPIP -туннель поднимается совершенно аналогичным образом, в скрипте только **mode gre** заменится на **mode ipip**<file bash 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
 +</file>То же самое только через файл /etc/network/interfaces<file bash>
 +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
 +</file>
 +  * 2 сервер. Скрипт для ручного создания GRE<file bash>
 +#!/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
 +</file>В файл /etc/network/interfaces это будет выгладить так<file bash>
 +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
 +</file>
 +  * Всe! Туннель должен работать. Проверяем ping
 +  * Если не работает запускаем [[tcpdump]]<file bash>
 +tcpdump -n -i eth3 proto 47</file>Ниже рабочий пример для ping из локальной сети<file bash>
 +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
 +</file>
 +===== Дополнительные источники о GRE тунелях =====
 +  * [[https://www.ylsoftware.com/news/671|Организация GRE-туннеля в RHEL/CentOS]]
 +  * [[http://packetlife.net/blog/2012/feb/27/gre-vs-ipip-tunneling/|GRE vs IPIP Tunneling]]

Рейтинг курсов Английский язык по Скайп