Maršrutas į VPN tinklą neša du adresus, kuriuos lengva supainioti: paskirties prefiksą, kurį paketas bando pasiekti, ir kitą šuolį, kuris jį pastūmės vienu žingsniu arčiau. LAN mazge tas kitas šuolis turi būti maršrutizatorius, kurį tikrai galite pasiekti toje pačioje jungtyje. Nuotolinis VPN adresas nėra kitas šuolis, kad ir kaip tvarkingai jis atitiktų paskirtį, kurią turite omenyje.

Šis vadovas apima įprastą atvejį: nešiojamasis kompiuteris adresu 192.168.20.0/24, VPN šliuzas su LAN adresu 192.168.20.5 ir nuotolinis tinklas 10.70.0.0/24 už to šliuzo. Visos žemiau pateiktos komandos daro prielaidą, kad esate nešiojamajame kompiuteryje, jei nenurodyta kitaip.

Du adresai, vienas maršrutas

Numatytas įrašas yra 10.70.0.0/24 via 192.168.20.5. Prefiksas nurodo, kur paketas eina; via adresas nurodo, kas jį ten neša. Branduolys atsisako įdiegti maršrutą, kurio šliuzo negali pasiekti per jūsų nurodytą sąsają, ir tas atsisakymas yra visa esmė: kitas šuolis, kuriam pasiekiamumui reikia tunelio, negali būti tas kitas šuolis, kuris stato tunelį.

Taigi pirmoji patikra nėra «ar šliuzas veikia», o «ar šliuzas yra šioje jungtyje». Nešiojamojo kompiuterio tinklas, jo ARP ar kaimyno įrašas ir maršrute esanti sąsaja turi sutapti. Adresas, egzistuojantis tik 10.70.0.0/24 viduje, gali būti antrojo maršruto paskirtis, bet niekada ne pirmojo via.

Ką kitas šuolis įpareigoja šliuzą

Maršruto įdiegimas nešiojamajame kompiuteryje nusprendžia tik pirmąjį perdavimą. Tada šliuzui reikia savo kelio: įjungtas persiuntimas, tunelio maršrutas į 10.70.0.0/24 ir bet kokia prieigos politika, nustatanti, kas gali jį naudoti. Linux atveju tai net.ipv4.ip_forward=1 ir tunelio maršrutas; prieš jį esančiai užkardai reikia taisyklės, leidžiančios persiunčiamą srautą.

Grįžtamoji kryptis yra ta dalis, kurią žmonės pamiršta. Nuotolinė pusė turi turėti maršrutą atgal į 192.168.20.0/24, arba projektas turi išversti nešiojamojo kompiuterio šaltinį į kažką, ką nuotolinė pusė pažįsta. Veikiantis ping iš šliuzo įrodo, kad šliuzas pasiekia nuotolinį tinklą; jis nieko nesako apie tai, ar nešiojamojo kompiuterio paketai išgyvens kelią atgal.

Patikrinkite paiešką iš mazgo, kuris siunčia

Paklauskite branduolio, kurį kitą šuolį jis pasirinktų, ir perskaitykite atsakyme esančią sąsają:

ip route get 10.70.0.10
ip route show 10.70.0.0/24
ip neigh show 192.168.20.5

Jei paieška praneša apie šliuzą ir LAN sąsają, pirmoji atkarpa sukonfigūruota taip, kaip numatyta. Jei ji praneša apie tunelio įrenginį, kažkas ankstesnio lentelėje yra konkretesnis ir laimi. Jei maršrutas visai neįdiegiamas, branduolys jums sako, kad šliuzas nepasiekiamas, ir ta žinutė naudingesnė už bet kokį paketų fiksavimą.

Tada pakartokite bandymą iš tinkamos vietos. Užklausa, sukurta šliuze, naudoja paties šliuzo šaltinio adresą, o tai gali paslėpti trūkstamą grįžtamąjį maršrutą ar politiką, leidžiančią tik tam tikrus šaltinius. ip-route vadovas atskiria paskirtį, šliuzą ir onlink perrašą, ir perrašą verta suprasti prieš jį naudojant.

Nenaudokite onlink pasiekiamumui imituoti

onlink liepia branduoliui praleisti šliuzo pasiekiamumo patikrą ir vis tiek siųsti į jį. Jis nesukuria kelio, neišsprendžia ARP adresui, kurio nėra, ir nepriverčia nuotolinio maršrutizatoriaus atsakyti jūsų Ethernet segmente. Jis teisėtas šliuzams, kurie atsako, bet nėra prijungtame tinkle, ir tai spąstai, kai naudojamas nutildyti klaidą, kurios nepaaiškinote.

Jei maršrutas įdiegiamas tik su onlink, kitas klausimas yra kodėl šliuzas yra ne ten, kur manote. Netinkamas VLAN, antras adresas netinkamoje sąsajoje ar rašybos klaida paskutiniame oktete visa tai sukelia, ir kiekvienas jų taip pat sugadina kelią atgal, kai tik srautas pradeda tekėti.

Taškas-taškas tuneliai nėra Ethernet

Tunelio įrenginys neatlieka ARP ir dažnai neturi prasmingo kaimynų tinklo. Jo maršrutai dažnai atrodo kaip 10.70.0.0/24 dev tun0, visai be via, nes partneris yra vienintelis kitas galinis taškas. via LAN stiliumi nukopijavimas į tą lentelę sukuria maršrutą, kurį branduolys gali atmesti arba, dar blogiau, tokį, kuris nurodo adresą, į kurį partneris niekada neatsako.

Vadove laikykite du modelius atskirai: LAN maršrutas turi pasiekiamą šliuzą, tunelio maršrutas turi sąsają ir partnerį. WireGuard, OpenVPN ir IPsec visi rodo šiek tiek skirtingas formas, todėl užrašykite formą, kurią tikrai naudojote, o ne apibendrinkite iš vieno mazgo.

Pridėkite, patvirtinkite, atsukite atgal

Visas pakeitimas yra trys komandos ir viena patikra, ir jis turėtų būti užrašytas būtent ta tvarka:

sudo ip route add 10.70.0.0/24 via 192.168.20.5
ip route get 10.70.0.10
ping -c 3 10.70.0.10
sudo ip route del 10.70.0.0/24 via 192.168.20.5

Patvirtinkite kelią, patvirtinkite vieną paskirtį, tada laikykite trynimo eilutę paruoštą, jei pakeitimas padarytų mazgą nepasiekiamą taip, ko nenumatėte. Jei maršrutas turi išgyventi perkrovimą, įdėkite jį į mazgo tinklo konfigūraciją, o ne į shell profilį, ir išbandykite perkrovimą prieš juo pasikliaudami. Maršrutas, egzistuojantis tik toje shell, kuri jį pridėjo, yra maršrutas, kurį derinsite du kartus.

Susiję straipsniai