stunnel артындагы OpenVPN: 1194 портун эмес, каптаманы жөнөтүңүз
Эки угуучу, үч порт. Багыттоо кайда түшөрүн, каптама кайда байланышарын, кайда туташарын, жергиликтүү тест эмнени өткөрүп кеткенин жана эки инсанды текшериңиз.
TLS каптамасын OpenVPN алдына коюңуз, орнотуу экинчи угуучуга ээ болот, алардын бирөө гана интернетке карашы керек. Туннель ошол эле машинадан иштеп, сырттан ишке ашпаса, багыттоо адатта экөөнүн туура эмесине багытталган. Шайкеш келиши керек нерсе — чынжыр: жарыя эреже каптамага жетет, ал эми каптаманын өз backend байланышы чыныгы VPN сокетине жетет. Төрт секирик бул чынжырды көтөрөт жана алардын кайсынысы болсо да иликтөөнү эрте бүтүрүшү мүмкүн.
Эки сокет, эки ээ, бири жарыя
Каптама сырткы байланыш үчүн TLSди бүтүрүп, чечилген байт агымын жөнөкөй OpenVPN TCP угуучусуна берет. Булар өзүнчө конфигурация файлдары бар өзүнчө сокеттер, ошондуктан бирин оңдоо экинчисин тийбеген жана дагы эле сырттан соо көрүнүүчү абалда калтырат. Бул ошондой эле экөө бири экинчисинсиз өзгөргөндө ажырап кетиши мүмкүн экенин билдирет.
Машинанын өзүнөн иштөө ошондуктан жарыя жол тууралуу абдан аз далилдейт. Байыркы портко түз байланыш каптаманы өткөрүп жиберет, каптамага анын LAN дареги боюнча байланыш котормону өткөрүп жиберет, ал эми сырткы колдонуучу эмне кыларын кардар тараптагы толук түзүлүш гана сынайт. Аталыштарды да кылдат окуу керек, анткени localhost ошол компонентти иштетип жаткан хостту билдирет, кокустан терип жаткан хостту эмес. Бул айырманы жазууларыңызда сактаңыз, анткени өзү камтыган секирикти жазбай катталган тест эки ар башка нерсени салыштырууга чакырат.
Багыттоо чындап кайда түшөт
Чынжырды үч порт номери катары эмес, төрт секирик катары кармоо оңоюраак, анткени бир эле номер ар бир учунда башка маанини билдириши мүмкүн. Таблицаны сап боюнча окуңуз: ар бир сап — байланыш кабыл алып, анан кийинкисин ачууга тийиш болгон бир сокет. Сап туура эмес өнөктөшкө багытталса, акыркы мамычадагы симптом — колдонуучу билдирген нерсе.
| Hop | Listens on | Must reach | Symptom when it points elsewhere |
|---|---|---|---|
| Client machine | A local plaintext port | The wrapper's public TLS address | Plain text offered to a TLS endpoint |
| Router forward | Public TCP 443 | The wrapper host on its translated port | Wrapper records no connection at all |
| Wrapper, server mode | Its accepted port, 8443 here | The native VPN socket on loopback | Handshake completes, then silence |
| Native VPN listener | Loopback TCP port | Its peer, over TCP only | A UDP socket behind a byte-stream relay |
Каптаманын ордуна байыркы VPN портун бутага алган эреже TLS бүтүрүүнү толугу менен өткөрүп жиберет, бул бул катанын эң кеңири тараган түрү: кардар OpenVPN кадрлоосун күткөн угуучу менен кол алышууну ачат, ошондуктан байланыш ачылып, анан токтоп калышы мүмкүн. Которулган портту эске эмес, каптаманын конфигурация файлына салыштырып текшериңиз, анткени бул файлды кийинки оңдогон адам башка номерди тандаган болушу мүмкүн. Төмөнкү эки буйрук ошол суроонун эки жагын бир убакта көрсөтөт.
grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'
Сизден баш тарткан байлоо дареги
127.0.0.1 гө байланган accept сабы хосттун өзүнө гана жооп берет, ошондуктан LAN дарегине келген багыттоо туташа албайт жана кардар пакет чыпкасынын көйгөйүнө окшош баш тартууну көрөт. Пакет чыпкасына тийиштин алдында сокетти караңыз, анткени сокет арзаныраак жооп. Же каптаманы багыттоо бутага алган интерфейске байлаңыз, же аны loopbackте кармап, багыттоо чындап иштеген нерсе аркылуу loopbackке жетсин. Булар эки долбоор, жана ар биринин өз эрежеси керек.
Аларды аралаштыруу — иштеп турган каптаманын ар бир файл туура көрүнгөнү менен сырттан жеткис болуп калышынын жолу. Төмөнкү текшерүү бир буйрук жана өрт дубалынын эрежелерин карап чыгуу жооп бере албаган суроого жооп берет. Эгер чыгарылыш loopback дарегин көрсөтүп, багыттоо LAN дарегин бутага алса, оңдоо accept сабында, пакет чыпкасында эмес.
ss -lntp '( sport = :8443 )'
Жергиликтүү тест чындап эмнени далилдеди
Өзү камтыган секирикти жазбай туруп катталган ийгилик башка секириктер жөнүндө далил эмес. Тест кайсы даректи колдонгонун жана кайсы процесс жооп бергенин жазып коюңуз. Анан ошол эле Wi-Fiдагы телефондон эмес, тармактын сыртынан кайталаңыз, анткени чач төөнөгүчтүн жүрүм-туруму маршрутизаторлордун ортосунда ар башка жана LANдан эч качан чыкпаган байланыш да багыттоо такыр катышпай эле кардарды канааттандыра алат. Ошол экинчи аракет гана бөтөн адам баскан жолду сынайт.
Аракет ишке ашпаса, бир байланышты эки журналда тең көзөмөлдөңүз: каптаманын кабыл алуу жана туташуу саптары, анан VPN демонунун өз сессия журналы. Эч нерсе жазбаган биринчи чек — кийинки өзгөртүүнүн орду. OpenVPN өнөктөштүн параметрлерин салыштыра баштаганда, ал билдирүүлөрдү ошол ишке ашыруунун эрежелери менен баалаңыз. link-mtu шайкешсиздиги тууралуу эскертүү автоматтык түрдө өлүмгө алып барбайт, link-mtuну 1500гө бекитүү фрагментация токтогонун далилдебейт, ал эми шифр келишими маршрутизатордун багыттоосуна эмес, OpenVPNдин ички конфигурациясына таандык.
nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager
Бул зонддор backend сокетин жана каптама журналын камтыйт, бул баш тартылган backendти баш тартылган кол алышуудан ажыратат. Аларды кийин эмес, бир аракет жүрүп жатканда иштетиңиз. Бир аракеттин убакыт белгилери салыштырууну ишенимдүү кылат.
Эки инсан, эки ийгиликсиздик тартиби
Сырткы сертификат каптамага, ички инсан OpenVPNге таандык жана алар ар башка органдардан келиши мүмкүн. Жолду соо көрсөтүү үчүн эки текшерүүнүн кайсынысын болсо да өчүрүү чыныгы коргоону сырткы көрүнүшкө алмаштырат. Эки текшерүүнү тең сактап, аларды тартиби менен оңдоп чыгыңыз, анткени билдирүүлөрдүн тартиби катмарды атайт: каптама сертификатынын көйгөйү кандайдыр бир VPN параметри сүйлөшүлгөнгө чейин чыгат, ички инсандын ийгиликсиздиги агым орногондон кийин гана көрүнөт.
stunnel колдонмосу accept, connect жана кардар режимин так аныктайт, жана бул бөлүмдөр сокет суроосуна болжолдоодон тезирээк жооп берет. Кайсы катмар жооп бергенин али аныктай албасаңыз, төмөнкү буйрук менен жарыя порт сунуштаган сертификатты окуңуз. Чыгарылышта каптама сертификаты болсо, багыттоо каптамага жетти, ал эми тынчтык же протокол катасы жетпегенин билдирет. Ушул бир айырма бул жердеги кандайдыр бир башка текшерүүдөн көбүрөөк убакыт үнөмдөйт.
openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer