Ühendad end kontori VPN-iga, salve ikoon muutub roheliseks, sisevõrk laeb ja kahe meetri kaugusel olev printer lakkab vastamast. Jagatud kaust, mis hommikul töötas, läheb samas masinas aeguma, ja ükski logi ei maini printerit. Refleks on DNS, sest nimi, mis ei lahene, näeb välja nagu nimi, mida pole olemas, aga probleem on aadressis: kaks adapterit nõuavad nüüd 192.168.1.0/24 ja ainult üks marsruut saab selle prefiksi võita. Käi see selles järjekorras läbi ja näed, milline adapter selle võttis, enne kui midagi muudad.

Alusta sümptomist, mitte tunnelist

Vihje on ulatus. Kui sisevõrk töötab ja iga kohalik seade ei tööta, on tunnel terve ja kohalik tee mitte. Kui kohalikud seadmed töötavad ja sisevõrk ei tööta, siis vastupidi. Kui kõik töötab peale ühe hosti, vaatad sa üht aadressi, mis eksisteerib mõlemal pool.

Kirjuta üles üks kohalik ja üks kaugem aadress, enne kui seadet puudutad. „Printer“ ei ole testitav; 192.168.1.40 on. See üks samm hoiab ära selle probleemi kõige tavalisema raisatud tunni, milleks on DNS-i seadete ümberkirjutamine marsruudiotuse tõttu.

Samm 1: näe mõlemat adapterit prefiksit nõudmas

Ava Võrguühendused (ncpa.cpl) ja loe kahte adapterit kõrvuti. Etherneti adapter näitab 192.168.1.50/24 lüüsiga 192.168.1.1. VPN-i adapter näitab 192.168.1.201/24, mille server saatis. Mõlemad on õiguspärased, mõlemad usuvad, et prefiks on on-link, ja pinu hoiab selle jaoks ühte marsruuti.

Get-NetIPAddress -AddressFamily IPv4 loetleb aadressid ja Get-NetIPInterface | Sort-Object InterfaceMetric näitab järjekorda, milles pinu neid kasutab. See mõõdikuveerg on otsus, mida sa just loed, seega pane numbrid kirja, mitte ära ürita neid meeles pidada.

Tõesta DNS-i teooria odavalt vale: Resolve-DnsName printer.office.lan tagastab sama aadressi nagu eile. Nimi lahenes; pakett lahkus siis vale adapteri kaudu. Kaks minutit siin säästab pärastlõuna resolveri seadetes.

Samm 2: loe marsruut, mis tegelikult võitis

Find-NetRoute -RemoteIPAddress 192.168.1.40 trükib liidese, järgmise hüppe ja allika, mida pinu selle aadressi jaoks kasutaks. Käsitle seda väljundit vastuse, mitte vihjena. route print -4 annab terve tabeli, kui tahad näha, milline kirje kaotas ja kui palju.

Spetsiifilisus võidab kavatsuse. Saadetud 192.168.0.0/25 võidab kohaliku 192.168.0.0/24, sest prefiks on pikem, seega 192.168.0.0 kuni 192.168.0.127 väljuvad tunneli kaudu, samal ajal kui ülemine pool jääb kohalikuks. See, et pool LAN-i kaob ilma veateateta, on selle tabeli jaoks õige käitumine.

tracert -d 192.168.1.40 kinnitab seda väljastpoolt tabelit: kui esimene hüpe on tunneli aadress, mitte sinu enda ruuter, on marsruut kogu lugu. Linuxis on sama küsimus ip route get 192.168.1.40, mis trükib allika aadressi ja seadme ühele reale. Kui vastus nimetab tun0, lõpeta brauseri vaatamine.

Samm 3: kontrolli tagasiteed, enne kui klienti süüdistad

Õige edasisuunaline marsruut ebaõnnestub ikkagi, kui kaugem pool ei saa vastata. Kui kliendi LAN-i jõutakse tunneli kaudu, peab selle LAN-i lüüs teadma, kus tunnelipark asub: ip route add 10.8.0.0/24 via 192.168.1.12 sellel ruuteril, ja push „route 192.168.1.0 255.255.255.0“ serverist, et kliendid teaksid tagasiteed.

Ilma esimese kirjeta lahkub vastus sihtmärgist oma vaikelüüsi poole, mis edastab privaatse aadressi teenusepakkujale ja viskab selle ära. Sümptom on ühesuunaline ja kergesti valesti loetav: päringud ilmuvad tun0-le, vastused mitte kunagi.

Masquerade-reegel VPN-hostis eemaldab vajaduse selle staatilise marsruudi järele: iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE. See peidab ka tegelikud allikaaadressid, mis teeb iga hilisema logiküsimuse raskemaks. Vale vaikelüüsiga sihtkoht tekitab sama vaikuse, parimal juhul ICMP-ümbersuunamise ja tavalisel juhul musta augu, seepärast kuulub salvestus mõlemasse otsa.

Samm 4: vali parandus, millega saad elada

Selle jaoks kasutatakse viit parandust ja need ei ole vahetatavad. Vali selle järgi, mis peab samal ajal kättesaadavaks jääma, mitte selle järgi, milline käsk on lühim.

RepairWhat it fixesWhat it costs
Flip interface metricsAlternating access: office now, home later, never bothGet-NetAdapter -Name "Ethernet 2" | Set-NetIPInterface -InterfaceMetric 21; set the VPN adapter back to 5000. A client that rewrites metrics on connect defeats it
Renumber one sideEvery host reachable in both directionsDHCP reservations, printer queues, firewall rules and hard-coded addresses all move
Narrow the advertised prefixRemote hosts really live in the upper halfBreaks the day someone adds a host below the cut
Translate with client-natBoth address plans stay untouchedStateless per-client mapping, unreadable logs, anything embedding addresses breaks
Publish one service with DNATOne service on the VPN host reachable from the LANBoth address plans stay; source addresses and reverse lookups stop being meaningful

Mõõdikud on odav valik ja see, mille poole inimesed esimesena sirutuvad. Muudatus kehtib liidesele, seega töötab see, kuni tunnel on üleval, ja see kuulub kliendi kõrval olevasse skripti, mitte shelli, mille sa unustad. See ei saa anda samaaegset juurdepääsu samale aadressile kahes võrgus, ja just see piir saadab kõik teised tabelist allapoole.

Koduse LAN-i ümbernummerdamine 10.10.0.0/24 peale on puhas lahendus: üks DHCP rendilepingu uuendus pluss broneeringud, printerijärjekorrad ja kõvasti kodeeritud aadressid, mis mainivad vana vahemikku. Kontoripoolse ümbernummerdamise üle tavaliselt sina ei otsusta. IPv6 kõrvaldab kokkupõrke täielikult, kui mõlemad võrgud seda kannavad, kasutades fd00::/8-st unikaalset kohalikku prefiksit millegi meeldejääva asemel, aga testi rakendust TCP kaudu, mitte pingiga, sest ICMP võib töötada, samal ajal kui teenus ei tööta.

OpenVPN-i enda tõlkevalik on viimane abinõu, mida server saadab kliendipõhisesse kataloogikirjesse. See võtab valiku nime järel neli parameetrit — suund, võrk, mask ja alias — ja alias ei ole valikuline: push "route 192.168.2.0 255.255.255.0" ja push "client-nat dnat 192.168.2.0 255.255.255.0 192.168.1.0". Võrk ja mask on vahemik, mida klient näeb (192.168.2.0/24), alias on tegelik kontorivahemik serveri poolel (192.168.1.0/24), ja saadetud marsruut teeb selle nähtava vahemiku kättesaadavaks. Kontor ilmub siis sellele kliendile 192.168.2.x all. Dokumenteeri vastendus profiilis, muidu hakkab järgmine inimene seda marsruudiveana siluma.

Ühe teenuse avaldamine on tõlke kitsas versioon ja ei vaja OpenVPN-i valikut üldse. DNAT-reegel VPN-hostis avaldab uuesti ühe pordi, seega LAN hoiab oma aadressid ja jõuab teenuseni hosti aadressil, mida ta juba teab. Hind on tavaline: teenus näeb VPN-hosti allikana, seega kliendipõhised logid ja pöördotsingud kaotavad tähenduse. See katab ühe printerijärjekorra või ühe administraatorilehe, mitte hostid mõlemal pool, mis üksteiseni jõuavad.

Mis ikkagi ei hakka tööle, ja mida kirja panna

Broadcast ei läbi marsruuditud tunnelit. DLNA, UPnP, NetBIOS-i sirvimine ja Wake-on-LAN sõltuvad broadcastist või multicastist, mida tun-seade ei kanna, seega ükski marsruut ei paranda avastamist. Sillamine dev tap-iga pikendab segmenti ja koos sellega DHCP-broadcaste, ARP-d ja kõiki teisi avastamispakette; eelista unicast-hostimarsruuti nagu route 192.168.2.1 255.255.255.255 kaugema ruuteri LAN-poolse aadressi jaoks.

Kaks ruuterit, mis mõlemad kasutavad 192.168.1.1 samal teel, kuuluvad samasse probleemiperekonda: kohalik aadress võidab alati, seega kaugema ruuteri leht jääb kättesaamatuks, kuni üks LAN kolib. Teise adapteri lisamine ei muuda kummaski juhtumis midagi.

Pane tõendid kirja enne, kui midagi muudad: ip route get või Find-NetRoute, ping -c 3 kõnealusele aadressile, traceroute, ja kliendis tcpdump -ni tun0 icmp, seejärel marsruutimistabel ja NAT-loendurid serveris. Ping, mis töötab ühes suunas ja sureb teises, osutab tagasiteele, mitte tunnelile, ja just see erinevus otsustab, millist ülalolevatest parandustest sa tegelikult vajad.

Seotud artiklid