open VPN connection programmatically ( Java ?)

Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

open VPN connection programmatically ( Java ?)

Post by Сабина »

Не могу найти можно ли это сделать ?
Вот очень похожий вопрос, но без ответа - http://stackoverflow.com/questions/1727 ... on-android" onclick="window.open(this.href);return false;

Суть в том что должна периодически запускаться scheduled job которая вычитывает rest endpoint доступные только over VPN
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

Дело в том, что это reverse engineering. Наверное, перед поставщиками VPN такой задачи не стоит, создавать прикладные клиенты.

У нас реализован клиент VPN прямо в процессе нашего приложения, умеет переключаться между Juniper и CISCO протоколами, будет ещё F5. Это большая работа, на ней выделенный человек, который когда в одной из трёх перечисленный выше VPN-компаний работал. Код на C++ с ипользованием CEF. Мне представляется, что на Java сделать можно, там несколько потоков, парсит всевозможные строчки regex, логи пишет как не в себя, основная задержка от сети. Нужен специалист в предметной области. Я знаю одного. Он не продаётся. :)

Но вы ведь можете просто в системе запускать ваш клиент VPN. И говорите с ним, как если бы из браузера, давая ему внутрикорпоративный адрес ресурса, чтобы он вам его странслировал.
... and even then it's rare that you'll be going there...
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: open VPN connection programmatically ( Java ?)

Post by Сабина »

Medium-rare wrote: Но вы ведь можете просто в системе запускать ваш клиент VPN. И говорите с ним, как если бы из браузера, давая ему внутрикорпоративный адрес ресурса, чтобы он вам его странслировал.
В смысле держать открытый VPN коннекшен с сервера где этот job запускается ? Я собственно это и собираюсь узнать в понедельник, наверное оно так и работает. Просто как то ugly это, а нормальной authentication на endpoint нету и надо все еще вчера как обычно :?
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

Сабина wrote:В смысле держать открытый VPN коннекшен с сервера где этот job запускается ? Я собственно это и собираюсь узнать в понедельник, наверное оно так и работает. Просто как то ugly это, а нормальной authentication на endpoint нету и надо все еще вчера как обычно :?
Ну... если solution твой внутрикорпоративный, не многим неизвестным клиентам, то почему бы и нет. Работать должно так же хорошо. Процесс ещё как можно запустить в системе. А по другому, о, работы непочатый. Кто такое делает в виде фреймворка, не знаю. Наверное, трудно reverse engineering ещё и изменения отслеживать у всех джуниперов.
... and even then it's rare that you'll be going there...
XpoH
Уже с Приветом
Posts: 2136
Joined: 08 Nov 2013 22:33
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by XpoH »

Так а если поставить этот впн в контейнер и поднимать его когда нужно дергать те самые нужные ресты?
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: open VPN connection programmatically ( Java ?)

Post by Сабина »

XpoH wrote:Так а если поставить этот впн в контейнер и поднимать его когда нужно дергать те самые нужные ресты?
Во :umnik1:
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

Ой, а что за контейнер? Там что, не тот же самый внешний процесс с VPN клиентом запустят?
... and even then it's rare that you'll be going there...
DropAndDrag
Уже с Приветом
Posts: 6019
Joined: 11 Mar 2011 05:36

Re: open VPN connection programmatically ( Java ?)

Post by DropAndDrag »

как написать VPN клиента не знаю, а вот спросить хочу для расширения кругозора c точки зрения security.

я так понимаю у программы, которую хочет написать Сабина, для VPN будет использоваться user/password, который будет читаться из файла (понятно, что можно обеспечить ограничение доступа к файлу, шифрование самих значений, периодическую смену). также при использовании VPN обеспечивается доступ ко все сети, а не только нескольким сервисам на каком-то сервере.
в то же время, есть другой, скорее всего улучшенный, способ - дополнительно использовать SecureID (или что-то подобное), который генерит "случайное" число. такой путь безопасне и предположу, что все более менее серьезные конторы уже перешли на SecureID. Мне кажется (опять-таки я не смотрел гугл на эту тему), что программно сделать такой способ сложнее, если вообще возможно (впрочем можно поставить камеру и читать по мере надобности).
впрочем, нормальные конторы оставляют доступ по sftp для внешних пользователей (можно конечно ssh и vpn, но у нас внешним пользователям нужно только скачать файлы). но доступ дается только к серверу, который за пределами сети организации, а этому серверу позволены очень ограниченные телодвижения внутри организации.

что скажет приличный IT people? у меня более менее правильное представление как организован доступ в нормальных конторах? конечно, ссылки приветствуются.

ну и на последок. Сабина, а ты сделай следующие. со своей программы запусти какого-нибудь стандартного VPN клиента. когда запуститься VPN клиент, то научи свою программу рыться по контролс у этого клиента и тупо записывать данные в нужные :crazy:
иногда меня такой херней вынуждают заниматься компании, которые не предоставляют API для connectivity. если в windows, то я подскажу чем воспользоваться и какой-нибудь код скинуть могу. В Linux это тоже должно работать, но пока меня жизнь не заставляла.
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: open VPN connection programmatically ( Java ?)

Post by StrangerR »

Вы тут чего то не понимаете. VPN клиент это часть ОС. И нельзя его НАПИСАТЬ! Что мешает просто вызвать скрип который поднимет VPN а когда стало не нужно - еще один который его закроет? И наверняка есть интерфейс через Power Shell (ну и на линуксах есть через shell).

Хотя еще возникает вопрос, а что собственно тут называеют VPN клиентом? А то т им обзывают OpenVPN то PPTP то SSTP а то IPSEC.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

StrangerR wrote:Вы тут чего то не понимаете. VPN клиент это часть ОС. И нельзя его НАПИСАТЬ!
Всегда очень полезно от вас узнать, что к чему. Вы и СлонЮра - кладези админного опыта. :good:

А кто же его уже написал? При том, VPN клиент - НЕ часть OS. Это программа, которая перехватывает запросы через сокет наружу, по DNS, и просто по IP. Она "фильтрует" эти запросы, и для тех, которые распознаны, как внутренние для какой-то корпоративной сети e.g. http://ourcorp/mydesk" onclick="window.open(this.href);return false;, предоставляет secure tunnel прямо до коробки VPN в корпорации. Браузер (или другая программа) просто открыл тот сокет, и понятия не имеет, где на самом деле ресурс, к которому он обращается. OS может быть MacOS от Apple, а тот клиент может быть написан Juniper. В нашей организации пишут VPN-клиент, притом, много-VPN-ый клиент, при том, непосредственно в процессе нашего хитроделаного приложения.
Last edited by Medium-rare on 21 Jul 2015 21:23, edited 2 times in total.
... and even then it's rare that you'll be going there...
Palych
Уже с Приветом
Posts: 13683
Joined: 16 Jan 2001 10:01

Re: open VPN connection programmatically ( Java ?)

Post by Palych »

StrangerR wrote:Вы тут чего то не понимаете. VPN клиент это часть ОС. И нельзя его НАПИСАТЬ!
Ещё скажите что для прикладной программы не важно как устанавливаются сетевые соединения. ;)
User avatar
Slonjra
Уже с Приветом
Posts: 6677
Joined: 02 Sep 2003 15:19
Location: Через речку от Манхэттена

Re: open VPN connection programmatically ( Java ?)

Post by Slonjra »

Medium-rare wrote:[
Всегда очень полезно от вас узнать, что к чему. Вы и СлонЮра - кладези админного опыта. :good:
На кнопочку модератору что ли нажать? Может и научит вас чему-нибудь?
Резюме — это список дел, которые ты больше никогда не хочешь делать.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

Простите, Slonjra. Я ведь в восхищении.
... and even then it's rare that you'll be going there...
User avatar
Slonjra
Уже с Приветом
Posts: 6677
Joined: 02 Sep 2003 15:19
Location: Через речку от Манхэттена

Re: open VPN connection programmatically ( Java ?)

Post by Slonjra »

Medium-rare wrote:Простите, Slonjra. Я ведь в восхищении.
Я надеюсь , что вы понимаете о чем базар. Мне тоже многие ваши идеи кажутся не совсем верными,(влючая перевод вашего ника), но это не повод, что б переходить на личности
Резюме — это список дел, которые ты больше никогда не хочешь делать.
DropAndDrag
Уже с Приветом
Posts: 6019
Joined: 11 Mar 2011 05:36

Re: open VPN connection programmatically ( Java ?)

Post by DropAndDrag »

StrangerR wrote:Вы тут чего то не понимаете. VPN клиент это часть ОС. И нельзя его НАПИСАТЬ! Что мешает просто вызвать скрип который поднимет VPN а когда стало не нужно - еще один который его закроет? И наверняка есть интерфейс через Power Shell (ну и на линуксах есть через shell).

Хотя еще возникает вопрос, а что собственно тут называеют VPN клиентом? А то т им обзывают OpenVPN то PPTP то SSTP а то IPSEC.
ну не понимаю, значит не понимаю (хотя обычно я сам вижу, что не понимаю значительно раньше окружающих :mrgreen: ).
но вот не задача, к примеру Cisco вовсю толкает вот такую программульку http://www.cisco.com/c/en/us/support/se ... -home.html. и, блин, устанавливается эта штукенция и под Винды, и под Мак, и Линукс. и, блин, никто не спорит что это такое :crazy:
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: open VPN connection programmatically ( Java ?)

Post by StrangerR »

Palych wrote:
StrangerR wrote:Вы тут чего то не понимаете. VPN клиент это часть ОС. И нельзя его НАПИСАТЬ!
Ещё скажите что для прикладной программы не важно как устанавливаются сетевые соединения. ;)
Конечно, неважно. Не вы первые узнаете об этом. Тут только что кастомер открыл вопрос - мол у них много много Хен Десктопов на сервере, и _а почему наши пользователи не могут установить с вами SSTP соединение_.

А потому что VPN часть TCP/IP стека. Никакого отношения к пользовательским программам и тем паче прикладным программам НЕ ИМЕЕТ. От слова СОВСЕМ НЕ ИМЕЕТ. Нет конечно можно написать ЭМУЛЯТОР VPN и засунуть его в программу на жабе, но такого изврата я как-то еще не встретил. А так
- VPN это просто еще один интерфейс внизу TCP/IP
- он является объектом операционной системы, живет в ядре (ну или дает сервис для ядра)

Когда ваша прикладнуха открывает TCP/IP (или прочее IP) соединение, она вызывает ядро ОС, Ядро ОС вызывает соединение которое направляется через таблицу роутинга на какой то интерфейс. Одним из интерфейсов может вполне быть и VPN (а точнее в винде вообще нет VPN а есть SSTP, PPTP или L2TP или для особо извращенных они могут сунуть в ОС циско клиента или OpenVPN AS клиента). И все это в самом нижнем уровне и рулит пакетами без знания какой пользователь или тем паче программа их сгенерила.

Все что вы видите из приложения - это фигню которая ВЫЗЫВАЕТ операции с VPN в ядре ОС. Установления связи или ее обрывание или еще что-то. Иногда можно сделать так чтобы приложение при установлении соединения сначала потребовало создать VPN (то что им мелкомягкие называют). НО суть не меняется. Это ДРАЙВЕР или МОДУЛЬ ЯДРА и он добавляет - убирает интерфейс в ядро. Ядро не позволит какому то левому приложению служить для него сетевым модулем. МОжет только позволить поднять или опустить предописанный в ядре сетевой модуль.

Поэтому и _нельзя написать VPN клиента в приложении_. На жабе вероятно можно но он будет каким то там интерфейсом производить сетевой сервис _для ядра_ и должен удовлетворять всем требованиям на эти вещи. И мало кто такое на жабе писать будет.
примеру Cisco вовсю толкает вот такую программульку http://www.cisco.com/c/en/us/support/se ... -home.html" onclick="window.open(this.href);return false;. и, блин, устанавливается эта штукенция и под Винды, и под Мак, и Линукс. и, блин, никто не спорит что это такое :crazy:
Знаю я эту штуку. Она как раз ставит свои модули в ЯДРО ОС и собственно работает как часть операционки. Кстати, эти цисько поделки так хорошо влезают в систему, что во первых их оттуда потом хрен выковыряещь, во вторых, они вполне могут конфликтовать с другими поделками. А итоге тот же самый - доп интерефейс на который может ссылаться таблица роутинга. Хотя циська иногда делала и откровенно хакерские вещи, похоже просто перехватывая часть IP стека на себя - что еще хуже.

(засадить какую то соплю которая будет перехватывать сокет в конкретном приложении и изображать из себя TCP/IP стек вероятно можно. И вероятно она даже сумеет обмануть бразер и он будет работать. НО полноценным VPN клиентом такая фигня никогда не станет, а будет именно что очередной хакеро-подобной поделкой. КОторая не сумеет работать с ЛЮБОЙ программой имеющей дело с IP стеком. Пару программ вроде файрефокса она пожалуй и обманет.)
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

VPN клиенту ничего не надо от ядра OS. Это программа, работающая в User Mode. Любая современная OS даёт VPN клиенту точки входа для перехвата активности на socket.
... and even then it's rare that you'll be going there...
Palych
Уже с Приветом
Posts: 13683
Joined: 16 Jan 2001 10:01

Re: open VPN connection programmatically ( Java ?)

Post by Palych »

StrangerR wrote:
Palych wrote:
StrangerR wrote:Вы тут чего то не понимаете. VPN клиент это часть ОС. И нельзя его НАПИСАТЬ!
Ещё скажите что для прикладной программы не важно как устанавливаются сетевые соединения. ;)
Конечно, неважно.
Прошли те времена...
Сейчас программы то и дело спрашивают: "мы на Wi-Fi или где?"
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: open VPN connection programmatically ( Java ?)

Post by Сабина »

DropAndDrag wrote:как написать VPN клиента не знаю, а вот спросить хочу для расширения кругозора c точки зрения security.

я так понимаю у программы, которую хочет написать Сабина, для VPN будет использоваться user/password, который будет читаться из файла (понятно, что можно обеспечить ограничение доступа к файлу, шифрование самих значений, периодическую смену). также при использовании VPN обеспечивается доступ ко все сети, а не только нескольким сервисам на каком-то сервере.
в то же время, есть другой, скорее всего улучшенный, способ - дополнительно использовать SecureID (или что-то подобное), который генерит "случайное" число. такой путь безопасне и предположу, что все более менее серьезные конторы уже перешли на SecureID. Мне кажется (опять-таки я не смотрел гугл на эту тему), что программно сделать такой способ сложнее, если вообще возможно (впрочем можно поставить камеру и читать по мере надобности).
впрочем, нормальные конторы оставляют доступ по sftp для внешних пользователей (можно конечно ssh и vpn, но у нас внешним пользователям нужно только скачать файлы). но доступ дается только к серверу, который за пределами сети организации, а этому серверу позволены очень ограниченные телодвижения внутри организации.

что скажет приличный IT people? у меня более менее правильное представление как организован доступ в нормальных конторах? конечно, ссылки приветствуются.

ну и на последок. Сабина, а ты сделай следующие. со своей программы запусти какого-нибудь стандартного VPN клиента. когда запуститься VPN клиент, то научи свою программу рыться по контролс у этого клиента и тупо записывать данные в нужные :crazy:
иногда меня такой херней вынуждают заниматься компании, которые не предоставляют API для connectivity. если в windows, то я подскажу чем воспользоваться и какой-нибудь код скинуть могу. В Linux это тоже должно работать, но пока меня жизнь не заставляла.
Я первый раз сталкиваюсь с необходимостью VPN для доступа к эндпойнту. Токен есть - бери сессию, данные и всем спасибо. Токен программно несложно сгенерировать когда зарегистрирован с identity provider и проч. Поэтому и спросила майти олла то же самое что и вы "как это делают в приличных конторах"
https://www.youtube.com/watch?v=wOwblaKmyVw
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: open VPN connection programmatically ( Java ?)

Post by StrangerR »

Medium-rare wrote:VPN клиенту ничего не надо от ядра OS. Это программа, работающая в User Mode. Любая современная OS даёт VPN клиенту точки входа для перехвата активности на socket.
Это у вас выйдет не VPN а сопля, точнее симулятор VPN. Нормальный VPN как раз является (вполне возможно что работающей в юзер моде) программой которая добавляет интерфейс в ядро ОС ну а заодно правит таблицу роутинга. Никаким перехватом она не занимается, это дело ядра, тем паче что _перехватить сокет_ - вы собрались написать полностью с нуля весь TCP/IP уровень, что ли?

Сравните таблицу роутинга и список интерфейсов при опущенном и при поднятом VPN, что виндовом что OpenVPN. Надеюсь умеете эти таблицы выдавать из Виндуза?
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

Это у нас не VPN, а клиент VPN. К ядру OS из внешних программ напрямую подключаются только драйверы устройств и отладчики.
... and even then it's rare that you'll be going there...
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: open VPN connection programmatically ( Java ?)

Post by StrangerR »

Medium-rare wrote:Это у нас не VPN, а клиент VPN. К ядру OS из внешних программ напрямую подключаются только драйверы устройств и отладчики.
И что это меняет? Вы должны добавить ИНТЕРФЕЙС в сетевой стек (причем в самый низ по сути), а это и есть модуль ядра или драйвер устройства. То что вам выдан интерфейс позволяющий работать с этим на юзерском уровне привилегий ничего не меняет - ваша программа подключается к ядру и обслуживает все пакеты которые роутинг вам отправляет. Вы же не будете с нуля писать весь IP стек для себя.

Нет особой разницы между клиентом VPN или интерфейсом к WiFi сети или интерфейсом к езернету - во всех случаях вы или добавляете драйвер в ядро или ядро допускает вашу программу к работе в качестве по сути драйвера. И поэтому юзер без привилегий сделать это не может, и писать такие вещи на жабе - полный нонсенс. Хотя особо одаренные хакеры (Циська кстати этим отличалась) умудряются вместо написания сетевого интерфейса, действительно, перехватывать сокеты на каком то верхнем уровне и потом эмулировать tcp/ip стек. Не знаю как другие а циська когда то такое учудила и потом писались целые статьи на тему, как эту бомбу убрать нафиг.

И кстати, если есть доступ к обоим концам, не проще ли поднять SSL и не мучаться? Если нет, то непонятно, зачем программе мучаться с VPN когда все что нужно это дернуть систему сказав ей _хочу поднять такой то интерфейс_ и пусть сама дальше разбирается.

Наберите

ipconfig
netstat -rn

ДО И ПОСЛЕ того как поднимете виндозный VPN (в любом из трех режимов) или OpenVPN AS клиент - и убедитесь что у вас добавился новый сетевой интерфейс (в ОС, не в вашу личную сессию а ВСЕМ) и поменялся роутинг (ну и DNS впридачу). Никакого _перехвата_ сокетов там и в помине нет, потому что сокет работает в самом вверху а интерфейс в самом низу, а между ними управление сокетом - TCP/IP - IP - ARP - load balancing и прочая фигня. И вам нужно добавить сетевой модуль В САМЫЙ НИЗ этой иерархии, иначе у вас будет не VPN а какой то полуживой эмулятор оного.
Я первый раз сталкиваюсь с необходимостью VPN для доступа к эндпойнту
.

Этого добра хоть завались. Например некоторые VoIP сети так устроены. Но я подозреваю, что все клиенты для таких случаев просто дергают ОС на тему _создай мне VPN_ (чаще голимый IPSEC что еще хуже) а не изобретают его сами. Хотя с IPSEC полная труба и я там ничему не удивлюсь, в том числе и перехвату сокетов и собственным поделкам приложения. Но это все таки неправильно, правильно или использовать системный или уж использовать https + что там душе угодно для аутентификации.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: open VPN connection programmatically ( Java ?)

Post by Medium-rare »

Нет, это не есть драйвер устройства. Никакого. Все устройства обеспечены своими драйверами, и никто не лезет ими управлять со стороны VPN. На этом объяснять разницу между программой в user mode и драйвером в ядре или любым драйвером закончил. :)
... and even then it's rare that you'll be going there...
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: open VPN connection programmatically ( Java ?)

Post by helg »

С одной стороны, VPN - это сетевой интерфейс, стало быть, его создаёт ядро. С другой стороны, уважающие себя ядра не пускают на своё пространство ничего чужого, дабы не паниковать. Для решения противоречия такие ядра имеют tun- интерфейс. Со стороны - как полноценный сетевой, типа eth. Но внутри - реализован процессом, а не ядром. Стабильность, но за счёт производительности, поскольку каждый пакетик по нескольку раз копируется между ядерным и пользовательским пространствами.
zVlad
Уже с Приветом
Posts: 15312
Joined: 30 Apr 2003 16:43

Re: open VPN connection programmatically ( Java ?)

Post by zVlad »

Я согласен с StrangerR на предмет почему бы не SSL (TLS, AT-TLS). Полагаю что "доступные только через VPN" означает что никто в той конторе секьюрити не занимается полагая что VPN это делает автоматом как бы. Такой ленивый подход к секьюр коннектишн.

Return to “Вопросы и новости IT”