VPN klienti pieslēdzas, bet interneta nav: trīs trūkstošas daļas
Tunelim, kas atbild uz ping, joprojām vajag pāradresāciju, tulkošanu un pāradresācijas noteikumu. Noskaidrojiet, kuras no trim trūkst, pirms vēlreiz rediģēt klientu.
Klients iegūst adresi, serveris atbild uz ping, un tomēr katra lapa beidzas ar taimautu. Lielākā daļa cilvēku šajā brīdī sāk rediģēt klienta profilu, kas parasti ir veltīgs darbs: kad tunelis ir pacelts, serverim jāuzvedas kā maršrutētājam. Trim nosacījumiem jābūt izpildītiem vienlaikus, lai pakete izietu un atgrieztos atbilde, un simptoms ir vienāds neatkarīgi no tā, kura trūkst.
Kāpēc strādājošam tunelim joprojām nav izejas
Kodolam ir jāpāradresē paketes starp saskarnēm, un tas vairumā Linux distribūciju pēc noklusējuma ir izslēgts. Trafiks ir jāpārtulko uz adresi, uz kuru ārpasaule var atbildēt, ja vien katrs augšupējais maršrutētājs jau nezina atgriešanās ceļu uz tuneļa apakštīklu. Ugunsmūra pāradresācijas ceļam jāatļauj trafiks abos virzienos, tostarp atbildes.
Katra no tām ir labojama atsevišķi, un tieši tā ir slazds. Ieslēdzot pāradresāciju bez tulkošanas noteikuma, paketes iziet ar privātu avotu un bez atgriešanās ceļa. Pievienojot tulkošanu bez pāradresācijas noteikuma, kodols paketi nomet vienu soli vēlāk.
Tāpēc pārbaudiet trīs slāņus, nevis klientu, un mainiet pa vienam, lai rezultātam būtu nozīme.
Pāradresācija ir kodola slēdzis, kas jāpadara pastāvīgs
Pirms maiņas pārbaudiet pašreizējo vērtību, pēc tam iestatiet to un apstipriniet, ka izmaiņas stājās spēkā.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forwardPirmā komanda ziņo pašreizējo vērtību, otrā to iestata izpildlaikā, un trešā pierāda, ka rakstīšana nostrādāja. Izpildlaika vērtība pazūd nākamajā pārstartēšanā, tāpēc strādājoša sesija pēc apkopes var salūzt bez jebkādām konfigurācijas izmaiņām.
Padariet to pastāvīgu failā zem /etc/sysctl.d/, pēc tam piemērojiet šo failu, nevis pārstartējiet, lai uzzinātu. FreeBSD ekvivalents ir net.inet.ip.forwarding, un pastāvībai — gateway_enable=YES failā rc.conf. Ierīce, kas ziņo par izslēgtu pāradresāciju, izskaidro veselu ziņojumu klasi „paketes ierodas, un nekas neatgriežas”. Pārbaudiet iestatījumu arī pēc katras atjaunināšanas, jo pārbūvēts kodols vai nomainīts ierīces attēls var to atiestatīt, nevienam nepasakot.
Izvēlieties masquerade vai vienu fiksētu tulkošanas adresi
Ar dinamisku ārējo adresi masquerading ir vienkāršākā pareizā forma. Norādiet tuneļa apakštīklu kā avotu un ārējo saskarni kā izeju.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADEAr statisku publisku adresi avota tulkošana tieši uz šo adresi ir paredzamāka un vieglāk auditējama.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j SNAT --to-source 198.51.100.10Otrajai formai ir apkopes slazds: cieti kodēta adrese, kas vēlāk mainās, uztur tuneli darbā, kamēr piekļuve internetam klusi apstājas. Vai nu izmantojiet masquerade, vai atjauniniet noteikumu ikreiz, kad pakalpojumu sniedzējs jūs pārvieto. Saskarnei arī ir nozīme, jo maršrutētājam, kas dala savu augšupējo tuneli, ir jātulko pa šo tuneli, nevis pa fizisko WAN.
Filtru tabula ir trešie vārti
Pāradresācija un tulkošana var būt abas pareizas, kamēr pakete tomēr mirst filtru tabulā. ufw ir biežs vaininieks: tā pāradresācijas politika tiek piegādāta kā DROP, un pārējā iestatīšana var izskatīties pilnīgi pareiza, kamēr tas viens iestatījums nogalina trafiku. To pacelt ir apzināts drošības lēmums, nevis atzīmēšanas rūtiņa.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTPirmais noteikums atļauj jaunu trafiku no tuneļa uz āru, un otrais — tikai atbildes atpakaļ. Sašauriniet abus līdz tuneļa apakštīklam un paredzētajam galamērķim, jo vispārēja atļauja tuneļa saskarnē pārvērš VPN par atvērtu izejas punktu ikvienam, kas spēj autentificēties.
Tiltots tunelis prasa citu atbildi. Adrese pieder tiltam, nevis fiziskajai pieslēgvietai, tāpēc saskarnes pakļaušana noņem iepriekšējo adresi, un saimnieks izskatās nesasniedzams, līdz pats tilts iegūst adresi, ko var nodrošināt dhclient br0. Šī kļūme izskatās kā VPN problēma, bet ir otrā slāņa problēma. Pārbaudiet paša tilta adresi, pirms pieskaraties ugunsmūrim, jo filtra izmaiņas nevar salabot saimnieku, kuram vairs nav adreses, no kuras sūtīt.
Kur skatīties, kad lapa nekad neielādējas
Pingojiet servera tuneļa adresi, lai pierādītu, ka tunelis pastāv. Pēc tam palaidiet traceroute no klienta uz publisku adresi un izlasiet, kur tas apstājas: serverī pakete ierodas, bet netiek pāradresēta vai tulkota; aiz servera problēma ir augšup un ārpus jūsu rokām.
ping -c 3 10.9.0.1
traceroute -n 198.51.100.10Pirmā komanda pierāda, ka tunelis nes trafiku līdz pašam serverim, un otrā parāda, cik tālu pakete nokļūst ārpusē. Pēda, kas beidzas tuneļa adresē, norāda uz pāradresāciju vai tulkošanu serverī, savukārt pēda, kas apstājas vienu lēcienu vēlāk, norāda uz pakalpojumu sniedzēju vai augšupējā maršrutētāja atgriešanās ceļu.
Serverī vērojiet ārējo saskarni, kamēr klients ielādē lapu. Trafiks, kas iziet ar privātu avota adresi, nozīmē, ka trūkst tulkošanas, un pilnīga atbildes neesamība nozīmē, ka to nomet pāradresācijas ceļš vai augšupējais atgriešanās maršruts.
Ja attālinātajiem klientiem jāsasniedz arī servera LAN saimnieki, atcerieties, ka LAN vajag atgriešanās maršrutu uz tuneļa apakštīklu. Tas ir maršrutēšana, nevis tulkošana, un tas ir solis, kas visbiežāk tiek aizmirsts pēc tam, kad interneta ceļš beidzot strādā.