Организация GRE-туннеля в RHEL/CentOS

()

Протокол GRE создавался компанией Cisco Systems для организации сетевых тунелей. И хотя в настоящее время GRE теряет актуальность, так как не поддерживает шифрование и не работает через NAT, в случае необходимости быстрой организации туннеля между двумя локальными сетями именно GRE будет в числе самых простых вариантов.

Ранее уже описывалась организация GRE-туннеля на машинах под управлением Debian/Ubuntu. Сейчас будет рассмотрено решение той же самой задачи, но уже на серверах под управлением RHEL/CentOS.

Допустим что в обоих офисах стоит шлюз под управлением CentOS. На кажом сервере по две сетевые карты:

  • eth0: Смотрит в интернет. В центральном офисе адрес 1.1.1.1, в филиале - 1.1.2.2;
  • eth1: Смотрит в локальную сеть офиса. В центральном офисе: 192.168.101.1/24, в филиале - 192.168.102.1/24.

На обоих серверах будет создан интерфейс tun0. В центральном офисе он будет иметь адрес 172.17.254.1 а в филиале - 172.17.254.2. Для этого на сервере головного офиса создадим файл "/etc/sysconfig/network-scripts/ifcfg-tun0" следующего содержания:

DEVICE=tun0
BOOTPROTO=none
ONBOOT=no
TYPE=GRE

# Адрес сервера
MY_OUTER_IPADDR=1.1.1.1
# Адрес сервера внутри GRE-туннеля
MY_INNER_IPADDR=172.17.254.1

# Адрес пира (удалённой точки)
PEER_OUTER_IPADDR=1.1.2.2
# Адрес пира (удалённой точки) внутри туннеля
PEER_INNER_IPADDR=172.17.254.2

На сервере филиала нужно создать такой же файл, но его содержание будет немного отличаться:

DEVICE=tun0
BOOTPROTO=none
ONBOOT=no
TYPE=GRE

# Адрес сервера
MY_OUTER_IPADDR=1.1.2.2
# Адрес сервера внутри GRE-туннеля
MY_INNER_IPADDR=172.17.254.2

# Адрес пира (удалённой точки)
PEER_OUTER_IPADDR=1.1.1.1
# Адрес пира (удалённой точки) внутри туннеля
PEER_INNER_IPADDR=172.17.254.1

Так же на обоих серверах создадим файл "/etc/sysconfig/network-scripts/route-tun0". На сервере центрального офиса он будет иметь вид:

192.168.102.1/24 via 172.17.254.2 dev tun0

А на сервере филиала:

192.168.101.1/24 via 172.17.254.1 dev tun0

И наконец на обеих машинах поднимаем интерфейс командой:

ifup tun0

Проверить что интерфейс поднялся можно командой:

ifconfig tun0

Вывод будет примерно таким:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-6E-6F-82-E2-00-00-00-00-00-00-00-00  
          inet addr:172.17.254.1  P-t-P:172.17.254.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
          RX packets:26842 errors:0 dropped:0 overruns:0 frame:0
          TX packets:41855 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2229279 (2.1 MiB)  TX bytes:52864575 (50.4 MiB)
          

Ну а проверить работоспособность соединения можно банальной командой ping. Остаётся лишь дополнить набор правил iptables чтобы разрешить обмен трафиком и работа завершена.

На этом всё. Приятной работы!

Ключевые слова: gre, gre-туннель, iptables, vpn, rhel, centos.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2013-09-29 17:05:39 (#)

Настроил данный тоннель между двумя CentOS 6.4 всё работает, кроме traceroute. Делаю traceroute ya.ru вижу только последний ya.ru, а хосты до этого в звёздочках.
На обоих концах в iptables прописал.
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -p icmp --icmp-type any -j ACCEPT
Второй день бьюсь. Что можно сделать чтобы заработал traceroute?

MooSE 2013-10-01 00:54:18 (#)

Настроил данный тоннель между двумя CentOS 6.4 всё работает, кроме traceroute. Делаю traceroute ya.ru вижу только последний ya.ru, а хосты до этого в звёздочках.
На обоих концах в iptables прописал.
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -p icmp --icmp-type any -j ACCEPT
Второй день бьюсь. Что можно сделать чтобы заработал traceroute?


Никогда не заморачивался. Даже не знаю что посоветовать.

Anonymous 2014-04-28 12:08:19 (#)

Настроил данный тоннель между двумя CentOS 6.4 всё работает, кроме traceroute. Делаю traceroute ya.ru вижу только последний ya.ru, а хосты до этого в звёздочках.
На обоих концах в iptables прописал.
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -p icmp --icmp-type any -j ACCEPT
Второй день бьюсь. Что можно сделать чтобы заработал traceroute?

Посмотрите в сторону MTU это скорей всего оно.
Спасибо за статью!

Anonymous 2018-07-12 13:09:47 (#)

После создания файлов интерфейсов вот что происходит?

# ip link set wccp0 up
Cannot find device "wccp0"

# ifup wccp0
Error: either "name" is duplicate, or " " is a garbage.
Cannot find device "wccp0"
Cannot find device "wccp0"
Device "wccp0" does not exist.

Не работает по такому руководству.

MooSE 2018-07-12 17:39:47 (#)

Не работает по такому руководству.
В тексте выше нет ничего похожего на то что вы пишите. Вы уверены что написали туда, куда хотели?:)

Anonymous 2018-07-13 15:54:58 (#)

>> В тексте выше нет ничего похожего на то что вы пишите. Вы уверены что написали туда, куда хотели?:)

Безусловно. Пытаюсь "подружить" сервер Squid и Cisco ASA по WCCP. Пытаюсь понять, где я ошибаюсь в создании туннеля на CentOS (WCCP добавляет заголовок GRE к IP-пакету). Сам сервер установлен на ESXi, есть интерфейс ens32 с адресом 172.31.4.64/24. Адрес интерфейса ASA - 172.31.0.4/24. Создаю файл ifcfg-wccp0, описываю параметры, но такого интерфейса, естественно, нет. С помощью команды ip tunnel его можно создать, а потом запустить, но не работает...

MooSE 2018-07-15 00:20:32 (#)

А что в файле ifcfg-wccp0? И почему wccp0? Чем плох tun0?

Anonymous 2018-07-16 12:59:25 (#)

Я тут писал вопрос:
https://toster.ru/q/544794

Не могу понять, есть ли разница в названии файла, wccp0 или tun0? Это как-то в системе различается?

MooSE 2018-07-16 21:47:27 (#)

Вы странный человек. Вам ведь надо, а проверить/узнать не хотите:) Это раз. Два: разницы между tun0 и wccp0 нет никакой если правильно описывать конфигурацию.

Но сходив по ссылке я обнаружил что вы написали её не правильно. В ifcfg-* скриптах параметр DEVICE все описывает имя настраиваемого интерфейса. Грубо говоря внутри ifcfg-wccp0 должно быть DEVICE=wccp0, а не DEVICE=ens32. Кроме того вы не указали TYPE, что важно.

В моём тексте в примерах конфигов всё это указано.

Anonymous 2018-07-17 11:07:24 (#)

Так я уже как только не делал. Вот, нашёл Вашу статью и попытался, как у Вас. Непонятно, нужно ли вообще создавать файлы интерфейсов? В некоторых мануалах описывают всё через настройку через утилиту ip...
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности