Портты қайта бағыттау және VPN қатынасы: пакет шын мәнінде қайда барады
Портты қайта бағыттау межелі орынды қайта жазып, сол жерде тоқтайды; VPN пакетті әуелі қаптайды. Әрқайсысы қай қабатты өзгертетінін және мұның HTTPS үшін мәнін қараңыз.
Екі жоба, бір HTTPS қосымшасы, ал пакет әрқайсысында бөлек жол жүреді. Портты қайта бағыттау пакеттің қайда жеткізілетінін өзгертіп, қалғанын қозғамайды. VPN бұл пакетті әуелі басқа пакеттің ішінде алып жүреді, сондықтан қосымшаның тыңдаушысы басқа бастау көзін және азырақ ең үлкен пайдалы жүктемені көреді. Адамдар таласатын шифрлау екі жағдайда да бар, өйткені қосымша әлі де HTTPS; өзгешесі — кім қосылым аша алады және арадағы желі нені бақылай алады. Бұл айырмашылық практикалық сұрақтардың көбін шешеді.
DNAT ережесі межелі орынды қайта жазып, сол жерде тоқтайды
Linux қақпасында қызметті жариялау nat кестесінің PREROUTING тізбегіндегі ереже немесе 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-ін шектеуі керек. Бағытталған жолда жұмыс істейтін тасымалдау туннельде тұрып қалуы мүмкін, егер аралық құрылғы кішірек MTU-ды білдіретін ICMP-ны тастап кетсе.
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 қосымша аутентификациясының қажеттілігін жоймайды: туннельге қабылдау құрылғының осы желіге пакет жіберуге рұқсаты бар-жоғын жауап береді, ал файл қосымшасы пайдаланушының құжатты оқуға рұқсаты бар-жоғын жауап береді. Екеуін шатастыру — командалардың бүкіл LAN-ды беретін VPN мен бір ортақ құпиясөзді қосымшаға келу жолы.
Тыңдаушы мен саясатты бөлек тексеріңіз, өйткені екеуінің кез келгені сіз ойлағаннан кең болуы мүмкін:
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-дан өте ме. Олардың әрқайсысы үшін жоғарыда пәрмен бар, және ешқайсысына «қауіпсіз» деген сөз немесе өткізу қабілетінің графигі жауап бермейді.