- Настройка Remote Access VPN на ОС Linux
- Для Fedora/RedHat/CentOS
- Для Debian/Ubuntu
- Настройка VPN подключения через GUI (Графический интерфейс)
- Настройка через командную строку (CLI)
- Кунг-фу стиля Linux: бесплатный VPN по SSH
- Предварительная подготовка
- Настройки на стороне клиента
- Проблемы
- Подключение
- Итоги
- 12.1. Настройка Remote Access VPN на ОС Linux
Настройка Remote Access VPN на ОС Linux
[u]text[/u] — Подчеркнутый текст.
[i]text[/i] — Курсивный текст.
[s]text[/s] — Зачеркнутый текст.
[color=green]text[/color] — Цветной текст.
[url=kbpublisher.com]text[/url] — text
[quote]text[/quote] — Цитируемый текст
[h1]text[/h1] — Заголовок.
[code]text[/code] — Код text
Для разных дистрибутивов процедура установки VPN соединения отличается.
Для Fedora/RedHat/CentOS
Для начала необходимо установить необходимые пакеты:
sudo dnf install xl2tpd sudo dnf install NetworkManager-l2tp sudo dnf install NetworkManager-l2tp-gnome
Так как эти дистрибутивы используют liberswan, для корректной работы его нужно заменить. Для этого выполните команды:
sudo dnf remove libreswan sudo dnf install strongswan sudo service NetworkManager restart
Далее необходимо вывести l2tp из черного списка. Для этого в файле /etc/modprobe.d/l2tp_netlink-blacklist.conf закомментируйте следующую строчку:
Затем в файле /etc/modprobe.d/l2tp_ppp-blacklist.conf закомментируйте строчки:
Теперь можно переходить к созданию VPN подключения.
Для Debian/Ubuntu
Выполните следующие команды:
sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp sudo apt update sudo apt install network-manager-l2tp network-manager-l2tp-gnome
Примечание. В версиях Ubuntu ниже 22й, возможно придется обновить xl2tp, для этого нужно выполнить следующие команды
sudo apt remove xl2tpd sudo add-apt-repository ppa:racb/fixes sudo apt install xl2tpd network-manager-l2tp-gnome
Настройка VPN подключения через GUI (Графический интерфейс)
После выполнения команд выше появится возможность добавления L2TP VPN-подключения. Перейдите в Настройки ➜ Сеть. Добавьте Layer 2 Tunneling Protocol (L2TP).
Далее настройте параметры подключения и укажите данные для аутентификации:
Перейдите в настройки IPsec нажатием одноимённой кнопки. В настройках IPsec укажите:
- Type: Pre-shared key (PSK).
- Pre-shared key, указанный на UserGate.
- Phase1 Algorithms: aes128-sha1-modp1024!
- Phase2 Algorithm: aes128-sha1!
Сохраните настройки IPsec. Перейдите в настройки PPP. В качестве метода аутентификации укажите PAP и отключите все виды компрессии:
Сохраните изменения. На этом настройка Ubuntu для подключения Remote Access VPN закончена.
Настройка через командную строку (CLI)
Выполните следующие действия для настройки L2TP VPN с использованием командной строки.
sudo nmcli connection add connection.id vpnName con-name vpnName type VPN vpn-type l2tp connection.autoconnect no ipv4.method auto vpn.data "gateway = server_address, ipsec-enabled = yes, ipsec-esp = "aes128-sha1\!", ipsec-ike = "aes128-sha1-modp1024\!", machine-auth-type = psk, mru = 1400, mtu = 1400, no-vj-comp = yes, noaccomp = yes, nobsdcomp = yes, nodeflate = yes, nopcomp = yes, password-flags = 0, refuse-chap = yes, refuse-eap = yes, refuse-mschap = yes, refuse-mschapv2 = yes, user = username, user-auth-type = password" vpn.secrets "password = pass, ipsec-psk = key"
где server_address — IP-адрес VPN-сервера;
username — имя пользователя, выполняющего подключение;
pass — пароль учётной записи пользователя;
key — общий ключ для установления VPN-соединения.
Кунг-фу стиля Linux: бесплатный VPN по SSH
Если вы видите на некоторых сайтах множество рекламных баннеров, то вы знаете, что, если не будете пользоваться VPN (Virtual Private Network, виртуальной частной сетью), хакеры очень скоро захватят и разорят ваш компьютер и сожгут ваше жилище. Ну, они, по крайней мере, точно что-то такое задумывают. На самом же деле существует две основных причины, по которым кому-то может понадобиться VPN-подключение. Можно, конечно, купить подписку на соответствующий сервис, но если у вас есть SSH-доступ к какому-нибудь компьютеру, имеющему выход в интернет, это значит, что вы можете создать собственный VPN-сервис, не потратив на это ни копейки.
Основная идея тут заключается в том, чтобы подключиться к удалённому компьютеру, находящемуся в некоей сети, и сделать так, чтобы весь ваш сетевой трафик выглядел бы для той сети как локальный.
Первая причина, по которой это может кому-то понадобиться, заключается в повышении уровня безопасности и в заблаговременном устранении возможных угроз. Например, может понадобиться печатать на сетевом принтере, не «выставляя» этот принтер в обычный интернет. В результате, например, некто может сидеть в кафе и, подключившись к сети по VPN, распечатывать документы на принтере, чувствуя себя так, будто он находится за своим рабочим столом, а принтер стоит в паре метров от него. Использование VPN, кроме того, будет означать, что данные, передаваемые по WiFi-сети кафе, будут зашифрованы.
Вторая причина — это скрытие реального местоположения пользователя от любопытных глаз. Предположим, кому-то нравится смотреть видеоматериалы BBC, но живёт он в Эквадоре. Это значит, что для того чтобы видео не были бы для него заблокированы, ему нужно будет подключиться по VPN к сети, находящейся в Великобритании. Если власти некоей страны мониторят и цензурируют интернет, то жителям этой страны тоже может пригодиться возможность замаскировать свой трафик.
Использование SSH для организации VPN-подключения подойдёт для решения обеих вышеописанных задач. Правда, если вам, преимущественно, интересна первая из них, то вам, возможно, лучше подойдёт использование выделенного маршрутизатора или маленького компьютера, вроде Raspberry Pi, нацеленного на решение вашей задачи. Надо сказать, что если вы где-то арендуете сервер, то «VPN по SSH» — это не для вас.
Предварительная подготовка
Вам понадобится лишь root-доступ к обеим машинам. На удалённом компьютере должен быть установлен SSH-сервер. Понадобится вам, конечно, и SSH-клиент. И на локальной, и на удалённой машинах нужно будет выполнить некоторые настройки. Я использую KDE, поэтому для выполнения необходимых настроек применяю NetworkManager, но можно пойти и другим путём. Применение NetworkManager всего лишь упрощает задачу.
На сервере должны быть выполнены некоторые особые настройки, но вполне возможно то, что они уже на нём сделаны. Так, в файле /etc/ssh/sshd_config должна присутствовать строка PermitTunnel=yes . Кроме того, может понадобиться установить в значение yes параметр AllowTCPForwarding . В некоторых настройках может нуждаться и файрвол. При этом инструкции по конфигурированию плагина NetworkManager могут оказаться полезными даже тем, кто этой программой не пользуется.
Настройки на стороне клиента
Если вы пользуетесь NetworkManager, то вам понадобится соответствующий плагин. Для Neon и других дистрибутивов, основанных на Debian, подойдёт пакет network-manager-ssh . Это — всё, что вам потребуется. Если вы не хотите пользоваться NetworkManager, то можете применить следующие команды из материала автора плагина:
ssh -f -v -o Tunnel=point-to-point -o ServerAliveInterval=10 -o TCPKeepAlive=yes -w 100:100 root@YOUR_SSH_SERVER \ '/sbin/ifconfig tun100 172.16.40.1 netmask 255.255.255.252 pointopoint 172.16.40.2' && \ /sbin/ifconfig tun100 172.16.40.2 netmask 255.255.255.252 pointopoint 172.16.40.1
Тут нужен root-доступ к обеим системам, так как мы создаём туннель. Это, даже при использовании плагина, ведёт к нескольким проблемам. Очевидно, нам не хотелось бы, чтобы у нас постоянно запрашивали бы пароль для SSH-подключения и проводили бы проверку ключа. Но если настраивать VPN вручную, с этими проблемами можно справиться.
Проблемы
Большинство современных систем не позволяют входить в систему с root-правами, используя пароль, а иногда и вовсе не позволяют подключаться к системе в таком режиме. Поэтому нам, в первую очередь, нужно решить эту проблему. Кроме того, когда NetworkManager запускает SSH, он ищет ключи, причём, для root-пользователя, а не для обычного пользователя. Если он чего-то не может найти, он просто останавливается. Поэтому нам нужно обеспечить возможность беспрепятственного root-входа в систему.
Для того чтобы обеспечить возможность root-входа на сервер, нужно отредактировать файл /etc/ssh/sshd_config и установить параметр PermitRootLogin в значение yes . Рекомендую работать в этом режиме ровно столько времени, сколько нужно на выполнение следующих шагов настройки сервера. Далее, нужно будет перезапустить sshd-сервер, например, такой командой:
Ещё можно воспользоваться такой командой:
Затем, войдя в локальную машину с использованием обычной учётной записи, нужно воспользоваться ssh-copy-id для установки сертификата на хост-машину. После того, как это будет сделано, нужно вернуться на сервер и поменять в /etc/ssh/sshd_config значение PermitRootLogin на prohibit-password . Благодаря этому входить на сервер как root-пользователь можно будет с использованием сертификата, но не с использованием пароля.
Если вы уже выполняли вход с root-аккаунта, то вам, возможно, уже задавали вопрос о том, хотите ли вы принять ключ сервера. Если это не так — значит — у нас проблема. Если можете, осуществите вход и ответьте утвердительно на соответствующий вопрос, после чего система перестанет его задавать. Но, если сделать этого нельзя, мы можем решить проблему, отключив StrictHostKeyChecking .
В теории, можно передавать плагину NetworkManager дополнительные опции ssh, но по каким-то причинам этот подход не работает с версией плагина из репозиториев. Если же вы плагином не пользуетесь, делая всё вручную, то вы можете сами выполнить необходимые настройки. Настройки SSH для root-пользователя можно задать в /root/.ssh/config . Можно, кроме того, задать глобальные настройки в /etc/ssh/ssh_config .
Если вы меняете глобальные настройки, то, если система это поддерживает, рассмотрите возможность использования /etc/ssh/ssh_config.d . Благодаря этому у вас будет возможность задавать параметры для конкретного хоста, которые не будут переписаны при обновлении системы. Например, можно создать в соответствующей директории файл с именем hackaday.conf :
Host *.hackaday.com hackaday.com StrictHostKeyChecking no Tunnel yes
Опять же, если вам не нравится идея проверки ключа хоста, просто один раз войдите в систему из root-аккаунта и вручную примите удалённый ключ. Или, если храбрости вам не занимать, вручную отредактируйте /root/.ssh/known_hosts .
Подключение
Теперь всё должно быть готово к работе. Если вы используете плагин для NetworkManager, вам понадобится просто установить новое соединение. А именно, нужно перейти в раздел VPN-соединений и выбрать SSH.
Выбор типа соединения
Теперь нужно настроить несколько параметров нового соединения. В том числе — нужно указать сертификат, который планируется использовать для входа в удалённую систему.
После сохранения настроек соединения это соединение можно активировать — как и любой другой сетевой интерфейс. Если вы хотите проверить ваш новый VPN — сначала, в обычном режиме, поинтересуйтесь своим IP-адресом на специальном сайте. А после этого включите VPN и снова узнайте свой адрес. Если VPN-соединение вам установить не удастся — поищите в системном журнале сведения об ошибках, выдаваемых SSH.
Итоги
Конечно, есть и другие VPN-решения. Но практически гарантированно то, что на удалённом компьютере, с которым вы работаете, есть SSH-сервер. Поэтому предлагаемый метод установления VPN-соединения через SSH — это простое и удобное решение, которым можно воспользоваться без какой-либо предварительной подготовки.
12.1. Настройка Remote Access VPN на ОС Linux
Чтобы настроить VPN на ОС Linux, необходимо установить пакеты для поддержки L2TP VPN. Установка пакетов отображена на примере Ubuntu. Выполните следующие команды:
sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp sudo apt update sudo apt install network-manager-l2tp network-manager-l2tp-gnome
После выполнения команд появится возможность добавления L2TP VPN-подключения. Перейдите в Настройки —> Сеть. Добавьте Layer 2 Tunneling Protocol (L2TP).
Далее настройте параметры подключения и укажите данные для аутентификации:
Перейдите в настройки IPsec нажатием одноимённой кнопки. В настройках IPsec укажите:
- Type: Pre-shared key (PSK).
- Pre-shared key, указанный на UserGate.
- Phase1 Algorithms: aes128-sha1-modp1024!
- Phase2 Algorithm: aes128-sha1!
Сохраните настройки IPsec. Перейдите в настройки PPP. В качестве метода аутентификации укажите PAP и отключите все виды компрессии:
Сохраните изменения. На этом настройка Ubuntu для подключения Remote Access VPN закончена.