- Installing and Using AnyConnect on Ubuntu Desktop
- Available Languages
- Download Options
- Objective
- Introduction
- AnyConnect Software Version
- Table of Contents
- Installing AnyConnect Secure Mobility Client v4.9.x
- Prerequisites
- Check these other articles out!
- Applicable Devices | Software Version
- Licensing Information
- Step 1
- Step 2
- Step 3
- Step 4
- Step 5
- Step 6
- Step 7
- Step 8
- Step 9
- Using AnyConnect Secure Mobility Client v4.9.x
- Step 1
- Step 2
- Step 3
- Step 4
- Uninstalling AnyConnect Secure Mobility Client v4.9.x
- Step 1
- Step 2
- Step 3
- Conclusion
- AnyConnect App
- heatzync / HOWTO.md
- Как в линуксе подключиться к корпоративному VPN с помощью openconnect и vpn-slice
- Cisco Connect
- Openconnect
- Cертификат
- Автоматический ввод фиксированной части пароля
- Корпоративный VPN не позволяет ходить в интернет.
- Разделение трафика с помощью vpn-slice
- Автоматическая модификация файла hosts
- Искать адреса всех поддоменов в DNS, который отдала VPN
- Как ходить через VPN в отдельные сервисы
- Скрипт для поднятия VPN с одним аргументом
- Запуск openconnect в фоне
- Без vpn-slice. Вместо послесловия
- Таблица маршрутизации
- До включения VPN было так
- После вызова openconnect без vpn-slice стало так
- А после вызова openconnect в комбинации с vpn-slice вот так
- Роутинг запросов к почтовому серверу без vpn-slice
Installing and Using AnyConnect on Ubuntu Desktop
Available Languages
Download Options
Objective
The objective of this article is to guide you through installing, using, and the option of uninstalling AnyConnect VPN Client v4.9.x on Ubuntu Desktop.
This article is only applicable to the RV34x series routers, not Enterprise products.
Introduction
AnyConnect Secure Mobility Client is a modular endpoint software product. It not only provides Virtual Private Network (VPN) access through Secure Sockets Layer (SSL) and Internet Protocol Security (IPsec) Internet Key Exchange version2 (IKEv2) but also offers enhanced security through various built-in modules.
Follow the steps in this article to install the Cisco AnyConnect VPN Mobility Client on a Ubuntu Desktop. In this article, Ubuntu version 20.04 is used.
AnyConnect Software Version
Table of Contents
Installing AnyConnect Secure Mobility Client v4.9.x
This toggled section provides details and tips for beginners.
Prerequisites
- You need to purchase client license(s) from a partner like CDW or through your company’s device procurement. There are options for 1 user (L-AC-PLS-3Y-S5) or packets of licenses including one year for 25 users (AC-PLS-P-25-S). Other license options available as well, including perpetual licenses. For more details on licensing, check out the links in the Licensing Information section below.
- Download the latest version of firmware available for your router.
Check these other articles out!
Applicable Devices | Software Version
- RV340 | 1.0.03.21 (Download latest)
- RV340W | 1.0.03.21 (Download latest)
- RV345 | 1.0.03.21 (Download latest)
- RV345P | 1.0.03.21 (Download latest)
Licensing Information
AnyConnect client licenses allow the use of the AnyConnect desktop clients as well as any of the AnyConnect mobile clients that are available. You will need a client license to download and use the Cisco AnyConnect Secure Mobility Client. A client license enables the VPN functionality and are sold in packs of 25 from partners like CDW or through your company’s device procurement.
Want to know more about AnyConnect licensing? Here are some resources:
Step 1
Open a web browser and navigate to the Cisco Software Downloads webpage.
Step 2
In the search bar, start typing ‘Anyconnect’ and the options will appear. Select AnyConnect Secure Mobility Client v4.x.
Step 3
Download the Cisco AnyConnect VPN Client. Most users will select the AnyConnect Pre-Deployment Package (Linux 64-bit) option.
The images in this article are for AnyConnect v4.9.x, which was latest version at the time of writing this document.
If you purchased a license and you are unable to download AnyConnect, call +1 919-993-2724. Select option 2. You will need to know your Cisco ID (the one you use to log into Cisco.com) and the sales order number when you call. They will get that situation all straightened out.
Step 4
Open the Terminal by pressing Ctrl+Alt+T on your keyboard. To navigate to the folder where you have downloaded the AnyConnect Client Package, use the command, ‘cd directory name’. For more information on the ‘cd’ command, click here.
cd [Directory Name]
In this example, the file is placed on the Desktop.
The directory may be different based on the location of the AnyConnect file download. For long filenames or paths, start typing some characters and press the tab key on your keyboard. The filename will auto-populate. If it doesn’t even after you press tab twice, it indicates that you need to type more number of unique characters. Alternately, you can use the ‘ls’ command to list the files in your current directory.
Step 5
The initial download is a tarball archive (several files packed into one), which must be extracted. The command ‘tar xvf filename’ will extract the contents to the same directory in which the initial file is located.
tar xvf [Filename]
For more information on the ‘tar’ command, click here.
Step 6
Once the folder is extracted, use the ‘cd directory name’ command again to navigate into the folder.
cd [Directory Name]
Step 7
After navigating into the main folder, ‘cd’ into the vpn sub-folder.
Step 8
To run the AnyConnect install script, type ‘sudo ./vpn_install.sh’. This will begin the installation process using superuser permissions.
For more details on the ‘sudo’ command, click here.
Step 9
Accept the terms in the license agreement to complete the installation by typing ‘y’.
The AnyConnect installation should complete, and the Terminal window can be closed.
Using AnyConnect Secure Mobility Client v4.9.x
Step 1
To access the Anyconnect app, open the Terminal by pressing Ctrl+Alt+T on your keyboard. Use the command, ‘/opt/cisco/anyconnect/bin/vpnui’.
If you encounter any errors through the Terminal, you can access the app from the applications menu as shown below.
To access the applications menu using the User Interface (UI), click on the start icon (appears as nine dots on the lower left corner). Choose the Anyconnect app.
Alternatively, press Super+A (Super key is the windows icon key) on your keyboard to bring up the search bar. Start typing ‘Anyconnect’ and the app will appear.
Step 2
Click on the Anyconnect app.
Step 3
Enter the IP Address or Hostname of your desired server followed by the port number.
For RV340 family, the default port number is 8443.
Step 4
Some connections may not be secure using a trusted SSL certificate. By default, AnyConnect Client will block connection attempts to these servers.
Uncheck Block connections to untrusted servers to connect to these servers.
Uninstalling AnyConnect Secure Mobility Client v4.9.x
Step 1
Using Terminal, navigate to the folder that contains the uninstall shell script using the ‘cd’ command.
In a default installation, these files will be located in /opt/cisco/anyconnect/bin/.
Step 2
To run the Anyconnect uninstall script, enter ‘sudo ./vpn_uninstall.sh’
This will begin the uninstall process using superuser permissions. For more information on the ‘sudo’ command, click here.
Step 3
At the prompt, enter the sudo password and the client software will complete uninstallation.
Conclusion
There you have it! You have now successfully learned the steps to install, use, and uninstall the Cisco AnyConnect Secure Mobility Client v4.9.x on Ubuntu Desktop.
For community discussions on Site-to-Site VPN, go to the Cisco Small Business Support Community page and do a search for Site-to-Site VPN.
We want the best for our customers, so if you have any comments or suggestions regarding this topic, please send us an email to the Cisco Content Team.
AnyConnect App
The Anyconnect App can be downloaded from the Google Play store or the Apple store.
Источник
heatzync / HOWTO.md
HOWTO connect to a company’s VPN using the Cisco VPN client on linux
This HOWTO explains connecting to a VPN gateway over IPSec in «cert auth mode» utilizing the Cisco VPN client. The «cert auth mode» refers to the terms used in the vpnc man page, i.e. server + client certificates. The «cert auth mode» has not been implemented for vpnc, otherwise we would just use vpnc and avoid the headache that follows. openconnect is another alternative, but it does not support IPSec, only HTTPS/SSL. This HOWTO is written with the aim to provide a single document to describe all the steps required, instead of having to search many different things on the Internet.
This HOWTO was written from the perspective of an openSUSE 12.1 user, running a 3.1.10-1.9-desktop x86_64 kernel. The author does not claim to be an expert on any terms used, so if you find a mistake then please submit a patch.
Get the certificate provided by CompanyA
The company we are trying to connect to should provide us with some sort of a certificate, e.g. certificate.pfx. This type of certificate is a PKCS12 certificate which bundles the CA certificate for server authentication, the client/user certificate as well as the primary key. Save it somewhere on disk, e.g.:
Install and prepare kernel-source for our linux distro
In order to «compile» (Cisco calls it «install») the Cisco IPSec kernel module (see later section) we need the kernel sources for our distro. In openSUSE 12.1 do the following:
Make sure the version that will be installed is the same as the version we are currently running:
When the kernel-source has been installed, execute the following as root:
Download, patch and install Cisco VPN client
Now that the kernel-source has been installed we can download, patch and install the Cisco VPN client with the following steps (as root):
Remember to specify the kernel-source directory as /usr/src/linux- .
The module will be installed to /lib/modules/ /CiscoVPN/cisco_ipsec.ko.
Start the Cisco VPN daemon
The Cisco VPN client installation suggests starting the vpncclient_init service, so do it:
If we get errors such as:
then (1) we compiled/linked the module with the wrong kernel-source or (2) we forgot to symlink the Module.symvers file. We will have to repeat some of the steps above.
Import provided certificate for use with Cisco VPN client
The provided PKCS12 certificate should now be imported. The following commands can be used (as root):
Supply the certificate filename, e.g. /tmp/certificate.pfx as well as the password with which the certificate is locked/encrypted. Next, enter a password that we will easily remember.
View the imported certificate:
and provide the number of the corresponding certificate when asked. The certificate information will be displayed. Take note of the «Subject» and «Serial #» fields as they will be required in the next step.
Configure Cisco VPN client
Configure a profile for connecting to CompanyA. Let’s call the profile «CompanyA». As root:
and change the following properties as follows:
The moment of truth has arrived. To connect to the VPN of CompanyA, simply execute:
assuming /usr/local/bin is in our PATH.
When prompted, provide the certificate password we chose in a previous step as well as our unique username and password that should also have been provided by CompanyA. We should now be connected.
Источник
Как в линуксе подключиться к корпоративному VPN с помощью openconnect и vpn-slice
Хотите использовать линукс на работе, но корпоративный VPN не даёт? Тогда эта статья может помочь, хотя это не точно. Хочу заранее предупредить, что вопросы администрирования сетей я понимаю плохо, поэтому не исключено, что я всё сделал неправильно. С другой стороны не исключено, что я смогу написать руководство так, что оно будет понятно обычным людям, так что советую попробовать.
В статье много лишней информации, но без этих знаний я бы не смог решить проблемы, которые у меня неожиданно появлялись с настройкой vpn. Думаю, что у любого, кто попытается применить это руководство, возникнут проблемы, которых у меня не было, и надеюсь, что эта лишняя информация поможет эти проблемы самостоятельно решить.
Большинство команд, используемых в руководстве нужно выполнять через sudo, который для краткости убран. Имейте в виду.
Большинство ip адресов подверглись жестокой обфускации, поэтому если видите адрес наподобие 435.435.435.435 — там должен быть какой-то нормальный ip, специфичный для вашего случая.
У меня Ubuntu 18.04, но думаю с небольшими правками руководство можно применять и к другим дистрибутивам. Однако в этом тексте линукс == Ubuntu.
Cisco Connect
Те, кто сидит на Windows или MacOS могут подключиться к нашему корпоративному VPN через Cisco Connect, которому нужно указать адрес гейтвея и при каждом подключении вводить пароль, состоящий из фиксированной части и кода, генерируемого Google Authenticator.
В случае с Линуксом, завести Cisco Connect не получилось, зато получилось нагуглить рекомендацию использовать openconnect, сделанный специально для того, чтобы заменить Cisco Connect.
Openconnect
По идее в убунте есть специальный графический интерфейс для openconnect но у меня он не заработал. Может оно и к лучшему.
В убунте openconnect ставится из пакетного менеджера.
Сразу после установки можно попробовать подключиться к VPN
vpn.evilcorp.com это адрес вымышленного VPN\
poxvuibr — имя вымышленного пользователя
openconnect попросит ввести пароль, который, напомню, состоит из фиксированной части и кода из Google Authenticator, а потом попробует подключиться к vpn. Если получилось, поздравляю, можете смело пропускать середину в которой много боли и переходить к пункту про работу openconnect в фоне. Если не заработало, то можно продолжать. Хотя если получилось при подключении например с гостевого вайфая на работе, то возможно радоваться и рановато, надо попробовать повторить процедуру из дома.
Cертификат
С высокой вероятностью ничего не запустится, а выхлоп openconnect будет выглядеть как-то вот так:
С одной стороны это неприятно, потому что к VPN подключения не произошло, но с другой стороны как поправить эту проблему в принципе понятно.
Тут сервер отослал нам сертификат, по которому можно определить, что подключение происходит именно к серверу родной корпорации, а не к злобному мошеннику, а системе этот сертификат неизвестен. И поэтому она не может проверить, настоящий сервер или нет. И поэтому на всякий случай прекращает работу.
Для того, чтобы openconnect всё-таки подключился к серверу, нужно явным образом сказать ему, какой сертификат должен прийти от VPN сервера с помощью помощью ключа —servercert
А узнать какой сертификат нам отослал сервер можно прямо из того, что напечатал openconnect. Вот из этого куска:
Вот такой командой можно попробовать подключиться ещё раз
Возможно теперь заработало, тогда можно переходить к концу. Но лично мне Убунта показала фигу вот в такой форме
habr.com будет ресолвиться, но зайти туда будет нельзя. Адреса типа jira.evilcorp.com вообще не ресолвятся.
Что тут произошло, мне не понятно. Но эксперимент показывает, что если добавить в /etc/resolv.conf строку
то адреса внутри VPN начнут магическим образом ресолвиться и по ним можно будет ходить, то есть то, что ищет какими DNS ресолвить адреса, смотрит именно в /etc/resolv.conf, а не куда-то ещё.
Что подключение к VPN есть и оно работает, можно убедиться и без правок в /etc/resolv.conf, для этого достаточно ввести в браузере не символьное имя ресурса из vpn, а его ip адрес
По итогу получается две проблемы
- при подключении к VPN не подхватывается её dns
- весь трафик идёт через vpn, который не позволяет ходить в интернет
Что делать я сейчас расскажу, но сначала немного автоматизации.
Автоматический ввод фиксированной части пароля
К текущему моменту вы скорее всего уже ввели пароль не менее пяти раз и эта процедура вас уже изрядно утомила. Во-первых, потому что пароль длинный, во-вторых потому что при вводе нужно уложиться в фиксированный временной промежуток
Окончательное решения проблемы в статью не вошло, но можно сделать так, чтобы фиксированную часть пароля не пришлось вводить по многу раз.
Положим, фиксированная часть пароля — fixedPassword, а часть из Google Authenticator 567 987. Весь пароль целиком openconnect можно передать через стандартный ввод с помощью аргумента —passwd-on-stdin .
Теперь можно постоянно возвращаться к последней введённой команде и менять там только часть из Google Authenticator.
Корпоративный VPN не позволяет ходить в интернет.
Вообще не очень неудобно, когда для того, чтобы сходить на хабр приходится использовать отдельный компьютер. Отсутствие возможности копипастить со stackoverfow, вообще может парализовать работу, поэтому что надо что-то делать.
Нужно как-то организовать, чтобы когда надо зайти на ресурс из внутренней сети, линукс ходил в vpn, а когда надо зайти на хабр — ходил в интернет.
openconnect после запуска и установки соединения с vpn, выполняет специальный скрипт, который находится в /usr/share/vpnc-scripts/vpnc-script. В скрипт на вход передаются какие-то переменные, а он делает настройку vpn. К сожалению, я не смог разобраться, как разделить потоки трафика между корпоративным vpn и остальным интернетом с помощью родного скрипта.
Видимо специально для таких как я была разработана утилита vpn-slice, которая позволяет направлять трафик по двум каналам без танцев с бубном. Ну, то есть танцевать придётся, но шаманом при этом быть не обязательно.
Разделение трафика с помощью vpn-slice
Во-первых vpn-slice придётся поставить, с этим придётся разобраться самостоятельно. Если в комментариях будут вопросы, я напишу по этому поводу отдельный пост. Но это обычная программа на питоне, так что сложностей быть не должно. Я ставил с помощью virtualenv.
А дальше утилиту надо применить, с помощью ключа —script указав openconnect, что вместо стандартного скрипта нужно использовать vpn-slice
В —script передаётся строка с командой, которую нужно вызвать вместо скрипта. ./bin/vpn-slice — путь к исполняемому файлу vpn-slice 192.168.430.0/24 — маска адресов, по которым следует ходить в vpn. Тут, имеется в виду что если адрес начинается с 192.168.430 — то ресурс с этим адресом нужно искать внутри vpn
Теперь ситуация должна быть почти нормальной. Почти. Теперь можно зайти на хабр и можно зайти на внутрикорпоративный ресурс по ip, но нельзя зайти на внутрикорпоративный ресурс по символьному имени. Если прописать соответствие символьного имени и адреса в hosts — всё должно заработать. И работать, пока ip не поменяется. Линукс теперь умеет ходить в интернет или во внутрикорпоративную сеть в зависимости от ip. Но для определения адреса по прежнему используется не корпоративный DNS.
Проблема ещё может проявляться в таком виде — на работе всё нормально, а дома на внутрикорпоративные ресурсы можно зайти только по ip. Это потому что когда ты подключен к корпоративному Wi-Fi, то DNS используется тоже корпоративный, и в нём символьные адреса из VPN ресолвятся, несмотря на то что пройти по такому адресу без использования VPN по прежнему нельзя.
Автоматическая модификация файла hosts
Если vpn-slice вежливо попросить, то он может после поднятия VPN сходить в её DNS, найти там ip адреса нужных ресурсов по их символьным именам и вписать их в hosts. После выключения VPN эти адреса будут из hosts удалены. Для этого нужно передать символьные имена в vpn-slice в качестве аргументов. Вот так.
Теперь всё должно работать и в офисе и на пляже.
Искать адреса всех поддоменов в DNS, который отдала VPN
Если адресов внутри сети немного, то подход с автоматической модификацией файла hosts вполне рабочий. Но если ресурсов в сети много, то вам постоянно надо будет добавлять в скрипт строки вроде zoidberg.test.evilcorp.com zoidberg это так зовут один из тестовых стендов.
Но теперь, когда мы немного понимаем что к чему эту необходимость можно устранить.
Если после поднятия VPN посмотреть в /etc/hosts, то можно увидеть, вот такую строку
192.168.430.534 dns0.tun0 # vpn-slice-tun0 AUTOCREATED
Да и в resolv.conf была добавлена новая строка. Короче, vpn-slice каким-то образом определила где находится dns сервер для vpn.
Теперь надо сделать так, чтобы для того, чтобы узнать ip адрес доменного имени, кончающегося на evilcorp.com, линукс ходил в корпоративный dns, а если надо что-то другое, то в дефолтный.
Я довольно долго гуглил и обнаружил, что такая функциональность есть в убунте из коробки. Имеется в виду возможность использовать для ресолва имён локальный dns сервер dnsmasq.
То есть можно сделать так, чтобы за ip адресами линукс всегда ходил в локальный dns сервер, который в свою очередь, в зависимости от доменного имени, будет искать ip на соответствующем внешнем dns сервере.
Для управления всем, связанным с сетями и сетевыми соединениями, в убунте используется NetworkManager, а графический интерфейс для выбора, например, вайфай соединения — просто фронт к нему.
Нам надо будет полазить в его конфигурации.
- Создать файл в /etc/NetworkManager/dnsmasq.d/evilcorp
Обратите внимание на точку перед evilcorp. Она сигнализирует dnsmasq, что все поддомены evilcorp.com надо искать именно в корпоративном dns.
- Сказать NetworkManager, что для разрешения имён надо использовать dnsmasq
Конфигурация network-manager находится в /etc/NetworkManager/NetworkManager.conf Надо добавить туда:
Теперь, после подключения к VPN с помощью связки openconnect и vpn-slice, ip будет нормально опредёляться, даже если не добавлять символьные адреса в аргументы к vpnslice.
Как ходить через VPN в отдельные сервисы
После того, как получилось подключиться к vpn, я дня два очень радовался, а потом выяснилось, что если подключаться к впн не из офисной сети, то не работает почта. Симптом знакомый, не правда ли?
Почта у нас находится в mail.publicevilcorp.com, а значит не попадает под правило в dnsmasq и адрес почтового сервера ищется через публичный DNS.
Ну а в офисе всё равно используется DNS, в котором этот адрес есть. То есть я так думал. На деле после добавления в dnsmasq строки
ситуация никак не изменилась. ip остался тот же. Пришлось мне ходить на работу.
И уже потом, когда я углубился в ситуацию и немного разобрался в проблеме, один умный человек подсказал мне как её решить. Нужно было подключаться к почтовому серверу не просто так, а через vpn
Я использую vpn-slice, чтобы ходить через VPN по адресам, которые начинаются с 192.168.430. А у почтового сервера не только символьный адрес не является поддоменом evilcorp, у него ещё и ip адрес не начинается с 192.168.430. И из общей сети он конечно никого к себе не пускает.
Для того, чтобы линукс ходил через VPN и к почтовому серверу, нужно добавить в vpn-slice и его. Допустим адрес почтовика- 555.555.555.555
Скрипт для поднятия VPN с одним аргументом
Всё это, конечно, не очень удобно. Да, можно сохранить текст в файлик и копипастить в консольку, а не набирать руками, но всё равно приятного мало. Для облегчения процесса можно завернуть команду в скрипт, который будет находиться в PATH. И тогда нужно будет только ввести код, полученный из Google Authenticator
Если поместить скрипт в connect
то можно будет просто писать в консоли
Но теперь всё равно придётся зачем-то держать консоль в которой запущен openconnect открытой
Запуск openconnect в фоне
К счастью авторы openconnect позаботились о нас и добавили в программу специальный ключ —background, который делает так, чтобы программа после запуска работала в фоне. Если запустить её вот так, то консоль после запуска можно закрыть
Теперь только непонятно, куда идут логи. Логи нам в общем-то не сильно нужны, но мало ли. openconnect может перенаправить их в syslog, где они будут храниться в целостности и сохранности. нужно этого надо добавить в команду ключ —syslog
И вот, получается, что openconnect работает где-то там в фоне и никому не мешает, но как его остановить непонятно. То есть можно, конечно отфильтровать выхлоп ps грепом и искать процесс в названии которого есть openconnect, но это как-то муторно. Спасибо авторам, которые подумали и об этом. В openconnect есть ключик —pid-file, с помощью которого можно проинструктировать openconnect писать идентификатор своего процесса в файл.
Теперь всегда можно прибить процесс командой
Если процесса нет, kill ругнётся, но ошибку не кинет. Если файла нет, то тоже не случится ничего страшного, так что можно смело убивать процесс в первой строке скрипта.
Теперь можно включить компьютер, открыть консоль и запустить команду, передав ей код из Google Authenticator. Консоль потом можно прибить.
Без vpn-slice. Вместо послесловия
Понять, как жить без vpn-slice оказалось очень сложно. Пришлось много читать и гуглить. К счастью, когда столько времени провёл с проблемой, технические мануалы и даже man openconnect читаются как захватывающие романы.
В итоге я выяснил, что vpn-slice, как и родной скрипт, для разделения сетей модифицирует таблицу маршрутизации.
Таблица маршрутизации
Это, упрощённо говоря, такая таблица в первой колонке которой содержится с чего должен начинаться адрес, по которому хочет пройти линукс, а во второй через какой сетевой адаптер по этому адресу пройти. На самом деле колонок больше, но сути это не меняет.
Для того, чтобы посмотреть таблицу маршрутизации нужно выполнить команду ip route
Тут каждая строчка отвечает за то, куда надо пройти для того, чтобы послать сообщение по какому-то адресу. Первым идёт описание с чего должен начинаться адрес. Для того, чтобы понять как определить, что 192.168.0.0/16 означает, что адрес должен начинаться с 192.168 нужно погуглить что такое маска ip адреса. После dev находится имя адаптера в который надо слать сообщение.
Для VPN линукс сделал виртуальный адаптер — tun0. За то, чтобы трафик для всех адресов начинающихся с 192.168 шёл через него отвечает строка
Ещё посмотреть на текущее состояние таблицы маршрутизации можно с помощью команды route -n (ip адреса талантливо анонимизированы) Эта команда выдаёт результаты в другом виде и вообще deprecated, но её выхлоп часто попадается в мануалах в интернете и надо уметь его читать.
С чего должен начинать ip адрес для маршрута можно понять из комбинации колонок Destination и Genmask. Те части ip адреса, которым в Genmask соответствуют цифры 255, учитываются, а те, где там 0 — нет. То есть комбинация Destination 192.168.0.0 и Genmask 255.255.255.0 означает, что если адрес начинается с 192.168.0, то запрос к нему пойдёт по этом маршруту. А если Destination 192.168.0.0 но Genmask 255.255.0.0, то по этому маршруту пойдут запросы к адресам, которые начинаются с 192.168
Для того, чтобы разобраться, что на самом деле делает vpn-slice я решил посмотреть на состояния таблиц до и после
До включения VPN было так
После вызова openconnect без vpn-slice стало так
А после вызова openconnect в комбинации с vpn-slice вот так
Видно, что если не использовать vpn-slice, то openconnect явным образом пишет, что по всем адресам, кроме отдельно указанных, надо ходить через vpn.
Там рядом сразу указан ещё один путь, который надо использовать, если адрес, по которому пытается пройти линукс не соответствует ни одной маске из таблицы.
Тут уже написано, что в таком случае надо ходить через стандартный адаптер вайфай.
Я полагаю, что путь для VPN используется потому, что он в таблице маршрутизации первый.
И теоретически, если убрать вот этот дефолтный путь из таблицы маршрутизации, то в связке с dnsmasq openconnect должен обеспечивать нормальную работу.
И всё заработало.
Роутинг запросов к почтовому серверу без vpn-slice
Но у меня же есть ещё почтовый сервер с адресом 555.555.555.555, на который тоже надо ходить через vpn. Маршрут до него тоже надо добавить руками.
И вот теперь всё норм. Так что обойтись без vpn-slice таки можно, но уже надо хорошо знать, что делаешь. Я сейчас думаю не добавить ли в последнюю строку родного скрипта openconnect удаление дефолтного маршрута и добавление маршрута для почтовика после подключения к vpn, просто, чтобы движущихся частей в моём велосипеде стало поменьше.
Наверное, кому-то для того, чтобы понять как настроить VPN хватило бы этого послесловия. Но я, пока пытался понять что и как мне делать, прочитал достаточно много таких руководств, которые работают у автора, но почему-то не работают у меня и решил добавить сюда все кусочки, которые нашёл. Я бы чему-то такому очень порадовался.
Источник