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