Tinklaraštis
GRE tuneliai IPv4: kada jų reikia ir kaip juos nustatyti
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.
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ų.
| GRE | WireGuard | |
|---|---|---|
| Šifravimas | Nėra | Yra |
| Papildomi baitai per IPv4 | 24 baitai | 60 baitų |
| Už NAT ar CGNAT | Patikimai neveikia | Veikia |
| Palaikymas | Dauguma maršrutizatorių ir Linux branduolys | Linux branduolys, FreeBSD, OpenBSD, MikroTik RouterOS 7, OpenWrt ir EdgeOS; prieš juo pasikliaudami operatoriaus klasės maršrutizatoriuje, patikrinkite gamintojo dokumentaciją |
| Geriausia, kai | Kelias patikimas, o pralaidumas svarbiausias | Srautas 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.
# 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 1003 ž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:
iptables -t mangle -A FORWARD -o gre1 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuBGP 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.



