0887 371 498 support@itservice-bg.net
28.06.2015 · Самуил Арсов · Cisco, Debian, MikroTik, openwrt, Рутери

GRE тунели: конфигурация в Cisco, MikroTik, Debian и OpenWrt

GRE (Generic Routing Encapsulation) вдига виртуална точка-до-точка връзка през чужда мрежа. През тунела минава не само обикновен IP трафик, а и multicast и рутинг протоколи — затова е удобен там, където гол IPsec не стига. По-долу са конфигурациите за четирите платформи, които се срещат най-често: Cisco, MikroTik, Debian/Linux и OpenWrt.

GRE не криптира. За чувствителен трафик добавете IPsec върху тунела или ползвайте WireGuard за свързване на офиси.

Cisco към MikroTik

Двете страни с адреси от една /30 мрежа, mtu 1476 и mss 1360 заради GRE хедъра, плюс статични маршрути към отсрещните LAN мрежи:

GRE тунел между Cisco и MikroTik — схема на свързването

Страната Cisco

interface Tunnel1
 description gre-tunnel1
 ip address 192.168.20.2 255.255.255.252
 ip mtu 1476
 ip tcp adjust-mss 1360
 tunnel source 93.155.169.2
 tunnel destination 93.155.169.251

ip route 192.168.122.0 255.255.255.0 192.168.20.1

Страната MikroTik

/interface gre
add mtu=1476 clamp-tcp-mss=yes name=gre-tunnel1 remote-address=93.155.169.2
/ip address
add address=192.168.20.1/30 interface=gre-tunnel1 network=192.168.20.0
/ip route
add distance=1 dst-address=192.168.10.0/24 gateway=192.168.20.2

Debian и други Linux дистрибуции

В Debian тунелът има удобен вариант за описване направо във файла /etc/network/interfaces. Тук трябва да се внимава — двете машини се конфигурират огледално. На първата машина:

auto tun0
iface tun0 inet static
       address 194.141.67.110
       netmask 255.255.255.252
       up ifconfig tun0 multicast
       pre-up iptunnel add tun0 mode gre remote 10.25.13.2 local 10.21.1.3 ttl 255
       pointopoint 194.141.67.109
       post-down iptunnel del tun0

А на втората машина:

auto tun0
iface tun0 inet static
       address 194.141.67.109
       netmask 255.255.255.252
       up ifconfig tun0 multicast
       pre-up iptunnel add tun0 mode gre remote 10.21.1.3 local 10.25.13.2 ttl 255
       pointopoint 194.141.67.110
       post-down iptunnel del tun0

Ако едната страна не е Debian или Debian-базирана, конфигурацията изглежда така. Това работи на всички Linux дистрибуции със зареден модул modprobe ip_gre:

ip tunnel add tun0 mode gre local 10.21.1.3 remote 10.25.13.2 ttl 255
ifconfig tun0 194.141.67.110 netmask 255.255.255.252

ip tunnel add tun0 mode gre local 10.25.13.2 remote 10.21.1.3 ttl 255
ifconfig tun0 194.141.67.109 netmask 255.255.255.252

OpenWrt

Достъп на GRE в защитната стена

С текстов редактор отваряме конфигурационния файл на защитната стена:

root@OpenWrt:~# vim /etc/config/firewall

Добавяме това правило под секцията forwarding, с идеята да е първото в защитната стена. С него разрешаваме достъп до GRE протокола от WAN към самия рутер:

config rule
        list proto 'gre'
        option name 'GRE'
        option target 'ACCEPT'
        option src 'wan'

За да влязат правилата в сила, рестартираме firewall:

/etc/init.d/firewall restart

Инсталиране на пакетите

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install gre kmod-gre
root@OpenWrt:~# reboot

Конфигуриране на тунела

Отваряме мрежовия конфигурационен файл на OpenWrt:

root@OpenWrt:~# vim /etc/config/network

Първата секция gre1 вдига GRE интерфейса и адреса за връзка с отдалечения хост, през който минава тунелът. Втората, gre1_static, е за вътрешния статичен адрес в тунела. Третата, tunnel, е маршрутът към мрежата зад отсрещния рутер:

config interface 'gre1'
        option ipaddr '93.155.130.38'
        option peeraddr '93.155.130.91'
        option proto 'gre'
        option mtu '1476'
        option ttl '255'

config interface 'gre1_static'
        option proto 'static'
        option ifname '@gre1'
        option ipaddr '192.168.111.2'
        option netmask '255.255.255.252'

config route 'tunnel'
        option interface 'gre1_static'
        option target '172.16.98.0'
        option netmask '255.255.255.0'
        option gateway '192.168.111.1'

Рестартираме мрежата, за да влязат правилата в сила:

root@OpenWrt:~# /etc/init.d/network restart

Проверка

OpenWrt GRE тунел — проверка от терминала

OpenWrt GRE тунел — състояние на интерфейса

MTU и MSS — където GRE най-често се чупи

GRE хедърът яде 24 байта от пакета. Ако MTU-то остане 1500, част от трафика минава, а друга — не: ping работи, а страници не се отварят. Затова навсякъде по-горе MTU е 1476, а TCP MSS се сваля до 1360.

В Linux, ако не искате да разчитате на фиксиран MSS, същото се постига динамично:

iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o tun0 -j TCPMSS --clamp-mss-to-pmtu

В MikroTik еквивалентът е clamp-tcp-mss=yes на самия GRE интерфейс, а в Cisco — ip tcp adjust-mss.

Същата задача на друга техника