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


Перед тем как приступить к работе

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

Все команды приведенные в статье запускаются с правами суперпользователя (root), если обратное не оговорено.

Перед настройкой выясните всю информацию о параметрах VPN подключения у администратора VPN сервера или службы техподдержки. Особенно важно знать:
IP адрес VPN сервера.
Ваш IP адрес в VPN, если он не назначается автоматически.
IP адреса DNS серверов, если они не назначаются автоматически вместе с вашим IP адресом.
Параметры маршрутизации, если вы используете подключение к другой сети.
Имя пользователя и пароль.
Необходимость шифрования данных при подключении.

В качестве примера используются следующие параметры:
Подключаемся в интернет.
IP адрес VPN сервера 81.25.32.68
Клиентский IP адрес выдается автоматически.
IP адреса DNS серверов назначаются сервером автоматически.
IP адрес сервера в VPN является маршрутом по-умолчанию на время подключения.
Имя пользователя: user, пароль: password. Внимание!!! не используйте этот пароль в реальных ситуациях! Он приведен только в качестве примера.
Шифрование при подключении отключено (провайдер не поддерживает).

В ваших конфигурационных файлах IP адрес VPN сервера имя пользователя и пароль будут другими. Не забывайте об этом!
Установка vpn клиента

Для начала нам понадобится программа vpn клиент. В этой статье рассматривается vpn клиент из порта net/pptpclient. Если она у вас уже установлена, то переходите к следующему разделу. Если вы сомневаетесь, установлена программа или нет, то ниже описано как это узнать. Для установки вы можете выбрать любой из методов: из порта или из уже готового пакета. Подробности о процессе установки можно узнать из Руководства FreeBSD на русском языке или из оригинала.
Проверка установки

Любителей KDE могут сделать это воспользовавшись программой KPackage. Важно не перепутать закладки и выбрать закладку с установленными программами. Встроенный в программу поиск значительно упростит вашу задачу.

Также сделать это можно из консоли при помощи команды:
#pkg_version -v | grep pptpclient

Если вы увидите примерно (версии и сатус необходимости обновления могут отличаться) соедующее:
pptpclient-1.7.1 = up-to-date with port

значит программа установлена. Переходим к следующему пункту.
Настройка vpn клиента

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

конфигурация для pptpclient находится в файле /etc/ppp/ppp.conf если этого файла нет, то создайте его командой:
touch /etc/ppp/ppp.conf

Пример содержимого файла с учетом условий примера:
vpn:
set authname user
set authkey password
set timeout 0
set ifaddr 0 0
add default HISADDR
enable dns

Внимание!!! Пробелы в начале строк начиная со второй являются обязательными!!!

Внимание!!! Включение опции enable dns приводит к перезаписи файла /etc/resolv.conf при установке соединения!!! Если хотите этого избежать, добавьте адреса DNS серверов вручную и удалите эту строку.

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

Так как пароль в файле ppp.conf хранится в открытом виде установите права на этот файл при помощи команд:
# chown root:wheel /etc/ppp/ppp.conf
# chmod 600 /etc/ppp/ppp.conf

Теперь на просмотр и редактирование /etc/ppp/ppp.conf имеет права только суперпользователь (root).
Использование

Установка связи :
#pptp 81.25.32.68 vpn &

В качестве примера используется конфигурация "vpn" как прописано в примере ppp.conf

Разрыв всех VPN соединений:
#killall pptp

Разрыв конкретного VPN подключения:
#kill 6187

где число 6187 взято из результата вывода команды ifconfig (подробности ниже).
Проверка настройки

Лучший метод проверить соединение это его установить. Устанавливаем соединение как указано выше. После этого должен появиться новый сетевой интерфейс tun0 или с другим номером.

Внимание!!! Подключение может устанавливаться в течение нескольких секунд (обычно не больше пяти). Не спешите решать проблемы, которы нет!

Следующая команда выведет на консоль список всех имеющихся интерфейсов:
#ifconfig

Среди всех интерфейсов должен быть примерно (отличается некоторыми данными) следующий:
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1400
inet 91.187.8.151 --> 91.187.0.1 netmask 0xffffffff
Opened by PID 6187

Если интерфейс имеется, то пробуем его использовать.

Внимание! Проверка доступности VPN соединения путем выполнения команды ping может показать, что ответа нету. И это может быть из-за того, что VPN сервер настроен не пропускать эти данные!

Проверить подключение можно запросив какой-либо сервис из сети в которую вы подключились. Если вы подключаетесь через VPN в интернет, то просто откройте в браузере (konqueror, opera, firefox, lynx) любую страничку и нажмите кнопку обновить. Если после этого страничка открылась, то принимайте поздравления и пропускайте следующий пункт.
Решение проблем

Если что-то пошло не так, то проблема решается поэтапно.
Сперва проверьте доступность VPN сервера при отключенном VPN соединении.

Выполните команду:
ping 81.25.32.68

. Остановить выполнение команды ping может комбинация клавиш Ctrl+C.

Если результат примерно следующий:
PING 81.25.32.68 (81.25.32.68): 56 data bytes
64 bytes from 81.25.32.68: icmp_seq=0 ttl=126 time=19.063 ms
64 bytes from 81.25.32.68: icmp_seq=1 ttl=126 time=19.260 ms
64 bytes from 81.25.32.68: icmp_seq=2 ttl=126 time=18.573 ms
64 bytes from 81.25.32.68: icmp_seq=3 ttl=126 time=18.157 ms
64 bytes from 81.25.32.68: icmp_seq=4 ttl=126 time=19.013 ms
64 bytes from 81.25.32.68: icmp_seq=5 ttl=126 time=18.017 ms

то VPN сервер доступен. Переходите к следующему пункту.

Если результат примерно следующий:
PING 82.25.32.68 (82.25.32.68): 56 data bytes
ping: sendto: No route to host
ping: sendto: No route to host
ping: sendto: No route to host
ping: sendto: No route to host

То значит у вас не настроены маршруты к серверу или вы неправильно ввели IP адрес вашего VPN сервера. Подробно о настройке маршрутизации написано в оригинале документации FreeBSD и на русском.

В остальных случаях или на сервере отключена обработка пакетов ping или у Вас нету доступа, или проблемы сети. Решайте эту проблему с администратором VPN сервера или техподдержкой провайдера. Если провайдер имеет несколько vpn серверов, то попробуйте использовать другой сервер.

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

Файл конфигурации с включенным журналированием (добавлена одна строка):
vpn:
set log phase chat lcp ipcp ccp tun command
set authname user
set authkey password
set timeout 0
set ifaddr 0 0
add default HISADDR
enable dns

Журнал событий записывается в /var/log/ppp.log
Маленькие удобства

Всего два файла сэкономят Вам много драгоценного времени:
Скрипт для подключения VPN. Назовем его connecting.sh
#!/bin/sh
pptp 81.25.32.68 vpn &

Если при установке соединения нужно выполнить дополнительно какие-то команды (например добавление маршрутов), то добавьте их в этот файл. Не забывайте, что соединение устанавливается не мгновенно. Поэтому используйте команду sleep после запуска pptp когда это нужно.
Скрипт для отключения VPN. Назовем его disconnecting.sh
#!/bin/sh
killall pptp

Если при разрыве соединения нужно выполнить дополнительно какие-то команды (например удаление маршрутов), то добавьте их в этот файл. Некоторые команды необходимо выполнять до разрыва соединения, некоторые после, а для некоторых это не имеет значение. Помните об этом.

Скопируйте оба файла в удобный для Вас каталог (если Вы планируете открыть доступ пользователям на запуск, то рекомендуется использовать home каталог пользователя). И установите права. Находясь в каталоге куда вы их скопировали выполните команды:
# chown root:wheel connecting.sh
# chmod 500 connecting.sh
# chown root:wheel disconnecting.sh
# chmod 500 disconnecting.sh

Эти команды устанавливают минимально необходимые права для запуска этих файлов с правами суперпользователя. С правами обычных пользователей (любых групп) эти скрипты выполняться не будут. Даже если вы откроете права на запуск этих скриптов пользователем, это не окажет никакого эффекта. Так что не искушайте судьбу и установите права как указано выше. Если Вы хотите дать возможность устанавливать соединение с "пользовательскими" правами, то читайте ниже.
Установка связи не под root правами

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

Изящный способ заключается в установке программы sudo и ее настройки всего в две строчки.
Установка sudo

Для начала проверьте, установлена ли у Вас эта программа. О том как это сделать указано ниже. Если программа установлена переходите к следующему разделу. Если программа не установлена воспользуйтесь установкой из порта security/sudo или готовым пакетом. Подробности о процессе установки можно узнать из Руководства FreeBSD на русском языке или из оригинала на английском.
Проверка установки

Любителей KDE могут снова воспользоваться программой KPackage.

Также сделать это можно из консоли при помощи команды:
#pkg_version -v | grep sudo

Если вы увидите примерно (версии и сатус необходимости обновления могут отличаться) соедующее:
sudo-1.6.9.1 = up-to-date with port

значит программа установлена. Переходим к следующему разделу.
Настройка sudo

Перед настройкой sudo полезно ознакомиться с документацией и страницами руководства. Настройка sudo должна производиться только при помощи команды visudo. После выполнения этой команды откроется текстовый редактор с настройками sudo. Перемещаемся в конец файла и добавляем следующие две строчки:
keeper localhost=NOPASSWD:/usr/home/keeper/connecting.sh
keeper localhost=NOPASSWD:/usr/home/keeper/disconnecting.sh

Вместо "keeper" вставьте ваш логин пользователя. Вместо "localhost" можно установить имя компьютера. Пути к скриптам также нуждаются в корректировке под Ваши реальные условия. При установке и разрыве соединения пароль спрашиваться не будет.

В целях безопастности:
используйте только полный путь к файлам.
настройте права доступа так, чтобы доступ на чтение и запуск имел только суперпользователь. Право на запись никому не выдавайте.

Продолжение следует
GUI для любителей удобств

данный раздел появится очень скоро
KDE
knemo
Отмазка

Данная статья не претендует на абсолютную полноту. Хотя бы потому что не описывает другие клиентские программы и программы для GUI. Вопросы напрямую не относящиеся к теме не были описаны специально, но приведены необходимые ссылки. Моменты в которых я не очень компетентен были опущены с приведением ссылок, до тех пор, пока я досканально с ними не разберусь или кто-то мне не поможет. Если кто-то дополнит эту статью недостающим материалом, то это будет полезно всем. Только просьба: попытайтесь сохранить стиль. Обсуждение статьи тут буду рад вашим отзывам и предложениям.

http://wiki.bsdportal.ru/doc:vpn_client

Обновлено: 12.03.2015