Obsah

GRE tunel

GRE propojí dvě zařízení tunelem přes IPv4. Hodí se například pro směrování privátní sítě mezi dvěma VPS v důvěryhodné interní síti vpsFree. Níže je jednoduchý tunel mezi těmito ukázkovými adresami:

VPS A VPS B
vnější adresa VPS 185.8.164.10/32 185.8.164.20/32
adresa uvnitř tunelu 10.0.0.1 10.0.0.2

Vnější adresy jsou příklady z playground rozsahu vpsFree. Nahraď je adresami /32, které máš skutečně přidělené ke svým VPS. Privátní adresy tunelu můžeš ponechat, pokud se nekříží s jinou sítí, kterou používáš.

Než začneš

GRE používá IP protokol 47, nikoliv TCP nebo UDP port 47. Pokud na VPS filtruješ provoz, povol protokol 47 z vnější adresy druhého konce.

Tento postup používej jen přes důvěryhodnou interní síť vpsFree, kde je vynuceno vlastnictví zdrojových adres. Samotné GRE provoz nešifruje ani neověřuje protistranu, proto jej neposílej přes veřejný internet. Pro spojení přes veřejný internet použij WireGuard.

Okamžité nastavení

Na VPS A spusť:

#!/usr/bin/env bash
set -eu
 
ip tunnel add gre1 mode gre \
  local 185.8.164.10 remote 185.8.164.20 ttl 255
ip address add 10.0.0.1/30 dev gre1
ip link set dev gre1 mtu 1476 up

Na VPS B spusť:

#!/usr/bin/env bash
set -eu
 
ip tunnel add gre1 mode gre \
  local 185.8.164.20 remote 185.8.164.10 ttl 255
ip address add 10.0.0.2/30 dev gre1
ip link set dev gre1 mtu 1476 up

Spojení ověř z obou stran:

#!/usr/bin/env bash
# Na VPS A
ping -c 3 10.0.0.2
#!/usr/bin/env bash
# Na VPS B
ping -c 3 10.0.0.1

Tyto příkazy platí jen do restartu. Rozhraní můžeš odstranit příkazem ip tunnel del gre1. Další volby popisuje manuál ip-tunnel(8).

Trvalé nastavení v Debianu

Výchozí šablona Debianu používá ifupdown. Na VPS A ulož do /etc/network/interfaces.d/gre1 tuto konfiguraci:

auto gre1
iface gre1 inet tunnel
  mode gre
  address 10.0.0.1
  netmask 255.255.255.252
  dstaddr 10.0.0.2
  local 185.8.164.10
  endpoint 185.8.164.20
  ttl 255
  mtu 1476

Na VPS B použij:

auto gre1
iface gre1 inet tunnel
  mode gre
  address 10.0.0.2
  netmask 255.255.255.252
  dstaddr 10.0.0.1
  local 185.8.164.20
  endpoint 185.8.164.10
  ttl 255
  mtu 1476

address a dstaddr jsou adresy uvnitř tunelu. local a endpoint jsou naopak jeho vnější konce. Na obou VPS pak rozhraní aktivuj:

ifup gre1

Podporované volby najdeš v manuálu interfaces(5).

Jiné správce sítě

Pokud tvoje distribuce nepoužívá ifupdown, vytvoř stejný GRE tunel správcem sítě dané distribuce. Aktuální volby popisuje dokumentace NetworkManageru a systemd-networkd.

MTU a řešení problémů

Základní GRE přes IPv4 přidává režii, proto příklad používá MTU 1476 místo běžných 1500 bajtů. Pokud má vnější cesta nižší MTU nebo se větší přenosy zasekávají, MTU na obou koncích dál sniž.

Když tunel nefunguje, ověř vnější adresy příkazem ip address, povolení IP protokolu 47 ve firewallu a stav příkazem ip -details tunnel show gre1. Pak zkontroluj, že se local na každé straně rovná její vnější adrese a remote nebo endpoint vnější adrese protistrany.