Инструменты пользователя

Инструменты сайта


gre

Различия

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

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

gre [2018/08/02 10:31] (текущий)
Строка 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]]
загрузка...
gre.txt · Последние изменения: 2018/08/02 10:31 (внешнее изменение)