Sasniegt VPN klienta pakalpojumu: apgrieztais tunelis vai DNAT
Sasniegt pakalpojumu OpenVPN klientā bez porta pāradresācijas: salīdziniet apgriezto SSH tuneli ar DNAT servera pusē un trīs nosacījumus, kas izraisa izvēli.
Pat portatīvais dators aiz operatora NAT var apkalpot kolēģi, ja VPN serveris darbojas kā tikšanās vieta. Uz turieni ved divi mehānismi: klients pieslēdzas uz āru un lūdz serveri turēt klausīšanās portu, vai serveris publicē portu un pārtulko to tunelī. Abi risina to pašu sasniedzamības problēmu un uzvedas atšķirīgi kļūmes, uzraudzības un žurnalēšanas laikā. Trīs nosacījumi izlemj, kurš no tiem atbilst jūsu konfigurācijai.
Divas formas, viena tikšanās vieta
Pirmajā formā klients atver SSH sesiju uz āru un lūdz serveri klausīties izvēlētajā portā, katru savienojumu nosūtot atpakaļ pa šo sesiju. Serverī nekas netiek pāradresēts un nenotiek nekāda pakešu tulkošana, tāpēc vienīgās prasības ir SSH konts, atļauta pāradresācija un ugunsmūra noteikums portam. Pakalpojums paliek piesaistīts klienta loopback, un tas parasti ir tas, ko vēlaties.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Otrajā formā publiskais ports pieder serverim, un tas pārraksta katru savienojumu uz klienta tuneļa adresi. Tam nepieciešama iespējota IP pāradresācija, galamērķa tulkošana ieejā un avota tulkošana izejā, un tas turpina darboties arī tad, kad nav nevienas SSH sesijas. Ports pieder serverim, nevis sesijai, un tieši šī īpašība izšķir lielāko daļu reālo gadījumu.
Neviena no formām nav drošāka pēc uzbūves. Abas galu galā pakļauj vienu pakalpojuma portu ikvienam, kas var sasniegt servera publisko adresi, un abas joprojām ir atkarīgas no paša pakalpojuma autentifikācijas.
Pirmais nosacījums: vai portam jādzīvo ilgāk par sesiju
Apgrieztā pāradresācija dzīvo tieši tik ilgi, cik SSH sesija, kas to izveidoja. Kad saite pārtrūkst, klausītājs pazūd, un kolēģis redz atteiktu savienojumu, nevis lēnu ceļu. Komandas uzraudzība ar systemd vienību un restartēšanas politiku to atrisina, un ExitOnForwardFailure=yes padara neizdevušos piesaisti uzreiz redzamu, tā vietā lai atstātu sesiju bez pāradresācijas.
Pārtulkotais ports pārdzīvo restartus, ja noteikumi tiek saglabāti, bet tas ir atkarīgs no tā, vai klients saglabā to pašu tuneļa adresi. Dinamisks pūls, kas pēc atkārtotas pieslēgšanās piešķir portatīvajam citu adresi, klusi novirza noteikumu uz nekurieni. Vispirms rezervējiet tuneļa adresi, pēc tam rakstiet noteikumu, un uzskatiet abus par vienu izmaiņu.
Ja pakalpojumam jāatbild trijos naktī bez neviena, kas skatās, formai ar servera publicēto portu ir mazāk kustīgu daļu, jo vienīgais process, kam jāpaliek darbojoties, ir pats tunelis.
Otrais nosacījums: kam pieder ugunsmūris un žurnāli
Apgrieztā forma tur visu politiku divās vietās. sshd ar AllowTcpForwarding starpniecību izlemj, vai attālinātas pāradresācijas vispār ir atļautas, un GatewayPorts izlemj, vai klausītājs piesaistās loopback vai katrai adresei. Ar noklusējuma vērtību no kolēģis ārpus servera nevar sasniegt portu, lai gan pāradresācija bija veiksmīga, un tas izskatās kā salūzis tunelis, lai gan patiesībā tas ir piesaistes adrese.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Pārtulkotajai formai nepieciešama iespējota pāradresācija un divi noteikumi, un otrais noteikums ir vieta, kur vairums recepšu kļūdās. Avota tulkošanas ierobežošana ar conntrack stāvokli DNAT nozīmē, ka tiek pārrakstīti tikai tie savienojumi, ko izveidoja galamērķa noteikums, nevis katrs pakets, ko serveris sūta tunelī.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Šī pārrakstīšana iznīcina arī attiecināšanu. Pēc tam klients katru zvanītāju redz kā servera tuneļa adresi, kas visas ātruma limitus uz adresi sablīvē vienā spainī un slēpj, kas ko nosūtīja. Ja attiecināšana ir svarīga, pārtrauciet savienojumu serverī vai atstājiet atļaujas lēmumu tur un nododiet identitāti virsrakstā, kuram pakalpojums uzticas. Izvēle starp šiem diviem labojumiem ir atkarīga no tā, vai pakalpojums vispār lasa starpniekservera virsrakstu.
Trešais nosacījums: viens ports vai daudzi, un kam pieder vārds
Viens pakalpojums vienā portā ir gadījums, kad apgrieztā pāradresācija uzvar pēc piepūles. Jums vajag vienu komandu, vienu kontu un vienu ugunsmūra noteikumu, un sakopšana ir sesijas nonāvēšana. Vairāki pakalpojumi tajā pašā publiskajā adresē virza jūs uz servera publicēto formu, jo katrai apgrieztajai pāradresācijai vajag savu servera portu, un kopa aug ar katru pakalpojumu.
Vārdi to sarežģī vēl vairāk. Apgrieztā pāradresācija var atrasties aiz TCP starpniekservera, kas maršrutē pēc SNI, kamēr pārtulkotais ports parasti ir viens ports uz pakalpojumu. Ja pakalpojums pats pabeidz TLS un tam vajag sākotnējo resursdatora nosaukumu, starpniekservera pieeja to saglabā, un DNAT pieeja to saglabā tikai tad, ja pakalpojums pieņem šo nosaukumu šajā portā.
Pierakstiet, kurš no trim nosacījumiem noteica formu. Citādi nākamā persona, kas pievienos otru pakalpojumu, atkārtoti atvērs to pašu salīdzinājumu ar mazāk konteksta.
Izlemiet, tad pārbaudiet no ārpuses
Pārbaudiet ceļu no tīkla, kuram nav neviena maršruta uz portatīvo datoru, un vērojiet servera skaitītājus, kamēr pieprasījums tiek izpildīts. Pārbaude no servera uz tā pašu publisko adresi šeit neko nepierāda, jo pakets tiek izveidots lokāli un nekad nesasniedz ienākošo tulkošanas āķi, tāpēc tests var iziet, kamēr īstais ceļš ir salūzis.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Skaitītāji, kas paliek uz vietas, nozīmē, ka pakets nekad nesasniedza noteikumu, kas norāda uz pakalpojumu sniedzēju vai resursdatora ugunsmūri. Skaitītāji, kas kustas, kamēr pakalpojums atsaka, norāda uz paša klienta ugunsmūri vai adresi, kurā pakalpojums klausās. Tunelis, kas pārvadā paketu, bet neko neatgriež, ir maršruta vai atgriezeniskā ceļa problēma, un nevienu no šiem trim rezultātiem nevajadzētu atkļūdot, rediģējot klienta adapteri. Pierakstiet, kurš skaitītājs pavirzījās, pirms kaut ko maināt, jo nākamajam testam vajag šo bāzes līniju.
Kad forma darbojas, pierakstiet portu, īpašnieku un uzraudzības metodi blakus tuneļa konfigurācijai. Sasniedzamības labojums, kas pastāv tikai kāda čaulas vēsturē, ir viena restarta attālumā no atkārtota incidenta.