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 мрежи:

Страната 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
Проверка


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.