OpenVPN вместо SSH туннелей

2010.07.12

Эта заметка устарела, есть обновлённая версия.

Для общения с домашними машинами по SSH я обычно использую адреса в зоне local (zeroconf), а для доступа извне нужно ходить на один из внешних IP адресов и нестандартные порты.  В только что закончившемся отпуске решал эту проблему добавлением в ~/.ssh/config директив HostName и Port, которыми можно указать, куда на самом деле следует ходить, когда просят подключиться к определённой машине, примерно так:

Host scud.local
HostName home.umonkey.net
Post 8022

Работает прозрачно, но только для SSH.  Чтобы ходить на сайт через домашний прокси — а у тамошнего сотового оператора возникали проблемы при большом количестве соединений — нужно было отдельно запустить туннель, что не сложно, но всё равно какое-то лишнее действие.

Вернувшись, решил настроить OpenVPN.  Решение более универсальное: получился общесистемный переключатель, ничего редактировать не надо.  Доволен.  Не осилил TLS сертификаты — настроил на использование фиксированного ключа.  Подключаюсь из консоли алиасом, выполняющим команду:

sudo openvpn --cd ~/.openvpn --config ~/.openvpn/scud.conf

Однако в этом случае для работы VPN требуется отдельная вкладка терминала, в который является моим основным рабочим инструментом, и всё лишнее в нём меня напрягает.  Гораздо удобнее подключаться через Network Manager, который и так уже висит в области уведомлений.

Подключение через апплет Network Manager

Когда в командной строке всё заработало, я импортировал конфигурационный файл в Network Manager.  В выпадающем меню выбираю «Соединения VPN», там выбираю нужное мне.  После небольшой паузы к иконке сетевого соединения добавляется небольшой замок: туннель успешно запущен.

Network Manager icon with OpenVPN connected

Сюрпризом стало то, что теперь весь трафик пошёл через туннель.  Чтобы этого не происходило, во вкладке «Параметры IPv4» настроек туннеля нужно нажать на кнопку «Маршруты» и поставить галку «Использовать это соединение только для ресурсов в его сети».

Однако если OpenVPN использует статический ключ, как в моём случае, ресурсами сети считаются только адреса в виртуальной сети 10.1.0.0, а не то, что в действительности находится по ту сторону туннеля.  Чтобы всё заработало как нало, я добавил вручную маршрут «10.26.7.0» с маской «255.255.255.0», после этого всё заработало как надо.

OpenVPN routes

Логи подключения можно найти в /var/log/messages и /var/log/daemon.log.

Следить за развитием событий можно через RSS ленту или почтовую рассылку.