Вообще говоря с гуем было бы куда проще. Но у нас server-side решение, по этому будем плакать и колоться.
Что бы потом можно было не подглядывая в шпоры делать sudo service vpn2work start
По мотивам заметок https://askubuntu.com/a/7617 ставим зависимости `sudo apt-get install vpnc network-manager-openconnect network-manager-vpnc vpnc-scripts`
и потом запустить `sudo openconnect https://vpn.my-corp-name.ru` и прописать что то такое
Если у вас все зевелось с пол пинка, то вам повезло.
Если не завелось и у вас отваливается даже ssh соединение - битек-вилы.
С огромной долей вероятности с vpn-сервера вы стягиваете новые роуты и затираете ими старые. Ну а как можно обратиться к виртуалке, если она не знает айпишник gateway'я и ли покрутить вам какую-нибудь веб-приложку? Да ни как.
Но отчаяние проходит, если начать гуглить `openconnect split routing`. По запросу достаточно теории, но как вы помните, мы ставили `vpnc-scripts` , которые положили в `ls -la /usr/share/vpnc-scripts/` Более того, на сайте есть отсылка на исхода. Если у вас творится непонятная херня, вам пригодится любая информация, почитайте на досуге.
И среди них есть интересный момент и запрос уже надо составлять так `openconnect CISCO_SPLIT_INC` в зависимости от натренированности вашего гугл-профиля на технические изыскания вы рано или поздно придете на форум bsd'шников . Там чувачок посмотрел что уже украдено до нас еще в далеком 2009 году и решил повторить решение с враппером. Оно одно из самых адекватных.
Вы сначала узнаете ip ресурсов, которые вам нужны.
Потом прописываете их в враппере.
Враппер вы пинаете спец командой для авторизации используя хост, пользовательскую группу, имя пользака ну и пароль.
Враппер передает их стародавним скриптам соединения и вытягивает только необходимые роуты.
У вас поднимается соединение с сохранением текущего gw и нового gw для вычисления необходимого ip, к которому вы хотите обращаться по ту сторону туннеля. Ну тоесть без целевого ip вы нихрена не сможете.
Это волшебно, но придется поебаться. Добрая фея в отпуске, остались только зарисовки на салфетке от freebsd'шников и своя логика.
вот тут ебаный пиздец, держитесь ребзя. На данном моменте у меня пригорало чуть пониже спины, по этому выложу финальный вариант реализации под ubuntu server.
Создаем новый файл `sudo vim /usr/share/vpnc-scripts/vpnc-script-corp-split` со следующим содержимым
Теперь делаем пользовательский скрипт, который будет пинать враппер `vim ~/vpn_to_work.sh` со следующим содержимым
для начала сделаем конфиг `sudo vim /etc/vpnc/work.conf` для подключения
что бы использовать командой `sudo vim /etc/vpnc/vpn2work.sh` с содержимым
можно сделать косо по мотивам https://github.com/jibla/ubuntu-openconnect-command
но не вышел аленький цветочек, потому что `Failed to start vpn.service: Unit vpn.service not found.` явно намекает, что не хватает systemd скрипта или еще чего то.
Можно было только `sudo /etc/init.d/vpn.sh stop` но я это все колхозил не для того, что бы помнить еще эти фигли.
По мотивам https://wiki.archlinux.org/index.php/Systemd_(Русский)
и https://discourse.osmc.tv/t/setting-openconnect-to-autoconnect-at-startup/8601/2
Делаем `sudo vim /etc/systemd/system/vpn2work.service` c потрохами
и прогоняем
Что бы потом можно было не подглядывая в шпоры делать sudo service vpn2work start
По мотивам заметок https://askubuntu.com/a/7617 ставим зависимости `sudo apt-get install vpnc network-manager-openconnect network-manager-vpnc vpnc-scripts`
и потом запустить `sudo openconnect https://vpn.my-corp-name.ru` и прописать что то такое
vpn.my-corp-name.ru group: RemoteVPN user: corp-user@rcom.local password: hardpass
Если у вас все зевелось с пол пинка, то вам повезло.
openconnect routes trouble
Если не завелось и у вас отваливается даже ssh соединение - битек-вилы.
С огромной долей вероятности с vpn-сервера вы стягиваете новые роуты и затираете ими старые. Ну а как можно обратиться к виртуалке, если она не знает айпишник gateway'я и ли покрутить вам какую-нибудь веб-приложку? Да ни как.
Но отчаяние проходит, если начать гуглить `openconnect split routing`. По запросу достаточно теории, но как вы помните, мы ставили `vpnc-scripts` , которые положили в `ls -la /usr/share/vpnc-scripts/` Более того, на сайте есть отсылка на исхода. Если у вас творится непонятная херня, вам пригодится любая информация, почитайте на досуге.
И среди них есть интересный момент и запрос уже надо составлять так `openconnect CISCO_SPLIT_INC` в зависимости от натренированности вашего гугл-профиля на технические изыскания вы рано или поздно придете на форум bsd'шников . Там чувачок посмотрел что уже украдено до нас еще в далеком 2009 году и решил повторить решение с враппером. Оно одно из самых адекватных.
как это говно должно работать - теория
Вы сначала узнаете ip ресурсов, которые вам нужны.
Потом прописываете их в враппере.
Враппер вы пинаете спец командой для авторизации используя хост, пользовательскую группу, имя пользака ну и пароль.
Враппер передает их стародавним скриптам соединения и вытягивает только необходимые роуты.
У вас поднимается соединение с сохранением текущего gw и нового gw для вычисления необходимого ip, к которому вы хотите обращаться по ту сторону туннеля. Ну тоесть без целевого ip вы нихрена не сможете.
Это волшебно, но придется поебаться. Добрая фея в отпуске, остались только зарисовки на салфетке от freebsd'шников и своя логика.
проба пера
вот тут ебаный пиздец, держитесь ребзя. На данном моменте у меня пригорало чуть пониже спины, по этому выложу финальный вариант реализации под ubuntu server.
Создаем новый файл `sudo vim /usr/share/vpnc-scripts/vpnc-script-corp-split` со следующим содержимым
#!/bin/sh # Add one IP to the list of split tunnel add_ip () { export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_ADDR=$1 export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_MASK=255.255.255.255 export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_MASKLEN=32 export CISCO_SPLIT_INC=$(($CISCO_SPLIT_INC + 1)) } # Initialize empty split tunnel list export CISCO_SPLIT_INC=0 # Delete DNS info provided by VPN server to use internet DNS # Comment following line to use DNS beyond VPN tunnel unset INTERNAL_IP4_DNS # List of IPs beyond VPN tunnel add_ip 10.61.0.96 # dev stage add_ip 10.61.0.97 # preprod stage add_ip 10.60.0.145 # prod # Execute default script . /usr/share/vpnc-scripts/vpnc-scriptи делаем из него исполняемый файл `sudo chmod r+x /usr/share/vpnc-scripts/vpnc-script-corp-split`
Теперь делаем пользовательский скрипт, который будет пинать враппер `vim ~/vpn_to_work.sh` со следующим содержимым
#!/bin/sh sudo openconnect --user=corp-user@rcom.local \ --authgroup=RemoteVPN --script=/usr/share/vpnc-scripts/vpnc-script-corp-split\ vpn.my-corp-name.ru
целевое решение
для начала сделаем конфиг `sudo vim /etc/vpnc/work.conf` для подключения
# connection parameters to my-corp-name user=corp-user@rcom.local authgroup=RemoteVPN script=/usr/share/vpnc-scripts/vpnc-script-corp-split no-dtls no-cert-check passwd-on-stdin
что бы использовать командой `sudo vim /etc/vpnc/vpn2work.sh` с содержимым
#!/bin/sh VPN_CONFIG="/etc/vpnc/work.conf" VPN_HOST="https://vpn.my-corp-name.ru" VPN_PASS='myhardpass' PID="/var/run/openconnect.pid" TEMP_LOG="/tmp/status.txt" echo ${VPN_PASS} | openconnect --config=${VPN_CONFIG}\ ${VPN_HOST} &> $TEMP_LOG 2>&1если заработало, то поехали дальше
сервис
можно сделать косо по мотивам https://github.com/jibla/ubuntu-openconnect-command
но не вышел аленький цветочек, потому что `Failed to start vpn.service: Unit vpn.service not found.` явно намекает, что не хватает systemd скрипта или еще чего то.
Можно было только `sudo /etc/init.d/vpn.sh stop` но я это все колхозил не для того, что бы помнить еще эти фигли.
По мотивам https://wiki.archlinux.org/index.php/Systemd_(Русский)
и https://discourse.osmc.tv/t/setting-openconnect-to-autoconnect-at-startup/8601/2
Делаем `sudo vim /etc/systemd/system/vpn2work.service` c потрохами
[Unit] Description=Connect to my corporation VPN After=syslog.target After=network.target [Service] Type=simple User=root Environment="password=hardpassword" ExecStart=/bin/sh -c 'echo $password | sudo openconnect \ -b --config=/etc/vpnc/work.conf https://vpn.my-corp-name.ru' Restart=always [Install] WantedBy=multi-user.target
и прогоняем
sudo systemctl daemon-reload sudo systemctl start vpn2work sudo systemctl status vpn2workкстати, изначально задуманная команда тоже будет работать `sudo service vpn2work start`