Тунэль падключаецца з хатняй лініі і затынаецца ў гатэльнай або офіснай сетцы, а перанос сервера на порт 443 нічога не змяніў. Гэты вынік настолькі звычайны, што мае форму: порт быў лёгкай часткай, а рэшта рашэння належыць таму, што стаіць паміж кліентам і серверам. Большасць выпадкаў вырашаюць два пытанні, і ні адно з іх не пра шыфры. Ці прымае сетка рукапоціск TLS на гэты адрас, і ці трымае кліент маршрут да ўласнай абгорткі, пакуль тунэль падняты?

Рукапоціск выдае больш, чым нумар

Натыўны слухач VPN на TCP 443 гаворыць сваім пратаколам з першага пакета. ClientHello мае поле версіі, выпадковае значэнне і спіс пашырэнняў, і прылада, якая чытае некалькі сотняў байтаў, можа адрозніць гэта, нічога не дэшыфруючы. Нумары партоў танна задаволіць, а форма пратакола — гэта тое, што фільтр сапраўды правярае. Правілы звычайна пішуць і па пратаколах, таму палітыка, якая аналізуе TLS, нічога не кажа пра UDP.

Празрысты проксі, які патрабуе сапраўднай TLS-сесіі, скідвае злучэнне падчас усталявання, часта пасля завяршэння рукапоціску TCP. Гэтая дэталь спатрэбіцца пазней, бо яна азначае, што журнал кліента спыняецца пасля ўсталявання сокета.

Абгортка патоку стварае два месцы збою

Абгортка TLS, такая як stunnel, аднаўляе чаканую форму: кліент падключаецца да лакальнага слухача, абгортка адкрывае сапраўдную TLS-сесію да сервера на 443, а другая абгортка на серверы перадае дэшыфраваныя байты дэману VPN. Знешняя сесія цяпер выглядае як любое іншае злучэнне HTTPS. Дэман VPN на серверы павінен слухаць толькі на loopback, бо нішто па-за абгорткай не павінна да яго дабрацца.

Для такой схемы павінны супасці тры асобныя рэчы. Профіль кліента паказвае на лакальны слухач, сертыфікат сервера адпавядае імені, якое правярае кліент, а перадача на баку сервера накіравана на порт, які дэман сапраўды выкарыстоўвае. Памыліцеся хоць у адным — і злучэнне памірае да таго, як дасягне ўзроўню VPN. Тады неадпаведнасць сертыфіката выглядае як памылка абгорткі, а не як памылка VPN, і менавіта таму абодва журналы варта чытаць побач.

Маршрут да абгорткі — гэта пастка

Як толькі тунэль падымаецца, маршрут па змаўчанні паказвае ў яго, і знешняй TLS-сесіі патрэбны шлях, які не ўваходзіць у тунэль, што яна нясе. Звычайны кліент VPN абараняе адрас, на які звяртаецца; абгорнуты кліент звяртаецца да свайго loopback, таму адрас прызначэння абгорткі нябачны для такой абароны.

sudo ip route add 198.51.100.20 via 192.168.0.1
sudo openvpn --config client.ovpn
sudo ip route del 198.51.100.20

Дакладныя адрасы запаўняеце вы, і маршрут мусіць існаваць увесь час жыцця злучэння, а не толькі пры запуску. Невялікі скрыпт-абгортка, які дадае маршрут перад кліентам і выдаляе пасля, надзейнейшы за завучаную каманду.

На Android эквівалент такой выняткі — налада для кожнай праграмы: выключыце праграму-абгортку з тунэля, каб яе ўласны трафік ішоў праз мабільнае злучэнне. Без выключэння абгортка накіроўваецца ў тунэль, які спрабуе пабудаваць, і цыкл перападключэння выглядае як праблема сервера.

Прачытайце час, перш чым нешта змяняць

Сесія, якая памірае праз аднолькавы інтэрвал кожны раз, — гэта подпіс палітыкі, а не крыптаграфічная адмова, і доўгія ліміты патоку даюць менавіта такі ўзор. Злучэнне, якое скідваецца адразу пасля рукапоціску, сведчыць пра проксі, якому не спадабаўся ланцужок сертыфікатаў.

Параўнайце выдаўцу сертыфіката звычайнага сайта HTTPS з абедзвюх сетак. Калі ў абмежаванай сетцы выдавец іншы, нешта завяршае TLS пасярэдзіне, і ні адна абгортка не перажыве гэтага перахопу без змен. Тое ж параўнанне падкажа, ці блак накіраваны на імя вашага сервера, ці на кожную TLS-сесію на гэтым адрасе.

Запішыце назіраныя паводзіны: колькі доўжылася сесія, ці адкрыўся сокет, ці зафіксавала абгортка рукапоціск. Кожнае з гэтага звужае наступны тэст.

Правярайце адну зменную за раз

Спачатку праверце UDP, бо некаторыя сеткі скідваюць яго цалкам, і збой UDP нічога не кажа пра 443. Затым паспрабуйце TCP 443 без абгорткі, потым абгортку на 443. Чытайце журнал кліента на кожным кроку і спыніцеся, як толькі паводзіны зменяцца.

Змяняйце па адным элеменце за спробу. Новы порт, новая абгортка і новы шыфр за адзін прагон не дазволяць сказаць, што з трох мела значэнне.

Падобныя артыкулы