- Настройка GRE туннелей в Debian Ubuntu FreeBSD Mikrotik
- Gre tunneling in linux
- Что такое GRE туннель?
- Как происходит инкапсуляции заголовка GRE в IP-пакет?
- Настройка GRE туннелей в Debian GNU/Linux
- Настройка GRE туннеля в Linux
- Point-to-point (точка-точка)
- Point-to-multipoint (точка-мультиточка)
- Добавить комментарий Отменить ответ
- Простой Ethernet-туннель на Linux в четыре-шесть команд
- GRE Tunneling
- Configure GRE Tunneling
- Verify GRE Tunnel Settings
- Delete a GRE Tunnel Interface
- Change GRE Tunnel Settings
Настройка GRE туннелей в Debian Ubuntu FreeBSD Mikrotik
GRE-туннели — это туннели 3-го сетевого уровня L3 модели OSI, на которых видны IP-адреса обоих сторон. Через них можно прокидывать маршрутизацию (в том числе и default route) точно также, как и через любые другие интерфейсы.
GRE (Generic Routing Encapsulation) туннель является одним из популярных разновидностей VPN. Туннели GRE совместимы с аппаратными шлюзами безопасности, маршрутизаторами Mikrotik, Linux-роутерами, а также с оборудованием, которое умеет работать с GRE (например, Cisco, Juniper и др).
Важно! Туннели GRE относятся к типу точка-точка. Оба участника туннеля должны иметь внешние IP-адреса (или находится в одной сети) и между ними не должно быть никакой трансляции адресов NAT. Это необходимые условия для установки туннеля.
В простом виде, никаких механизмов безопасности для этих туннелей не предусмотрено (отсутствуют механизмы шифрования и аутентификации).
Обращаем ваше внимание, что сами по себе туннели GRE работают без сохранения состояния соединения (их называют stateless или connectionless), то есть невозможно понять находится ли в работоспособном состоянии туннель или нет. Мы можем только настроить обе стороны и после этого проверить передачу данных.
Туннели GRE работают непосредственно поверх IPv4-протокола. GRE используют номер IP-протокола 47.
Пример
Настройка GRE туннелей в Debian и Ubuntu идентичны
В моем распоряжение 3 удаленных сервера Debian и Ubuntu и FreeBSD с реальными статическими IP адресами. Нужно это дело объединить в одну локальную сеть c главным роутеров, в роли которого является роутер Mikrotik :
Вся настройка GRE туннеля сводиться к прописыванию в /etc/network/interfaces следующих параметров:
На первом Debian сервере в /etc/network/interfaces
На втором Ubuntu сервере в /etc/network/interfaces
Настройка GRE на FreeBSD сервере в /etc/rc.conf
Настройка GRE на Mikrotik
После настройки в Mikrotik нужно еще разрешить ip серверов в фаерволе
Источник
Gre tunneling in linux
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:
Туннелирование увеличивает нагрузку на систему и сеть, потому что добавляются дополнительные 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 в туннельном или в транспортном режиме.
Туннелирование подразумевает три протокола:
Как происходит инкапсуляции заголовка 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
Настройка GRE туннелей в FAQ Debian и Хостинг VPS/VDS на Ubuntu одинаковы. Имеется 2 удаленных сервера Debian 7.8 Wheezy с реальными статическими IP адресами.
То же самое только через файл /etc/network/interfaces
В файл /etc/network/interfaces это будет выгладить так
Ниже рабочий пример для ping из локальной сети
Источник
Настройка GRE туннеля в Linux
Point-to-point
(точка-точка)
Имеется 2 сервера с реальными статическими IP адресами, нужно объединить их в одну сеть.
Вся настройка GRE туннеля сводиться к прописыванию в /etc/network/interfaces следующих параметров:
На первом сервере в /etc/network/interfaces
На втором сервере в /etc/network/interfaces
Point-to-multipoint
(точка-мультиточка)
Имеется три сервера. Внешние ip-адреса систем: 1.1.1.1, 2.2.2.2 и 3.3.3.3; между ними есть маршрутизация.
1. Создаём GRE-тоннель (на всех трёх):
Мы не указали здесь адрес пира. Это значит, что в принципе он может быть расположен по любому адресу.
key в данном случае идентифицирует конкретную mGRE-сеть — это 32-битное число, одинаковое для всех нод.
2. Назначаем ему адрес:
(на 1.1.1.1)
Для интерфейсов Ethernet этого было бы достаточно. В Ethernet есть Adress Resolution Protocol (ARP), который позволяет системам самостоятельно найти MAC-адрес, зная IP-адрес хоста назначения. Ethernet является средой Broadcast Multiple Access, и протокол ARP заключается в создании запроса ко всем станциям сети (по MAC-адресу FF:FF:FF:FF:FF:FF): «Эй, кто из вас имеет IP-адрес x.x.x.x?». Если станция с таким IP-адресом имеется, она уже в приватном порядке сообщает, что «x.x.x.x расположен по адресу yy:yy:yy:yy:yy:yy».
В данном примере сети (Internet) нет такого средства, как ARP, а роль адресов «второго уровня», которые в случае Ethernet — MAC-адреса, здесь исполняю внешние IP-адреса систем. Мы работаем со средой Non-Broadcast Multiple Access (NBMA), мы не можем крикнуть на весь интернет, как сделал бы ARP: «Эй, кто в GRE-сети 0xfffffffe имеет адрес 10.0.0.2?».
Для разрешения этой проблемы адресов предназначен протокол Next Hop Resolution Protocol (NHRP, аналог ARP для NBMA-сред), но мы на на первый раз сделаем работу за него.
3. Итак, сообщим вручную каждой станции, где искать соседей. Для этого выполним следующие команды:
(на 1.1.1.1)
Здесь каждая команда говорит: «соседняя станция с адресом сетевого уровня IP x.x.x.x имеет физический адрес (link layer address, lladdr) y.y.y.y, который доступен через устройство M». Если бы мы настраивали статический Ethernet (без ARP), вместо y.y.y.y стоял бы MAC-адрес соответствующей станции. (Кстати, если посмотреть ip neigh show dev ethN в работающей Ethernet-сети, мы увидим результаты работы ARP — динамически полученные адреса соседей).
На каждом узле нужно выполнить:
ip link set mgre0 up
Всё. На этом наш тоннель заработает: каждая из станций сможет пинговать любую другую. Если ядро собрано с поддержкой GRE multicast, то мы вообще получаем полнофункциональную «локалку» — в нашей виртуальной сети будут работать в полную силу протоколы динамической маршрутизации, типа RIP и OSPF!
Вот так это выглядит со второй станции (2.2.2.2):
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Источник
Простой Ethernet-туннель на Linux в четыре-шесть команд
Четыре команды на туннель и две на firewall (не нужны если трафик между своими серверми уже разрешен)
Это всё что нужно, дальше длинное объяснение с подробностями.
Когда требуется объединить несколько компьютеров в псевдолокальную сеть через интернет часто это решается настройкой OpenVPN.
Решение хорошо работает, но не лишено недостатков:
1. Нужно ставить дополнительный софт и его настраивать. Причем с первого раза настраивается он не очень просто — надо посидеть и поразбираться.
2. Шифрование трафика происходит в пользовательском режиме и вносит дополнительные задержки, это не всегда важно но для IP-телефонии может быть заметно.
3. Шифрование не всегда нужно. Например в моем случае все соединения и так защищенные (ssh), мне нужна просто удобная плоская адресация между несколькими компьютерами так как будто они объединены в локальную сеть.
В Linux GRE-туннели настраиваются до неприличия просто (если не нужно шифрование), из требований Linux и по публичному IP на каждый.
В интернете на эту тему информации как-то исчезающе мало — в основном объясняются IP (а не ethernet) туннели и сразу вкупе с шифрованием трафика (которое нужно не всегда). man ip тоже очень обширный и информацию по
Пусть у нас есть два хоста:
HOST1 с внешним адресом 1.2.3.4
HOST2 с внешним адресом 2.3.4.5
Хочется сделать между ними ethernet-сеть, ну и для примера поверх нее можно настроить IP-адреса 192.168.0.1 192.168.0.2, но можно и любые другие или IPv6 или что угодно еще — получится обычная сеть как через коммутатор.
Все команды выполняются от ROOT, после перезагрузки — теряются. Чтобы не терялись нужно прописать команды в скрипты автозагрузки или в конфиги (у каждого дистрибутива свои).
1. Добавить виртуальную сетевую карту-шлюз на HOST1:
На HOST1 он будет выглядеть как обычная сетевая карта — можно назначать IP-адреса, запускать DHCP-сервер, включать в Bridge и т.п.
2. Включить добавленную карту
2. Если запущен IP-tables — разрешаем GRE-трафик
3. Симметричная настройка на втором хосте:
В этот момент ethernet-сеть уже работает. Для проверки этого можно настроить приватные IP-адреса на каждой стороне туннеля и пустить пинги.
Для пингов возможно тоже придется добавить правила в iptables (или вообще выключить его на время экспериментов).
Туннель спокойно настраивается между разными версиями linux, пока писал этот пост один конец был на ubuntu, второй на centos, разницы в настройке нет абсолютно никакой.
Повторяю — это туннель не дает никакой защиты от прослушивания/внедрения трафика.
Источник
GRE Tunneling
Generic Routing Encapsulation (GRE) is a tunneling protocol that encapsulates network layer protocols inside virtual point-to-point links over an Internet Protocol network. The two endpoints are identified by the tunnel source and tunnel destination addresses at each endpoint.
GRE packets travel directly between the two endpoints through a virtual tunnel. As a packet comes across other routers, there is no interaction with its payload; the routers only parse the outer IP packet. When the packet reaches the endpoint of the GRE tunnel, the outer packet is de-encapsulated, the payload is parsed, then forwarded to its ultimate destination.
GRE uses multiple protocols over a single-protocol backbone and is less demanding than some of the alternative solutions, such as VPN. You can use GRE to transport protocols that the underlying network does not support, work around networks with limited hops, connect non-contiguous subnets, and allow VPNs across wide area networks.
- GRE tunneling is supported for switches with Spectrum ASICs only.
- Only static routes are supported as a destination for the tunnel interface.
- IPv6 endpoints are not supported.
The following example shows two sites that use IPv4 addresses. Using GRE tunneling, the two end points can encapsulate an IPv4 or IPv6 payload inside an IPv4 packet. The packet is routed based on the destination in the outer IPv4 header.
Configure GRE Tunneling
To configure GRE tunneling, you create a GRE tunnel interface with routes for tunneling on both endpoints as follows:
- Create a tunnel interface by specifying an interface name, the tunnel mode as gre , the source (local) and destination (remote) underlay IP address, and the ttl (optional).
- Bring the GRE tunnel interface up.
- Assign an IP address to the tunnel interface.
- Add route entries to encapsulate the packets using the tunnel interface.
The following configuration example shows the commands used to set up a bidirectional GRE tunnel between two endpoints: Tunnel-R1 and Tunnel-R2 . The local tunnel endpoint for Tunnel-R1 is 10.0.0.9 and the remote endpoint is 10.0.0.2. The local tunnel endpoint for Tunnel-R2 is 10.0.0.2 and the remote endpoint is 10.0.0.9.
Tunnel-R1 commands:
Tunnel-R2 commands:
To apply the GRE tunnel configuration automatically at reboot, instead of running the commands from the command line (as above), you can add the following commands directly in the /etc/network/interfaces file.
Verify GRE Tunnel Settings
To check GRE tunnel settings, run the ip tunnel show command or the ifquery —check command. For example:
Delete a GRE Tunnel Interface
To delete a GRE tunnel, remove the tunnel interface, and remove the routes configured with the tunnel interface, run the ip tunnel del command. For example:
You can delete a GRE tunnel directly from the /etc/network/interfaces file instead of using the ip tunnel del command. Make sure you run the ifreload — a command after you update the interfaces file.
This action is disruptive as the tunnel is removed, then recreated with the new settings.
Change GRE Tunnel Settings
Use the ip tunnel change command to make changes to the GRE tunnel settings. The following example changes the remote underlay IP address from the original setting to 11.0.0.4:
You can make changes to GRE tunnel settings directly in the /etc/network/interfaces file instead of using the ip tunnel change command. Make sure you run the ifreload — a command after you update the interfaces file.
Источник