Dve zasnovi, ena aplikacija HTTPS, in paket v vsaki ubere drugačno pot. Preusmerjanje vrat spremeni, kam je paket dostavljen, in ostalo pusti pri miru. VPN najprej nosi ta paket znotraj drugega paketa, zato poslušalec aplikacije vidi drug vir in manjšo največjo koristno obremenitev. Šifriranje, o katerem se ljudje prepirajo, je prisotno v obeh primerih, ker je aplikacija še vedno HTTPS; razlikuje se to, kdo lahko odpre povezavo in kaj lahko opazuje vmesno omrežje. Ta razlika reši večino praktičnih vprašanj.

Pravilo DNAT prepiše cilj in se tam ustavi

Na prehodu Linux objava storitve pomeni pravilo v verigi PREROUTING tabele nat ali enakovredno v nftables. Pravilo se ujema z javnim naslovom in vrati, nato prepiše cilj na zasebni naslov aplikacije. Izvorni naslov, izvorna vrata in koristna obremenitev ostanejo nedotaknjeni, conntrack pa zabeleži preslikavo, da se odgovori pri izhodu prepišejo nazaj. Vedenje je tradicionalni model prevajanja naslovov, opisan v RFC 3022.

sudo iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 443 \
  -j DNAT --to-destination 10.20.30.40:443
sudo iptables -t nat -L PREROUTING -n -v
sudo conntrack -L -p tcp --dport 443

Poslušalec aplikacije nikoli ne izve, da je povezava prišla skozi prevajanje. Vidi pravi izvorni naslov odjemalca, kar je koristno za dnevnike dostopa in omejitve hitrosti, in odgovarja na zasebni naslov, ker conntrack preslikavo obrne. Nič na tej poti ne dešifrira ali znova šifrira: TLS še vedno deluje med odjemalcem in lastnim potrdilom aplikacije.

Pravilo določa tudi načine odpovedi, s katerimi se boste srečali pozneje. Če prehod posreduje, a gostitelj aplikacije nima nobene poti nazaj do odjemalca, odgovori odidejo z napačnim virom in rokovanje se ustavi. Če se drugo pravilo ujame prvo, vrstni red odloči o izidu, in iptables -t nat -L -n -v pokaže števce, ki dokazujejo, katero pravilo je vzelo paket.

Tunel ovije paket, preden ga poslušalec vidi

VPN aplikacije sploh ne objavi. Odjemalec sestavi zunanji paket, naslovljen na javni naslov prehoda, v njem zašifrira notranji paket, prehod pa ga dešifrira in usmeri notranji paket do zasebnega cilja. Pri WireGuardu je zunanji prenos UDP, običajno na visokih vratih; pri OpenVPN prek TCP 443 je zunanji paket videti kot TLS vsemu, kar opazuje pot.

Znotraj tunela notranji paket ohrani zasebne naslove: naslov tunela odjemalca, recimo 10.8.0.6, in aplikacijo na 10.20.30.40. Poslušalec zato vidi vir iz nabora tunela in vsak odjemalec si deli ta prehod kot naslednji skok. Dnevniki dostopa za VPN pogosto prikazujejo prehod namesto uporabnika prav iz tega razloga, razen če prehod ohrani prvotni vir.

Ovijanje stane prostor v glavi in to je edina razlika na ravni mehanizma z merljivo posledico. Zunanja glava IP plus UDP plus lastna glava WireGuarda požrejo MTU poti, zato je treba velike pakete razdrobiti ali pa mora notranji sklad TCP omejiti svoj MSS. Prenos, ki deluje na preusmerjeni poti, se lahko na tunelu ustavi, ko vmesna naprava zavrže ICMP, ki bi naznanil manjši MTU.

ip route get 10.20.30.40
ping -M do -s 1400 10.20.30.40
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --clamp-mss-to-pmtu

Izpostavljenost se odloči na vhodu, ne s šifro

Obe zasnovi se končata na istem poslušalcu TLS, zato obe podedujeta isto potrdilo, iste različice protokola in isto prijavo v aplikacijo. Spremeni se to, kdo sme začeti rokovanje. Pri javnem preusmerjanju vsak gostitelj, ki doseže 203.0.113.10:443, dobi rokovanje TCP in TLS ClientHello, še preden se sploh preveri avtorizacija vaše aplikacije. Pri dostopu samo prek tunela je poslušalec dosegljiv le z naslovov, ki jih prehod usmeri v tunel, in SYN tujca umre na politiki prehoda.

Ta razlika je o dosegljivosti, ne o zaupnosti. Preusmerjena storitev HTTPS ni odprto besedilo in VPN ne odpravi potrebe po overjanju aplikacije: sprejem v tunel odgovarja, ali lahko naprava pošilja pakete v to omrežje, medtem ko datotečna aplikacija odgovarja, ali lahko uporabnik bere dokument. Mešanje obojega je pot, po kateri ekipe končajo z VPN, ki daje celoten LAN, in aplikacijo z enim skupnim geslom.

Poslušalec in politiko preglejte ločeno, ker je lahko vsak od njiju širši, kot domnevate:

sudo ss -ltnp 'sport = :443'
sudo nft list ruleset
openssl s_client -connect 203.0.113.10:443 -servername files.example.com </dev/null

Če ss pokaže, da je poslušalec vezan na 0.0.0.0, je aplikacija dosegljiva od povsod, kjer to dovoljujeta usmerjanje in politika požarnega zidu, preusmerjanje pa je le ena od poti noter. Vezava na zasebni naslov ali omejitev obsega virov v požarnem zidu je ločena odločitev od izbire VPN in prav ta odločitev res zmanjša izpostavljenost.

Izmerite pot, ne oznake

Ko nekdo trdi, da je preusmerjanje hitrejše, poštena primerjava vse drugo drži nespremenjeno: isti odjemalec, isto dostopno omrežje, ista datoteka, ista konfiguracija TLS, isti gostitelj aplikacije. Zaženite prenos dvakrat na vsaki poti in zabeležite skupni čas, število napak in odzivnost, ne izhoda nepovezanega preizkusa hitrosti.

curl -sS -o /dev/null -w '%{time_connect} %{time_appconnect} %{time_total}\n' \
  https://files.example.com/report.pdf
mtr -rwc 20 203.0.113.10
mtr -rwc 20 10.20.30.40

Te številke ločijo vzpostavitev povezave od časa prenosa, kar je pomembno, ker se poti običajno razlikujeta v zakasnitvi tja in nazaj ter MTU, ne v ceni šifre. Delo TLS poteka na koncih v obeh zasnovah, tunel pa doda zapiranje, drugo pot in morda bolj obremenjen prehod. Če je pot tunela daljša ali je njegov prehod obremenjen, razlika pripada poti in ne besedi šifriranje.

Izberite vhodno politiko, ki jo storitev res potrebuje, nato presodite, ali izmerjena razlika opravičuje njeno spremembo. Javno preusmerjanje ustreza storitvi, namenjeni odprtemu internetu, z omejitvami virov, posodobljenim TLS in nadzorom pred njo. Dostop samo prek tunela ustreza notranjemu orodju, katerega uporabniki so že vpisani, če sta usmerjanje prehoda in dovoljenja aplikacije oba ožja od celotnega LAN.

Preden zasnovo razglasite za dokončano, potrdite štiri stvari: na kateri naslov je vezan poslušalec, katero pravilo ali pot spusti paket noter, ali povratna pot deluje s pravega naslova odjemalca in ali velike koristne obremenitve preživijo MTU. Vsaka od njih ima zgoraj ukaz in nobeni ne odgovori beseda varno ali graf pasovne širine.

Sorodni članki