Pereiti prie turinio
Networks

Tinklaraštis

GRE tuneliai IPv4: kada jų reikia ir kaip juos nustatyti

Paskutinį kartą atnaujinta RTM NetworksIšversta iš anglų kalbos. Skaityti originalą

Tunelis leidžia naudoti IPv4 adresus serveryje, kuris kitaip negalėtų jų nešti. Bloką skelbia tinklas, galintis jį skelbti, o tunelis jo srautą neša į Jūsų serverį ir atgal. Tai sprendimas, kai Jūsų teikėjas nesiūlo BYOIP (bring your own IP), kai neturite AS numerio arba kai Jums reikia mažiau nei 256 adresų, kuriuos internetas maršrutizuotų atskirai.

Ką tunelis iš tikrųjų daro

Jūsų bloko paketai atkeliauja į jį skelbiantį tinklą. Ten kiekvienas paketas įvyniojamas į naują, adresuotą Jūsų serveriui, ir siunčiamas per įprastą internetą. Jūsų serveris jį išvynioja ir mato pradinį paketą, lyg adresai būtų sukonfigūruoti vietinėje sąsajoje.

Text
Original packet:  [IP header | data]
GRE packet:       [outer IP | GRE header | IP header | data]

Atsakymai keliauja tuo pačiu keliu atgal: Jūsų serveris juos įvynioja, siunčia į tunelio kitą galą, o tas tinklas juos pristato. Šis grįžimo kelias yra žingsnis, kurį dauguma konfigūracijų padaro neteisingai, ir toliau pateikta konfigūracija parodo kodėl.

Kada tunelis geresnis už BYOIP

BYOIP leidžia debesijos ar prieglobos teikėjui skelbti Jūsų bloką iš savo tinklo (kurie teikėjai tai daro). Kai tai įmanoma ir turite bent /24, tai švaresnis variantas: jokio papildomo šuolio, jokio papildomo gedimo taško ir visas teikėjo pralaidumas. Tunelis geresnis keturiais atvejais.

  • Jūsų teikėjas nesiūlo BYOIP. Pavyzdžiui, Scaleway tai aiškiai nurodo savo dokumentacijoje, o keli kiti tai priima tik pagal užklausą, kai kuriems savo produktams, pavyzdžiui, Infomaniak, TransIP ir UpCloud. Kiti, tarp jų Contabo, Exoscale, Hostinger ir Akamai Cloud, jokios procedūros neskelbia.
  • Jums reikia mažiau nei 256 adresų. /24 yra mažiausias blokas, kurį tinklai priima į savo maršrutų lenteles, ir jokio teikėjo BYOIP nesiekia žemiau. Tunelis gali pristatyti /29 arba pavienį adresą.
  • Neturite ASN, o teikėjas jo nori. Kai kurie teikėjai Jūsų erdvę priima tik per BGP sesiją su Jūsų AS numeriu. Tuneliui nereikia nė vieno.
  • Norite tų pačių adresų keliose vietose arba laisvės persikelti. Paskelbimas lieka ten, kur yra; tunelis keliauja ten, kur keliauja Jūsų serveris.

Kaina yra lankstas. Srautas prieš pasiekdamas Jus keliauja iki tunelio kito galo, todėl rinkitės galinį tašką arti savo serverio ir atminkite, kad lubas nustato tunelio pralaidumas, o ne Jūsų serverio prievadas.

GRE ar WireGuard

Abu neša tą patį srautą; jie skiriasi tuo, ko reikia keliui tarp dviejų galų.

GREWireGuard
ŠifravimasNėraYra
Papildomi baitai per IPv424 baitai60 baitų
Už NAT ar CGNATPatikimai neveikiaVeikia
PalaikymasDauguma maršrutizatorių ir Linux branduolysLinux branduolys, FreeBSD, OpenBSD, MikroTik RouterOS 7, OpenWrt ir EdgeOS; prieš juo pasikliaudami operatoriaus klasės maršrutizatoriuje, patikrinkite gamintojo dokumentaciją
Geriausia, kaiKelias patikimas, o pralaidumas svarbiausiasSrautas kerta tinklus, kurių nevaldote, arba galinis taškas neturi viešojo adreso

Paties WireGuard platformų sąrašas ir MikroTik RouterOS dokumentacija nurodo, kur jis veikia (patikrinta 2026 m. spalio 22 d.).

Jei Jūsų galinis taškas yra už NAT, pasirinkimas padarytas už Jus: WireGuard. Tas pats galioja Azure, kuris savo virtualiuose tinkluose blokuoja GRE.

MTU ir MSS: klasikinė klaida

Inkapsuliacija prideda antraštes, todėl didžiausias į tunelį telpantis paketas mažesnis nei paprastos Ethernet jungties 1 500 baitų: 1 476 baitai GRE per IPv4, o WireGuard dažnai veikia su 1 420. Suklydę matote klasikinį simptomą: mažos užklausos veikia, o dideli atsisiuntimai ir TLS pasisveikinimai pakimba, nes netelpantys paketai atmetami, o pranešimai, kurie turėtų apie tai pranešti, pakeliui dažnai filtruojami.

Tam užkerta kelią du nustatymai. Nustatykite tinkamą tunelio sąsajos MTU ir apribokite TCP didžiausią segmento dydį (MSS) per tunelį maršrutizuojamam srautui, kad abu galai sutartų siųsti telpančius paketus. Abi reikšmes atsiunčiame su kiekvienu tuneliu ir pakeičiame paprašius.

Minimali Linux konfigūracija

Toliau pateiktas pavyzdys per GRE atneša bloką į vieną Linux serverį. Adresai yra dokumentacijos diapazonai: 203.0.113.1 yra Jūsų serverio viešasis adresas, 198.51.100.1 tunelio kitas galas, o 192.0.2.0/24 blokas.

Shell
# 1. The tunnel, from your server to the far end
ip tunnel add gre1 mode gre local 203.0.113.1 remote 198.51.100.1 ttl 255
ip link set gre1 mtu 1476 up
ip addr add 10.0.0.2/30 dev gre1

# 2. An address from the block on the server itself
ip addr add 192.0.2.10/32 dev lo

# 3. Replies from the block go back through the tunnel
ip rule add from 192.0.2.0/24 lookup 100
ip route add default via 10.0.0.1 dev gre1 table 100

3 žingsnį žmonės praleidžia. Be jo atsakymai iš 192.0.2.10 išeina per Jūsų teikėjo nuosavą jungtį su šaltinio adresu, kurio tas teikėjas Jums niekada nedavė, ir jo apsaugos nuo klastojimo filtrai juos atmeta. Jei Jūsų distribucija įjungia griežtą atvirkštinio kelio filtravimą, tuneliui nustatykite jį laisvą (sysctl -w net.ipv4.conf.gre1.rp_filter=2).

Jei serveris bloką maršrutizuoja toliau į virtualias mašinas ar konteinerius, apribokite MSS jo persiunčiamam srautui:

Shell
iptables -t mangle -A FORWARD -o gre1 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

BGP per tunelį

Jei turite savo AS numerį ir norite paskelbimą valdyti patys, vietoj statinio maršruto per tunelį galite vykdyti BGP sesiją su BIRD, FRR ar savo maršrutizatoriaus procesu. Daugumai klientų to nereikia, ir jie renkasi statinę konfigūraciją. Jei skelbiate iš savo ASN, ROA turi nurodyti tą ASN (RPKI ir ROA).

Kur čia RTM Networks

Bloką skelbiame ir pristatome į Jūsų serverį per GRE ar WireGuard, kad ir kur būtų serveris. Tai veikia ten, kur BYOIP neveikia, įskaitant mažiau nei 256 adresų ir teikėjus, kurie Jūsų erdvės visai nepriima. Nurodykite, kur yra serveris ir kas jame veikia, ir rekomenduosime GRE ar WireGuard bei atsiųsime konfigūraciją su tinkamomis MTU ir MSS reikšmėmis (GRE ir WireGuard tuneliai).

Kontaktai

Reikia patarimo dėl Jūsų situacijos?

Šis straipsnis bendro pobūdžio; Jūsų tinklas ne. Nurodykite, su kuo dirbate, ir tinkamai tai išnagrinėsime. Paprastai atsakome per 1–3 darbo valandas.

Susisiekite su mumis