Linux подключение к vpn

Обновлено: 02.07.2024

Настраиваем L2TP VPN-сервер на платформе Linux (Debian / Ubuntu)

L2TP - один из наиболее популярных VPN-протоколов, обладающий, благодаря IPsec, отличной безопасностью, достаточной простотой и широкой поддержкой со стороны всех современных ОС. Для работы с ним не требуется установка дополнительного ПО и какие-либо сложные настройки. Мы уже рассматривали настройку L2TP VPN-сервера на платформах Windows и Mikrotik, а теперь расскажем, как настроить аналогичный сервер в Linux, дистрибутивах основанных на Debian или Ubuntu.

Перед тем, как приступать к работе над данной статьей мы внимательно изучили русскоязычный сегмент сети на предмет освещения данной темы и были весьма сильно удивлены. Большинство находящихся на первых страницах поиска ресурсов перепечатывает одну и ту же устаревшую инструкцию, даже в достаточно свежих публикациях. Но наш сайт с самого своего основания принципиально не занимается перепечатками (кроме переводов) и мы всегда проверяем на практике то, что рекомендуем нашим читателям. В этот раз нам пришлось потратить некоторое лишнее время на чтение документации, зато теперь мы можем предложить вам актуальный материал по настройке L2TP в Linux.

В качестве систем на тестовом стенде мы использовали Debian 10 и Ubuntu 20.04, но с некоторыми изменениями данная инструкция применима к любым версиям Linux со strongSwan версии 5.0 и выше.

Настраиваем IPsec

Именно с устаревшими настройками IPsec вам придется столкнуться в большинстве опубликованных инструкций. Нет, все даже будет работать, но вот безопасность такого решения окажется довольно низкой, не соответствующей современным требованиям. Поэтому, если у вас уже имеется настроенный экземпляр L2TP-сервера мы настоятельно советуем обновить его настройки.

Для работы с IPsec мы будем использовать пакет strongSwan, установим его:

Затем откроем файл настроек /etc/ipsec.conf и добавим в его конец следующие две секции:

Первая секция задает общие параметры: включает фрагментацию IKE и настраивает протокол обнаружения мертвых узлов (Dead Peer Detection, DPD), отвечающий за обнаружение неактивных клиентов. Вторая относится уже к L2TP-соединениям, указывая использовать транспортный режим IPsec, аутентификацию по общему ключу и задает используемые шифры. Приведенные значения являются рекомендуемыми и взяты из официальной документации strongSwan.

Общий ключ следует указать в файле /etc/ipsec.secrets, добавив в него следующую строку:

Где mySharedKey - общий ключ, так как от него зависит безопасность вашей VPN-сети мы рекомендуем использовать в качестве ключа случайно сгенерированную строку из букв, цифр и спецсимволов. Для этого можно воспользоваться командой:

Результатом ее выполнения станет случайная строка длинной в 18 символов.

l2tp-vpn-server-debian-ubuntu-001.jpg

После внесения указанных настроек перезапустим службу:

В Ubuntu имя службы несколько иное - strongswan-starter, поэтому команда будет иметь вид:

Настраиваем L2TP

Для реализации функций L2TP-сервера предназначен пакет xl2tpd, для его установки выполните:

Затем откройте файл настроек /etc/xl2tpd/xl2tpd.conf, раскомментируйте и приведите к следующему виду опции:

Большая часть опций относится к настройке протокола L2TP и требует понимания его работы, поэтому мы на них останавливаться не будем. Разберем те опции, которые имеют существенное значение. Параметр auth file указывает на файл с данными для аутентификации, а pppoptfile - набор опций для PPP-соединения, которое используется внутри L2TP-туннеля, name - имя сервера, которое будет использоваться для поиска аутентификационных данных в файле chap-secrets.

Опции local ip и ip range отвечают за локальный адрес сервера в VPN-сети и диапазон адресов для выдачи удаленным клиентам. Здесь можно использовать два подхода: выдавать клиентам адреса из диапазона локальной сети офиса и включить ProxyARP, в этом случае настраивать маршрутизацию на клиентах не требуется, они будут как-бы включены в общую сеть офиса на канальном уровне (L2), либо выдавать адреса из непересекающегося диапазона и использовать маршрутизацию. Автоматизировать создание маршрутов для Windows-клиентов можно с использованием PowerShell.

Для настройки PPP перейдем в /etc/ppp и скопируем стандартный файл настроек:

Затем открываем файл /etc/ppp/options.xl2tpd на редактирование и приводим к следующему виду. Опции перечислены в порядке их следования, нужно раскомментировать их и указать нужное значение, если опция отсутствует, то ее следует добавить в конце файла.

Если вы будете использовать ProxyARP то дополнительно раскомментируйте опцию:

Также для Windows-клиентов можно передать настройку DNS-серверов, для этого добавьте опции:

Это позволит настроить первичный и альтернативный DNS-сервера в системе.

Сохраним все внесенные изменения и перезапустим службу L2TP-сервера:

l2tp-vpn-server-debian-ubuntu-002.jpg

Заключительным этапом настройки будет создание учетных записей для удаленных клиентов, для этого откроем файл /etc/ppp/chap-secrets и внесем следующую строку:

Первым указываем логин, затем имя службы, оно должно совпадать с тем, которое мы указали в опции name в xl2tpd.conf, после него идет пароль и IP-адрес клиента, символ * обозначает что можно присвоить любой адрес из выбранного диапазона. Если же требуется выдать клиенту постоянный адрес, то его следует указать явно, и он не должен входить в динамический диапазон указанный в ip range, например:

Для доступа к L2TP-серверу следует разрешить в брандмауэре входящие подключения к портам 500 UDP и 4500 UDP, подключение к 1701 UDP, вопреки распространенному заблуждению, разрешать не следует.

Виртуальные сети, основывающиеся на технологиях VPN, применяются для различных целей и сегодня обеспечивают не только построение корпоративных сетей или защиту при пользовании общедоступными подключениями, а и выход в интернет. Кроме того, благодаря VPN доступно посещение веб-ресурсов в обход блокировкам с сохранением приватности, что в последнее время тревожит пользователей больше всего. Процесс настройки VPN для каждой системы имеет свои особенности и может выполняться в различных вариациях. В зависимости от многих факторов, в том числе целевого назначения и типа построения сети существует несколько способов реализации технологии. Мы рассмотрим, как выполняется настройка VPN на Linux, а также проясним, для чего применимо это соединение.

Как настроить VPN подключение в Linux

Методика настройки VPN подключения в Linux.

Что такое VPN и зачем это нужно

Для начала разберём, что представляет собой Virtual Private Network (виртуальная частная сеть) и как применим данный вид технологий. Благодаря VPN можно объединить любое число устройств в частную сеть, и обеспечить защищённый канал для передачи данных. Так, применяя подключение такого типа, пользователи могут сохранить приватность в интернете и не переживать о сохранности данных, в том числе при работе в сетях с общим доступом. Подсоединение к VPN позволяет избежать перехвата информации со стороны злоумышленников, поскольку маршрут обмена пакетами надёжно защищён шифрованием и аутентификацией пользователя. Данные шифруются на стороне отправителя и следуют по каналу связи в зашифрованном виде, а расшифровываются уже на устройстве получателя, при этом у обоих подразумевается общий ключ доступа. С применением VPN возможно создание надёжной сети поверх ненадёжной (как правило, интернета). Подключение пользователя выполняется не напрямую, а посредством сервера, соединённого с внутренней или внешней сетью. Это и обеспечивает приватность в интернете, поскольку в таком случае веб-ресурсам будет виден IP сервера, к которому подсоединён клиент. Сервер потребует прохождения процедуры идентификации, а также аутентификации и после того, как пользователь авторизован, возможна работа с сетью. Наиболее часто VPN используют в следующих случаях:

  • Подключение к интернету посредством VPN нередко применимо провайдерами городских сетей, а также на предприятиях. Плюсом такого метода реализации является защищённость канала связи, поскольку возможна настройка разных ступеней безопасности. Это обеспечивается настройкой одной сети поверх другой и доступом в интернет посредством двух разных сетей.
  • Внутри корпоративной сети. Объединение в одну сеть позволяет получить безопасным доступ к сети скольким угодно компьютерам сотрудников вне зависимости от их местонахождения и удаления от сервера.
  • Объединение компонентов корпоративной сети. Применяя VPN для обеспечения взаимодействия различных частей предприятия, возможна организация доступа для них к отдельным ресурсам общей сети.

Реализация технологии доступна для различных устройств, операционкой которых поддерживается опция или имеется VPN-клиент, способный осуществлять проброс портов с применением TCP/IP в виртуальную сеть. Пользователь может самостоятельно выполнить все действия по настройке. Необходимость в этом возникает даже не ради цели обхода региональных блокировок, ведь для этого можно и не настраивать VPN в компьютере (для посещения заблокированных ресурсов достаточно инсталляции стороннего приложения, установки специального расширения для браузеров или использования встроенного функционала обозревателя). Настроить VPN на ПК или ноутбуке часто требуется в случае смены провайдера для настройки доступа в интернет. Настройка VPN под Linux имеет свои специфические особенности, учитывая многогранность ОС, но принцип остаётся тот же.

Настройка серверной части на Linux

Рассмотрим создание VPN сервера PPTP на платформе Ubuntu Server. С Linux достаточно легко развернуть сервер и сделать это можно даже на слабом устройстве. Наиболее просто реализовать VPN с PPTP, поскольку для воплощения не потребуется устанавливать сертификаты на устройства клиентов, а аутентификация выполняется благодаря вводу имени и пароля. Для начала потребуется инсталлировать пакеты:

Когда пакеты для функционирования PPTP VPN установлены, следует настроить сервер. Чтобы задать диапазон адресов и выполнить прочие главные настройки, откроем файл /etc/pptpd.conf (редактируется с правами администратора):

Для раздачи более сотни подключений разом, находим Connections. Данный параметр должен быть раскомментирован, после чего указываем в этой строке необходимое значение количества подключений. Для отправки по VPN широковещательных пакетов раскомментировать придётся и параметр bcrelay. Далее идём в конец файла, где настроим адреса. Добавляем адрес сервера в VPN сети:

Диапазон адресов для раздачи клиентам (выделяем сразу с некоторым запасом, поскольку увеличить количество, не перезапуская pptpd не получится):

Если у вас имеется несколько внешних IP, можно конкретизировать, по какому из них прослушивать интерфейсы входящих PPTP:

Параметр speed позволяет задать скорость подключений (бит/с). Сохраняем и закрываем файл. Остальные параметры можно настроить в /etc/ppp/pptpd-options:

Опция proxyarp должна быть включена, она отвечает за включение поддержки сервером Proxy ARP. Опция lock позволяет разрешить (для этого комментируем) или запретить (для этого раскомментируем) пользователю множественные подключения. Сохраняемся и закрываем файл. Настройка сервера завершена, но для создания клиентов вносим соответствующие записи в /etc/ppp/chap-secrets:

Они выглядят примерно таким образом:

username1 *password12345*

username2 10.10.12.11 password345*

username3 * password787 10.10.11.21

Для каждого пользователя прописываем его имя, пароль, удалённый и локальный IP, разделяя сведения клавишей пробел. Удалённый адрес прописываем при наличии у клиента статического IP и при условии применения исключительно такового, в ином случае предпочтительно ставить звёздочку, чтобы соединение однозначно было выполнено. Локальный адрес же указываем при выделении пользователю одного и того же IP в VPN-сети. В примере выше для клиента в первом варианте соединения осуществляются с любого внешнего IP, локальный выделится первый доступный. Во втором случае – локальный будет выделен первый доступный, но подключения выполняются только с указанного адреса. В третьем – соединиться с сетью можно с любого адреса, локальный же выделится тот, который был нами прописан. Настройка серверной части VPN PPTP завершена, перезапускаем его:

Само устройство в перезагрузке не нуждается.

Настройка VPN клиентов

Выполнить наладку клиентской части VPN сервера можно в любой ОС, мы же будем настраивать на Убунте. По большому счёту соединение будет работать и с параметрами, выставленными по умолчанию, но лучше указать тип подключения и выполнить некоторые другие настройки. Установка VPN на Ubuntu предполагает следующие действия:

  • В меню «Система» переходим в «Параметры» и выбираем «Сетевые соединения».
  • Выбираем тип соединения «Туннельный протокол точка-точка PPTP».
  • Присваиваем подключению наименование или оставляем, как было предоставлено.
  • В поле «Шлюз» вбиваем внешний IP сервера, прописываем имя и пароль (в правой части поля для пароля присутствует опция его сохранения для этого юзера).
  • Жмём «Дополнительно» и в новом окне ставим флажок напротив пункта «Использовать шифрование MPPE» (это обязательное условие для связи с сервером).
  • Теперь позакрываем окна и подключимся к нашему серверу.

Настройка сети VPN для Linux завершена, и устройства могут быть соединены локально, но для входа в интернет через VPN потребуется выполнить ещё некоторые настройки.

Настройка доступа в интернет через VPN

Когда с локальной сетью разобрались, начинаем настраивать соединение с интернетом. Для осуществления подключения в терминале прописываем такие команды:

iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.1/24 -j MASQUERADE

iptables -A FORWARD -s 10.0.0.1/24 -j ACCEPT

iptables -A FORWARD -d 10.0.0.1/24 -j ACCEPT

Под 10.0.0.1/24 подразумевается локальный IP сервера и маска сети. Сохраняемся:

и подтверждаем новые параметры:

Теперь на Linux есть возможность соединения с сетью интернет посредством VPN, а также доступны и остальные преимущества работы с виртуальной сетью. Посещаемые ресурсы увидят внешний адрес сервера, что обусловит приватность, а соединение будет надёжно защищено от хакерских атак и обеспечит безопасность передачи данных.

Хотите использовать линукс на работе, но корпоративный 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

openconnect попросит ввести пароль, который, напомню, состоит из фиксированной части и кода из Google Authenticator, а потом попробует подключиться к vpn. Если получилось, поздравляю, можете смело пропускать середину в которой много боли и переходить к пункту про работу openconnect в фоне. Если не заработало, то можно продолжать. Хотя если получилось при подключении например с гостевого вайфая на работе, то возможно радоваться и рановато, надо попробовать повторить процедуру из дома.

Cертификат

С высокой вероятностью ничего не запустится, а выхлоп openconnect будет выглядеть как-то вот так:

Тут сервер отослал нам сертификат, по которому можно определить, что подключение происходит именно к серверу родной корпорации, а не к злобному мошеннику, а системе этот сертификат неизвестен. И поэтому она не может проверить, настоящий сервер или нет. И поэтому на всякий случай прекращает работу.

Для того, чтобы openconnect всё-таки подключился к серверу, нужно явным образом сказать ему, какой сертификат должен прийти от VPN сервера с помощью помощью ключа --servercert

А узнать какой сертификат нам отослал сервер можно прямо из того, что напечатал openconnect. Вот из этого куска:

Вот такой командой можно попробовать подключиться ещё раз

Возможно теперь заработало, тогда можно переходить к концу. Но лично мне Убунта показала фигу вот в такой форме

Что тут произошло, мне не понятно. Но эксперимент показывает, что если добавить в /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

Но теперь, когда мы немного понимаем что к чему эту необходимость можно устранить.

Если после поднятия VPN посмотреть в /etc/hosts, то можно увидеть, вот такую строку

Да и в resolv.conf была добавлена новая строка. Короче, vpn-slice каким-то образом определила где находится dns сервер для vpn.

Я довольно долго гуглил и обнаружил, что такая функциональность есть в убунте из коробки. Имеется в виду возможность использовать для ресолва имён локальный dns сервер dnsmasq.

То есть можно сделать так, чтобы за ip адресами линукс всегда ходил в локальный dns сервер, который в свою очередь, в зависимости от доменного имени, будет искать ip на соответствующем внешнем dns сервере.

Для управления всем, связанным с сетями и сетевыми соединениями, в убунте используется NetworkManager, а графический интерфейс для выбора, например, вайфай соединения — просто фронт к нему.

Нам надо будет полазить в его конфигурации.

  1. Создать файл в /etc/NetworkManager/dnsmasq.d/evilcorp
  1. Сказать NetworkManager, что для разрешения имён надо использовать dnsmasq

Конфигурация network-manager находится в /etc/NetworkManager/NetworkManager.conf Надо добавить туда:

Теперь, после подключения к VPN с помощью связки openconnect и vpn-slice, ip будет нормально опредёляться, даже если не добавлять символьные адреса в аргументы к vpnslice.

Как ходить через VPN в отдельные сервисы

После того, как получилось подключиться к vpn, я дня два очень радовался, а потом выяснилось, что если подключаться к впн не из офисной сети, то не работает почта. Симптом знакомый, не правда ли?

Ну а в офисе всё равно используется 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 работает где-то там в фоне и никому не мешает, но как его остановить непонятно. То есть можно, конечно отфильтровать выхлоп ps грепом и искать процесс в названии которого есть openconnect, но это как-то муторно. Спасибо авторам, которые подумали и об этом. В openconnect есть ключик --pid-file, с помощью которого можно проинструктировать openconnect писать идентификатор своего процесса в файл.

Теперь всегда можно прибить процесс командой

Если процесса нет, kill ругнётся, но ошибку не кинет. Если файла нет, то тоже не случится ничего страшного, так что можно смело убивать процесс в первой строке скрипта.

Теперь можно включить компьютер, открыть консоль и запустить команду, передав ей код из Google Authenticator. Консоль потом можно прибить.

Понять, как жить без vpn-slice оказалось очень сложно. Пришлось много читать и гуглить. К счастью, когда столько времени провёл с проблемой, технические мануалы и даже man openconnect читаются как захватывающие романы.

В итоге я выяснил, что vpn-slice, как и родной скрипт, для разделения сетей модифицирует таблицу маршрутизации.

Таблица маршрутизации

Это, упрощённо говоря, такая таблица в первой колонке которой содержится с чего должен начинаться адрес, по которому хочет пройти линукс, а во второй через какой сетевой адаптер по этому адресу пройти. На самом деле колонок больше, но сути это не меняет.

Для того, чтобы посмотреть таблицу маршрутизации нужно выполнить команду ip route

Для 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 хватило бы этого послесловия. Но я, пока пытался понять что и как мне делать, прочитал достаточно много таких руководств, которые работают у автора, но почему-то не работают у меня и решил добавить сюда все кусочки, которые нашёл. Я бы чему-то такому очень порадовался.

Во многих компаниях и университетах используются Cisco-совместимые виртуальные частные сети (Compatible Cisco Virtual Private Network). Это защищенные виртуальные сети (VPN), посредством которых вы можете получить доступ к данным, не предназначенным для публичного доступа (например, к данным из вашей домашней директории на сервере организации). Кроме того, некоторые Интернет-провайдеры предоставляют доступ в Интернет исключительно посредством виртуальных частных сетей, работающих по протоколам PPTP и L2TP.

Для того, чтобы получить возможность соединения с подобными сетями в Linux Mint, Ubuntu и Fedora Workstation вам придется выполнить описанные ниже действия.

1. Установка дополнительных программных компонентов

В первую очередь следует установить несколько вспомогательных программных компонентов из репозитория программного обеспечения дистрибутива Linux Mint, Ubuntu или Fedora Workstation. По этой причине перед началом выполнения описанных операций следует убедиться в том, что вы корректно настроили хотя бы временное соединение с сетью Интернет.

Linux Mint и Ubuntu:

Для начала нужно открыть окно терминала и ввести в него следующую команду для установки дополнительных плагинов менеджера сетевых соединений NetworkManager, необходимых для соединения с виртуальными частными сетями по протоколам OpenVPN и VPNC:

sudo apt-get install network-manager-openvpn-gnome network-manager-vpnc-gnome

После окончания ввода команды следует нажать клавишу Enter. При запросе пароля вы должны будете ввести свой пароль. Символы вашего пароля не будут отображаться никоим образом, даже с помощью точек, и это нормально. После ввода пароля следует снова нажать клавишу Enter.

Для поддержки протокола L2TP следует установить дополнительные программные компоненты из надежного стороннего частного архива пакетов (PPA) проекта nm-l2tp с помощью следующих команд:

sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp
sudo apt-get update
sudo apt-get install network-manager-l2tp

После ввода каждой из команд также следует использовать клавишу Enter для ее исполнения.

Кроме того, вам может понадобиться плагин для поддержки протокола PPTP, но он устанавливается по умолчанию.

Fedora Workstation:

В Fedora Workstation также нужно открыть окно терминала и ввести в него следующую команду для установки дополнительного плагина менеджера сетевых соединений NetworkManager, необходимого для соединения с виртуальными частными сетями по протоколу L2TP (плагины для поддержки соединения с виртуальными частными сетями по протоколам OpenVPN, VPNC и PPTP устанавливаются по умолчанию):

sudo dnf install NetworkManager-l2tp-gnome

После окончания ввода команды следует нажать клавишу Enter для ее исполнения.

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

2. Настройка маршрутизатора

Теперь нужно проверить, позволяет ли ваш маршрутизатор осуществлять доступ к виртуальным частным сетям. Для этого вам придется открыть веб-интерфейс вашего маршрутизатора (вы можете прочитать о том, как это сделать, в руководстве по его эксплуатации).

В веб-интерфейсе вашего маршрутизатора для этой цели должны использоваться параметры конфигурации, аналогичные приведенным на иллюстрации ниже (в качестве примера используется веб-интерфейс маршрутизатора Linksys WRT54GL).

Linksys Vpn

3. Создание соединения с виртуальной частной сетью в ручном режиме

В случае работы с дистрибутивом Linux Mint с окружением рабочего стола Cinnamon достаточно нажать на иконку менеджера соединений Network Manager (в правой части системной панели, обычно рядом с иконкой для управления уровнем звука). После этого следует осуществить переход «Соединения — Добавить — Cisco-совместимая VPN (vpnc) или Point to Point Tunneling Protocol (PPTP) или Layer 2 Tunneling Protocol (L2TP) — Cоздать. ». (В случае работы с дистрибутивом Ubuntu названия элементов меню и кнопок могут немного отличаться, но поиск соответствий не связан с какими-либо сложностями.) В Fedora Workstation следует открыть системное меню (в правой части верхней панели), нажать на кнопку с гаечным ключом и отверткой, в открывшемся окне настроек выбрать элемент «Сеть» из раздела «Оборудование», нажать на кнопку «+» под списком типов соединений в левой части окна, после чего в открывшемся диалоге настроек выбрать тип сети «Cisco-совместимая VPN (vpnc)», «Point-to-Point Tunneling Protocol (PPTP)» или «Layer 2 Tunneling Protocol (L2TP)».

Теперь вам придется ввести необходимые параметры соединения. Этими параметрами являются:

  • Шлюз (IP-адрес основного сервера виртуальной частной сети)
  • Имя пользователя
  • Пароль пользователя
  • Имя группы (для VPNC)
  • Пароль группы (для VPNC)

После заполнения соответствующих полей диалога создания нового соединения, вы сможете устанавливать и разрывать соединение с виртуальной частной сетью с помощью соответствующего элемента меню менеджера сетевых соединений Network Manager, которое открывается по нажатию на его иконку. Например, в Linux Mint с окружением рабочего стола Cinnamon для соединения с виртуальной частной сетью следует нажать на иконку менеджера сетевых соединений Network Manager, выбрать пункт «Сетевые соединения», после чего выбрать имя только что созданного соединения. При запросе вам придется ввести пароль для доступа к сети, который должен быть предоставлен вашей компанией или университетом. В Fedora Workstation для этой же цели достаточно открыть системное меню (в правой части верхней панели), открыть раздел «Соединение VPN» и воспользоваться элементом «Включить». После этого вы сможете посещать защищенные веб-страницы с помощью любого веб-браузера, например, Firefox.

4. Создание соединения с виртуальной частной сетью путем импортирования параметров соединения из приложения Cisco Client для Windows

Если вы используете приложение Cisco Client в Windows для соединения с виртуальной частной сетью, вы можете просто воспользоваться функцией импорта его конфигурации, реализованной в менеджере соединений Network Manager в Linux. Для этого следует открыть Проводник Windows и осуществить с помощью него переход «Program Files — Cisco Systems — VPN Client — Profiles». После этого следует скопировать файл с расширением .pcf из данной директории на флеш-накопитель с интерфейсом USB и перезагрузиться из ОС Windows в Linux Mint, Ubuntu или Fedora Workstation.

Далее в Linux Mint с окружением рабочего стола Cinnamon следует нажать на иконку менеджера сетевых соединений Network Manager (в правой части системной панели, обычно рядом с иконкой для управления уровнем звука), выбрать пункт меню «Сетевые соединения», нажать на кнопку «Добавить», выбрать пункт меню «Импортировать сохраненные параметры VPN. », нажать на кнопку «Создать. » и указать путь к скопированному файлу с расширением .pcf. (В случае работы с дистрибутивом Ubuntu названия элементов меню и кнопок могут немного отличаться, но поиск соответствий не связан с какими-либо сложностями.) Обратите внимание на приведенную ниже иллюстрацию.

Vpn

В Fedora Workstation следует открыть системное меню (в правой части верхней панели), нажать на кнопку с гаечным ключом и отверткой, в открывшемся окне настроек выбрать элемент «Сеть» из раздела «Оборудование», нажать на кнопку «+» под списком типов соединений в левой части окна, после чего в открывшемся диалоге настроек выбрать вариант «Импортировать из файла. ».

Теперь пришло время перезагрузить ваш компьютер для того, чтобы менеджер сетевых соединений Network Manager корректно завершил свою конфигурацию.

Для соединения с виртуальной частной сетью в Linux Mint с окружением рабочего стола Cinnamon, также, как и в случае конфигурации соединения в ручном режиме, следует нажать на иконку менеджера сетевых соединений Network Manager, выбрать пункт «Сетевые соединения», после чего выбрать имя только что созданного соединения. При запросе вам придется ввести пароль для доступа к сети, который должен быть предоставлен вашей компанией или университетом. В Fedora Workstation для выполнения аналогичного действия достаточно открыть системное меню (в правой части верхней панели), открыть раздел «Соединение VPN» и воспользоваться элементом «Включить». После этого вы сможете посещать защищенные веб-страницы с помощью любого веб-браузера, например, Firefox.

5. Хотите ознакомиться с дополнительными советами?

Хотите узнать о других настройках и приемах работы с Linux-системами? На данном веб-сайте размещено большое количество подобных материалов.

Аббревиатура VPN обозначает виртуальную частную сеть. Одной из программ VPN с открытым исходным кодом является OpenVPN. OpenVPN может работать как VPN-сервер Linux. На базовом уровне VPN создаёт защищённое соединение “точка-точка”. Хороший VPN для Linux – один из лучших способов защиты в Интернете или открытой сети. В этом руководстве мы покажем вам, как настроить собственный VPN-сервер Linux с помощью OpenVPN. Сделайте свой VPS безопасным!

Прокачайте ваш проект, воспользовавшись скидками на VPS-хостинг в Hostinger! Большой выбор планов, как для учебных, так и для крупных коммерческих проектов.

Зачем использовать VPN-сервер Linux?

VPN имеет определённые преимущества. Некоторые из них выделены ниже:

На более высоком уровне, с помощью шифрования, VPN делает ваши транзакции безопасными.

Рассказав о преимуществах VPN, мы логически подходим к части, где покажем, как происходит установка и настройка OpenVPN в Linux. Мы расскажем о настройке VPN-сервера Linux через OpenVPN и о том, как подключить его к Windows, Android и другим устройствам. Если же на этом этапе вы хотите узнать больше о протоколе OpenVPN, мы предлагаем вам прочитать обзор OpenVPN.

Предусловия:

  1. У вас должны быть права доступа root или sudo
  2. OpenVPN не должен быть предварительно установлен
  3. Брандмауэр должен разрешать трафик TCP через порт 943 и трафик UDP через порт 1194. Мы рекомендуем использовать UFW. Ознакомьтесь с нашим руководством по UFW, чтобы узнать всё необходимое

Настройка VPN-сервера Linux с Сервером Доступа OpenVPN

Во-первых, давайте обновим систему. Для CentOS:

Для Ubuntu и Debian обновите индексы, используя:

Для установки OpenVPN вам потребуется пакет net-tools. Установите его, если он не был предварительно установлен. Пакет net-tools содержит ifcfg, необходимый для установки сервера OpenVPN.

Вы можете установить его для CentOS, используя:

Для Ubuntu и Debian используйте следующую команду:

Вы можете скачать клиент OpenVPN для вашего дистрибутива с веб-сайта OpenVPN. Получить ссылку можно здесь и использовать её вместе с командой curl. Пример команды curl для Ubuntu показан ниже:

Команда curl для CentOS:

Здесь вы можете добавить URL к вашему дистрибутиву. Убедитесь, что загружена правильная установка, напечатав контрольную сумму файла SHA256. Для этого используйте следующую команду:

Эта команда распечатает контрольную сумму:

Вы можете сравнить контрольную сумму загруженного бинарного файла с контрольной суммой, представленной на сайте. Если контрольная сумма совпадает, установите ранее загруженный бинарный файл.

Для установки в CentOS используйте:

Аналогично, для установки в Ubuntu и Debian введите следующую команду в командной строке:

Установка OpenVPN займёт некоторое время. После завершения установки вы увидите интерфейс Администратора и детали интерфейса Клиента. Пользователь openvpn будет создан по умолчанию во время установки. Вы можете задать пароль для этого пользователя, используя:

Вы увидите следующий экран:

Имя пользователя, как упоминалось ранее, openvpn, а пароль – тот, который вы только что установили для этого пользователя. Как только вы войдёте в систему, вы увидите страницу с условиями. Прочитайте их и нажмите кнопку Agree (Cогласен), чтобы продолжить. На следующей странице, вы найдёте информацию о настройках и состоянии сервера.

Настройки по умолчанию вполне адекватны и позволяют MacOS, Linux, Windows, Android и iOS подключиться к VPN-серверу Linux. Если вы хотите изменить какие-либо настройки, обязательно нажмите Apply (Применить) и Update Running Server (Обновить запущенный сервер), чтобы активировать изменения.

Это завершает установку по умолчанию. Далее мы настроим туннель OpenVPN.

Настройка VPN-сервера Linux с OpenVPN для Туннелирования

Включите переадресацию IP в вашем ядре с помощью следующей команды:

Это активирует переадресацию трафика через IPv4. Чтобы применить эти изменения, используйте следующую команду:

OpenVPN не поддерживает одновременные туннели через IPv6 и IPv4, поэтому вы можете отключить IPv6, используя:

Чтобы отключить IPv6 вручную, добавьте следующие параметры, которые будут установлены при загрузке. Эти параметры должны быть добавлены в файл 99-sysctl.conf, расположенный в /etc/sysctl.d/. Просто используйте команду cd для доступа к папке и предпочитаемый текстовый редактор для редактирования файла. Не забудьте сохранить изменения!

Далее вы можете активировать новые настройки, используя:

Далее, в файле hosts, расположенном в /etc/ прокомментируйте строку разрешения IPv6, как показано ниже:

Таким образом, мы отключили IPv6. Затем снова войдите в систему по URL сервера Администратора и перейдите в настройки VPN.

Снимок Вкладки Настроек VPN в OpenVPN

В разделе Маршрутизация (Routing), напротив опции “Должны ли VPN-клиенты иметь доступ к частным подсетям (непубличным сетям на стороне сервера)?” должно быть указано “Нет”.

Пример Настроек Маршрутизации в OpenVPN

Напротив опции “Должен ли интернет-трафик клиента маршрутизироваться через VPN?” должно быть указано “Да”.

Пример Настроек Трафика Веб-Клиента в OpenVPN

Чтобы избежать утечки DNS, измените настройки распознавателя DNS. Выберите “Клиенты должны использовать те же DNS-сервера, что и Access Server хост.”

Пример Настроек DNS в OpenVPN

Сохраните эти настройки и не забудьте нажать на Update Running Server (Обновить запущенный сервер). Вы можете перезапустить сервер OpenVPN, используя вкладку Status (Состояние) в консоли администратора. Отсюда вы можете остановить сервер, а затем запустить его снова.

На этом наша настройка сервера OpenVPN завершена. Далее мы можем проверить клиентские установки.

Как Подключить VPN-сервер Linux к Другим Устройствам с OpenVPN

Теперь, когда ваш сервер запущен и работает, мы можем подключить к нему несколько устройств! Мы рассмотрим наиболее популярные варианты операционной системы:

Установка и Подключение Клиента OpenVPN на Windows

Откройте URL-адрес клиента OpenVPN, вы сможете показывать ссылки на клиентские загрузки на разных операционных системах.

Выберите версию Windows и запустите установку.

После завершения установки вам будет предложено ввести имя пользователя и пароль OpenVPN. IP-адрес сервера будет заполнен автоматически.

Вы можете использовать значок OpenVPN на панели задач Windows для отключения, повторного подключения и просмотра состояния подключения.

Установка и Подключение Клиента OpenVPN на MacOS

Подключитесь к пользовательскому интерфейсу Клиента OpenVPN и щёлкните по ссылке, чтобы загрузить программное обеспечение OpenVPN для MacOS. После загрузки этого пакета откроется окно со значком пакета установщика.

Следуйте стандартной процедуре установки приложения MacOS.

Дважды щёлкните по иконке этого установщика и нажмите “Открыть”, чтобы запустить установку.

После завершения установки вы увидите иконку OpenVPN на панели задач macOS. Вы можете щёлкнуть правой клавишей мыши по иконке, чтобы увидеть доступные опции и подключиться к OpenVPN.

После того, как вы выберите опцию “Подключиться к”, вы увидите всплывающее окно с запросом имени пользователя и пароля OpenVPN. Здесь вы должны ввести учётные данные и нажать “Подключиться”, чтобы установить соединение с VPN-сервером Linux.

Установка и Подключение Клиента OpenVPN на Linux

Установка клиента на Linux немного отличается. Загрузите и установите клиентское программное обеспечение OpenVPN в CentOS, используя следующую команду:

Аналогично, вы можете установить клиентское программное обеспечение OpenVPN на Debian или Ubuntu, используя следующую команду:

Откройте клиентский интерфейс OpenVPN и загрузите соответствующий профиль для вашей ОС. Кроме того, вы можете использовать команду wget или curl и указать URL-адрес для загрузки программного обеспечения.

Скопируйте загруженный профиль в папку /etc/openvpn и переименуйте его в client.conf. Запустите сервис туннелей OpenVPN, где вам будет предложено ввести имя пользователя и пароль. Начните операцию с помощью:

Вы можете использовать ipconfig или ip addr, чтобы просмотреть сетевые подключения. Как только интерфейс VPN станет доступным, вы увидите, что интерфейс tun0 добавлен в существующий список, показанный в выводе.

Установка и Подключение Клиента OpenVPN на Android

Сначала перейдите в магазин Google Play и найдите OpenVPN Connect. Установите приложение OpenVPN Connect.

Открыв, вы увидите три параметра: Частный туннель (Private Tunnel), Сервер доступа (Access Server) и Профиль OVPN (OVPN Profile).

Выберите Access Server и заполните все данные вручную:

  • Title – укажите предпочитаемое имя подключения.
  • Access Server Hostname – IP-адрес вашего VPN-сервера Linux
  • Port – порт 934 вашего VPN-сервера Linux
  • Username – имя пользователя, установленное на вашем сервере (openvpn по умолчанию)
  • Password – пароль, который вы задали в консоли при настройке VPN-сервера Linux в терминальной среде

Или же вы можете импортировать файл .ovpn для профиля. Вы можете получить профиль подключения из клиентского интерфейса.

Установка и Подключение Клиента OpenVPN на iOS

Как и в случае с Android, вы можете установить программное обеспечение OpenVPN из App Store.

Завершите установку и откройте только что установленное приложение. Оно попросит вас заполнить данные профиля или загрузить файл профиля, как и версия Android.

Как только они будут добавлены, вы можете начать использовать OpenVPN на вашем iPhone или iPad.

Настройки Сжатия VPN-сервера Linux

Если вы подключены к VPN, а Интернет не работает, вы можете проверить журналы OpenVPN по адресу /var/log/openvpnas.log в VPS. Если вы обнаружите записи, аналогичные приведённым ниже, вы, скорее всего, столкнулись с проблемой сжатия:

Чтобы решить эту проблему, вы можете отключить сжатие. Это можно сделать из интерфейса Администратора. Откройте интерфейс Администратора и нажмите на опцию Advanced VPN.

Перейдите к настройкам сжатия по умолчанию (Default Compression Settings). Здесь отключите опцию Поддержка сжатия на клиентских VPN-соединениях (Support compression on client VPN connection).

Примените изменения и нажмите на опцию Update Running Server. Проблема должна исчезнуть.

Добавление Пользователей на VPN-сервер Linux c OpenVPN

Бесплатный клиент OpenVPN поддерживает двух пользователей. Чтобы создать больше пользователей, вам придётся выбрать любой из платных планов. Вы можете добавить дополнительных пользователей из интерфейса администратора. Перейдите во вкладку “Управление пользователями” и нажмите ссылку “Права пользователя”.

Введите новое имя пользователя, как показано ниже:

Пример Настроек Пользователя в OpenVPN

Снимок Вкладки "Дополнительные Параметры" в OpenVPN

Сохраните эти настройки и нажмите на “Обновить запущенный сервер” (Update Running Server).

С OpenVPN, вы также можете настроить профили автоматического входа. Как результат весь ваш нелокальный трафик будет маршрутизироваться через VPN автоматически. Если вы хотите вручную включить или отключить VPN, вы можете использовать закрытые профили Пользователя или Сервера.

Чтобы настроить автоматический вход в систему, откройте интерфейс Администратора и выберите ссылку “Права пользователя” (User Permissions). Здесь установите флажок напротив “Разрешить автоматический вход” (Allow Auto-login).

Как Проверить Linux VPN-сервер с Запущенным OpenVPN

Чтобы проверить, работает ли OpenVPN должным образом, подключите VPN-клиент и проверьте свой IP-адрес. Вы можете воспользоваться сайтом проверки утечки DNS в браузере. Он должен показать вам IPv4-адрес сервера OpenVPN.

Далее вы можете выбрать Расширенный тест. В результате вы должны получить IP-адреса для DNS-резольвера, который вы выбрали для своего клиентского устройства.

В Завершение

В этом руководстве вы узнали, как настроить VPN-сервер Linux с OpenVPN и как подключить его с помощью различных клиентов, таких как Windows, Linux, Android, iPhone или iPad и MacOS.

Теперь, когда вы знаете главные нюансы, вы можете безопасно пользоваться Интернетом с помощью своего нового Linux VPN-сервера. Чтобы узнать больше, прочитайте официальное руководство OpenVPN, которое можно найти в интерфейсе администратора. На этом мы завершаем вашу первую конфигурацию OpenVPN в режиме server-client. Наслаждайтесь безопасным Интернетом с помощью OpenVPN!

Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

Читайте также: