Прослеђивање порта наспрам VPN приступа: где пакет заиста иде
Прослеђивање порта преписује одредиште и ту се зауставља; VPN прво умотава пакет. Погледајте који слој свако мења и шта то значи за HTTPS.
Два дизајна, једна HTTPS апликација, и пакет у сваком иде другачијим путем. Прослеђивање порта мења где се пакет доставља и остатак оставља нетакнут. VPN прво носи тај пакет унутар другог пакета, па слушалац апликације види други извор и мањи највећи корисни терет. Енкрипција о којој људи расправљају присутна је у оба случаја, јер апликација и даље јесте HTTPS; разликује се то ко може да отвори везу и шта мрежа између може да посматра. Та разлика решава већину практичних питања.
Правило DNAT преписује одредиште и ту се зауставља
На Linux пролазу, објављивање услуге значи правило у ланцу PREROUTING табеле nat, или еквивалент у nftables. Правило се поклапа са јавном адресом и портом, затим преписује одредиште на приватну адресу апликације. Адреса извора, порт извора и корисни терет остају нетакнути, а conntrack бележи мапирање да би се одговори преписали при излазу. Понашање је традиционални модел превођења адреса описан у 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
Слушалац апликације никада не сазна да је веза стигла кроз превођење. Види праву адресу извора клијента, што је корисно за дневнике приступа и ограничења брзине, и одговара на приватну адресу јер conntrack обрће мапирање. Ништа на том путу не дешифрује нити поново шифрује: TLS и даље ради између клијента и сопственог сертификата апликације.
Правило такође одређује режиме отказа са којима ћете се касније сусрести. Ако пролаз прослеђује, али домаћин апликације нема повратни пут до клијента, одговори излазе са погрешним извором и руковање се зауставља. Ако се друго правило поклопи прво, редослед одлучује исход, а iptables -t nat -L -n -v приказује бројаче који доказују које је правило узело пакет.
Тунел умотава пакет пре него што га слушалац види
VPN уопште не објављује апликацију. Клијент гради спољашњи пакет адресиран на јавну адресу пролаза, шифрује унутрашњи пакет у њему, а пролаз га дешифрује и усмерава унутрашњи пакет ка приватном одредишту. Код WireGuard-а спољашњи транспорт је UDP, обично на високом порту; код OpenVPN преко TCP 443 спољашњи пакет изгледа као TLS свему што посматра пут.
Унутар тунела унутрашњи пакет задржава приватне адресе: адресу тунела клијента, рецимо 10.8.0.6, и апликацију на 10.20.30.40. Зато слушалац види извор из базена тунела, и сваки клијент дели тај пролаз као следећи скок. Дневници приступа иза VPN-а често приказују пролаз уместо корисника управо из овог разлога, осим ако пролаз чува оригинални извор.
Умотавање кошта простора у заглављу и то је једина разлика на нивоу механизма са мерљивим исходом. Спољашње IP заглавље плус UDP плус сопствено заглавље WireGuard-а једу од MTU пута, па велики пакети морају да се фрагментују или унутрашњи TCP стек мора да ограничи свој MSS. Пренос који ради на прослеђеном путу може да се заглави на тунелу када средњи уређај одбаци ICMP који би означио мањи 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
Изложеност се одређује на улазу, не шифром
Оба дизајна завршавају на истом TLS слушаоцу, па обоје наслеђују исти сертификат, исте верзије протокола и исту пријаву у апликацију. Мења се то коме је дозвољено да започне руковање. Са јавним прослеђивањем, сваки домаћин који достигне 203.0.113.10:443 добија TCP руковање и TLS ClientHello пре него што се ауторизација ваше апликације уопште размотри. Са приступом само кроз тунел, слушалац је доступан само са адреса које пролаз усмерава у тунел, а SYN странца умире на политици пролаза.
Та разлика тиче се доступности, а не поверљивости. Прослеђена HTTPS услуга није отворен текст, а VPN не уклања потребу за аутентификацијом апликације: пријем у тунел одговара на питање да ли уређај сме да шаље пакете у ову мрежу, док датотечна апликација одговара на питање да ли корисник сме да чита документ. Мешање тога двога је начин на који тимови заврше са VPN-ом који даје цео LAN и апликацијом са једном заједничком лозинком.
Прегледајте слушаоца и политику одвојено, јер свако од њих може бити шире него што претпостављате:
sudo ss -ltnp 'sport = :443'
sudo nft list ruleset
openssl s_client -connect 203.0.113.10:443 -servername files.example.com </dev/null
Ако ss показује да је слушалац везан за 0.0.0.0, апликација је доступна одакле год то дозвољавају усмеравање и политика заштитног зида, а прослеђивање је само један од путева унутра. Везивање за приватну адресу или ограничавање опсега извора у заштитном зиду је одвојена одлука од избора VPN-а, и та одлука заиста сужава изложеност.
Мерите пут, не етикету
Када неко тврди да је прослеђивање брже, поштено поређење држи све остало константним: исти клијент, иста приступна мрежа, иста датотека, иста TLS конфигурација, исти домаћин апликације. Покрените пренос двапут по путу и забележите укупно време, број отказа и одзивност, а не излаз неповезаног теста брзине.
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
Ови бројеви одвајају успостављање везе од времена преноса, што је важно јер се два пута обично разликују по кашњењу тамо и назад и MTU, а не по цени шифре. TLS рад се одвија на крајевима у оба дизајна, а тунел додаје инкапсулацију, други пут и можда оптерећенији пролаз. Ако је пут тунела дужи или је његов пролаз оптерећен, разлика припада путу, а не речи шифровање.
Изаберите политику улаза која је услузи заиста потребна, затим одлучите да ли измерена разлика оправдава њену промену. Јавно прослеђивање одговара услузи намењеној отвореном интернету, са ограничењима извора, ажурираним TLS-ом и надзором испред. Приступ само кроз тунел одговара интерном алату чији су корисници већ уписани, под условом да су усмеравање пролаза и дозволе апликације обоје ужи од целог LAN-а.
Пре него што дизајн прогласите завршеним, потврдите четири ствари: на коју је адресу слушалац везан, које правило или путања пушта пакет унутра, да ли повратни пут ради са праве адресе клијента и да ли велики корисни терети преживљавају MTU. За сваку од њих горе постоји команда, и ни на једну не одговара реч безбедно или графикон пропусног опсега.