Настройка gre туннеля linux

Настройка 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):

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Настройка gre туннеля 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.

Читайте также:  Запускать android os windows

Различия между туннель 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 роутере

Изначальные данные : имеется 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

Командой в первой строке создается туннель и режиме 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

Чтобы удалить туннель на роутере A нужно выполнить:

Источник

Настройка проксирования внешнего адреса через GRE туннель между Linux серверами

Привет, друзья!
Я имею два сервера, сервер А и сервер Б, оба на Debian Wheezy. На сервер А зароучено определенное количество внешних IP-адресов, а на сервер Б — один, и то он стоит за натом. И возникла у меня на днях весьма нетривиальная задача — понадобилось пробросить один из IP-адресов сервера А на сервер Б, да так, чтобы реальные IP посетителей при проксировании сохранялись, и была возможность управлять трафиком, который будет поступать на сервер Б. NAT и ip-ip отпал сам собой из-за второго условия, да и они далеко не самые производительные. И я решил смотреть в сторону GRE туннеля.
Под катом настройка и тестирования GRE-туннеля, а также проксирование внешнего IP-адреса через GRE-туннель на другой сервер.

Читайте также:  Kaspersky для linux установка агента

Для начала нам нужно загрузить модуль gre на обоих серверах перед выполнением операций, поскольку это автоматически не происходит. Мы укажем это в конфигах, так что при последующих активациях интерфейса туннеля он будет подгружаться автоматически, а пока давайте подргузим его сами:
modprobe ip_gre

Далее в /etc/network/interfaces сервера А прописываем следующее:

auto tun0
iface tun0 inet static
address 10.10.10.1
netmask 255.255.255.0
pointopoint $ip_to_proxy
pre-up modprobe ip_gre
pre-up ip tunnel add tun0 mode gre local $server1_ip remote $server2_ip ttl 255 dev $dev
up ifconfig tun0 multicast
up arp -sD $ip_to_proxy $dev pub
post-down ip tunnel del tun0

А теперь я объясню, что значит каждая строчка.
auto tun0 — интерфейс будет подниматься автоматически при запуске сети. Интерфейс можно назвать как угодно, не обязательно tun0, но главное, чтобы таких же имен в системе не было.
iface tun0 inet static — интерфейс туннеля у нас будет иметь статический IP-адрес.
address 10.10.10.1 — это адрес сервера А внутри туннеля. Из сервера Б он будет доступен по команде ping именно по этому адресу.
netmask 255.255.255.0 — маска подсети.
pointopoint $ip_to_proxy — вместо $ip_to_proxy подставьте IP-адрес, который вы собираетесь пробросить на сервер Б. Нужно, чтобы такой адрес никто не слушал и он нигде не был прописан.
pre-up modprobe ip_gre — загружать модуль туннеля ip_gre автоматически перед поднятием интерфейса.
pre-up ip tunnel add tun0 mode gre local $server1_ip remote $server2_ip ttl 255 dev $dev — вместо $server1_ip подставьте существующий публичный IP-адрес сервера А, который имеет интерфейс $dev. $dev — соответственно основной интерфейс, который будет использоваться GRE. Обычно это eth0. $server2_ip — внешний адрес сервера Б (неважно, что он за натом и имеет в действительности серый адрес, это будет учтено в конфигурации для сервера Б).
up ifconfig tun0 multicast — интерфейс у нас многоадресный, поэтому нам нужно включить для него мультикаст.
up arp -sD $ip_to_proxy $dev pub — этим трюком мы обойдем необходимость проксирования ARP (net.ipv4.neigh.$dev.proxy_arp = 1 в sysctl.conf), так как мы оперируем лишь с одним адресом. Да это и неважно, но при включении proxy_arp на все интерфейсы вашего сервера будет литься промежуточный трафик от роутера, что очень нехорошо, ибо он достигает внушительных размеров. Чтобы избавиться от такого «побочного эффекта», мы и воспользуемся этой командой. Значения переменных $ip_to_proxy и $dev смотрите выше.
post-down ip tunnel del tun0 — при отключении сети удалить информацию о созданном туннеле (которую можно просмотреть при помощи команды ip tunnel).

В /etc/sysctl.conf сервера А также включаем IP Forwarding, прописав в файле net.ipv4.ip_forward = 1 , сохранив его и применив обновленное значение командой sysctl -p.

На этом мы закончили с сервером А, осталось только поднять интерфейс туннеля, что мы сделаем после аналогичных настроек на сервере Б.

Внизу файла /etc/iproute2/rt_tables дописываем 200 tun0 , сохраняем файл.
В /etc/network/interfaces сервера Б прописываем следующее:

auto tun0
iface tun0 inet static
address $ip_to_proxy
netmask 255.255.255.0
pointopoint 10.10.10.1
pre-up modprobe ip_gre
pre-up iptunnel add tun0 mode gre local $server2_ip remote $server1_ip ttl 255 dev $dev
up ifconfig tun0 multicast
post-up ip ru add from $ip_to_proxy lookup tun0 priority 32765
post-up ip ro add default via 10.10.10.1 dev tun0 src $ip_to_proxy table tun0
pre-down ip ro del default via 10.10.10.1 dev tun0 src $ip_to_proxy table tun0
pre-down ip ru del from $ip_to_proxy lookup tun0 priority 32765
post-down iptunnel del tun0

Читайте также:  Как узнать сколько памяти занято линукс

Я расскажу только про отличия данных от сервера А.
address $ip_to_proxy — вместо $ip_to_proxy подставляем IP адрес, который нам будет проксировать сервер А.
pre-up iptunnel add tun0 mode gre local $server2_ip remote $server1_ip ttl 255 dev $dev — отличий нет, замечу только, что в качестве $server2_ip можно указать и серый IP адрес. Обратите внимание, что если сервер за натом, и вы укажете адрес ната, а не реальный серый, то туннель работать не будет! Убедитесь, что IP, который вы сюда подставите, прибит к внешнему интерфейсу $dev (обычно eth0).
post-up ip ru add from $ip_to_proxy lookup tun0 priority 32765 — после поднятия интерфейса мы создадим правило маршрутизации для пакетов, приходящих с IP адреса, который нам будет отдавать сервер А. Правило будет иметь название tun0 и корректность его создания вы сможете проверить командой ip rule show.
post-up ip ro add default via 10.10.10.1 dev tun0 src $ip_to_proxy table tun0 — завернуть трафик для нашего туннеля внутрь вышесозданного правила маршрутизации. 10.10.10.1 — это IP адрес сервера А внутри туннеля.
Следующие два правила удалят сначало правило для заворота трафика, а затем и правило маршрутизации после того, как сеть будет отключена.

Вот и все! Теперь выполняем команду ifup tun0 на сервере А и сервере Б. Если все сделано правильно, то сервер А будет пинговаться из сервера Б по адресу 10.10.10.1, а команда traceroute $ip_to_proxy покажет, что трафик проходит через $server1_ip.

Источник

Настройка 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 серверов в фаерволе

Источник

Оцените статью