оригинальная статья в моём блоге: как правильно использовать VPN
ну если я претендую хоть на какое-то понимание области ИКТ, то придётся сразу сделать шаг назад это точно не VPN. эта штука будет создавать прямой трафик, который видно.
теорию вопроса можно найти здесь. и тут мне подумалось. я всегда ругался на использование VPN для обхода блокировок. ну зачем? хотя популярность это средство приобрело видимо потому, что не требует каких либо знаний от пользователей. уверен мало кто знает что обозначают эти 3 магические буквы.
у меня конечно может быть проф деформация, но я считаю неправильно когда человек не знает основы того, чем он пользуются каждый день. это в общем то и рождает зависимость и возможность манипуляции. вы же не горите "ну у меня проблемы с машиной - дыра в такой круглой чёрной штуке в машине их четыре".
так что раскрою секрет: VPN это Virtual Private Network. т.е. назначение технологии получение доступа к некой частной сети, а все остальное там делается поскольку постольку. например совершенно не обязательно, что VPN шифрует трафик. для доступа к корпоративной сети это важно. может использоваться l2tp/ipsec. но это все же частный случай.
хотя VPN как правило надёжно скрывает трафик до точки подключения используется оно для обхода блокировок по причине того, что создаёт тоннель за пределы ТСПУ. по этому в принципе можно использовать что угодно, важно что создаётся тоннель.
типа VPN
что я предлагаю. сейчас почти все блокировки основаны на отбрасывании первого пакета установления защищённого соединения. либо отбрасываются пакеты с некоторым (например googlevideo.com) SNI либо версии протокола TLS.
что можно сделать. поднять тоннель за пределы ТСПУ (можно даже использовать приватные адреса) и передать через этот тоннель один единственный пакет - нам нужно просто преодолеть ТСПУ. т.е. у отправителя пакета адрес который вам выдал провайдер.
первый пакет по такому кривому пути долетит до сервера, а дальше трафик пойдет естественным образом. соответственно на VPN сервере на должно быть NAT - он просто должен выплюнуть пакет на своей стороне тоннеля.
это дает возможность строить "VPN" соединение с огромной пропускной способностью т.к. через сервер проходит не полностью всё TLS соединение, а один единственный пакет. подобна технология получила название "Tunnel TCP Handshake"
не достатком же будет что весь остальной трафик, кроме первого пакета, идёт естественным образом и его видно.
вообще говоря это может реализовать любой провайдер при помощи PBR. у его клиентов просто резко заработает все. метод применим для преодоления любых систем фильтрации трафика основанных на DPI.
суть можно выразить словами (FreeBSD):
fwd ${gate1} ip6 from ${lan} to any 443 tcpflags ack via ${inet} out
- ${lan} - заинтересованные адреса
- ${inet} интерфейс смотрящий в интернет
- ${gate1} адрес шлюза которым может быть локальная точка тоннеля или сетевой адрес иного шлюза.
для провайдера это дает возможность подключить всю сеть через одно единственное подключение VPN. конечно намного надёжнее и эффективнее делать это при помощи DPI, но как говорится и так сойдет.
хотя в случае провайдера я бы делал не так.
во-первых я бы отзеркалил трафик. чтобы ТСПУ благополучно что-то отбрасывала.
а из основного трафика выделил бы нужные пакеты и мелко бы их нарубил - эти пакеты ТСПУ преодолеют. впрочем просто меленько сегодня работать не будет см. заметку:
вот и получается ТСПУ радостно что-то отбрасывает, но нам нас этот факт не волнует. хотя видимо эта псевдомаскривка не очень нужна - трафик прямой и его видно.
может быть имеет смысл пробрасывать весь исходяший трафик на заблокированный ресурс. например от клиента на сервер ютуб идет незначительный трафик. т.е. весь исходящий трафик мы пробросим через тоннель (просто уберите tcpflags ack) что будет полезно при блокировки по IP. заодно и проверим понимает ли что-то в сетях человек который эту ТСПУ проектировал. если заработает, а заблокировано по IP придумать что-то более издевательское будет сложно.
P.S.
моё внимание обратили что я немного накосячил "tcpflags ack" проблему выбора только первого пакета соединения решает плохо, тогда уж "setup" setup = tcpflags syn,!ack - а я пытался делать все наоборот, кроме того есть ещё UDP. так что эффективно реализовать это без использования DPI не получится (забавно DPI помогает обходить DPI). т.е. мы сами выделяем при помощи DPI то что ТСПУ отбросит и оправляем через VPN.
на моей машине у меня вообще вот так (трафик заворачивается в некую бесплатную программку):
add divert 900 ip from me to not "table(nofrag)" 443 out not diverted xmit em0