Настройка pptp-command клиента для подключения к VPN серверу

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

Этот документ взят | отсюда с небольшими доработками.

Преамбула

Данный файл содержит базовые сведения по настройке и установке PPTP соединения с провайдером. Сведения в этом документе НЕ ЯВЛЯЮТСЯ абсолютно правильными и единственно верными. Я надеюсь, что они вам могут быть полезны, однако не даю никаких гарантий относительно их полезности. Вы можете свободно распространять и изменять этот текст, однако, если вы вносите в него изменения, ОБЯЗАТЕЛЬНО указывайте, что оригинальный текст вами изменен и оставляйте свой e-mail для связи с вами.

Введение

Протокол PPTP используется для установления частного соединения с провайдером посредством локальной сети. "Частность" соединения обеспечивается механизмом "имя_пользователя - пароль", т.е. каждый, кто хочет соединиться с провайдером должен иметь "имя_пользователя" и соответствующий ему "пароль". Соединение по этому протоколу часто применяется для предотвращения так называемого IP-спуффинга.

Пакет pptp-client является реализацией протокола PPTP для Линукса и других UNIX систем. Программы, входящие в него, распространяются на условиях лицензии GPL (см. файл COPYING).

Дополнительную более подробную информацию, хотя и немного устаревшую, вы можете получить с сайта http://pptpclient.sourceforge.net

Руководство по настройке

Работает эта программа так. Сама программа pptp запускает так называемый процесс "call manager", который создает туннель PPP->TCP и запускает pppd демона для установления соединения с сервером и выполнения всей работы по обработке пользовательских запросов.

Настройка pptp с использованием программы pptp-command.

Для работы программе pptp необходимо знать IP-адрес сервера для соединения. Это адрес можно указать как параметр командной строки при вызове программы pptp. Второй способ - это создать конфигурационный файл с помощью программы pptp-command. pptp-command - это программа, написанная на перле, она задает вопросы пользователю и в соответствии с ответами создает конфигурационный файл в каталоге /etc/ppp/peers.

Запустить программу легко:

# pptp-command

Вы увидите на экране приглашение для ввода цифры:

1.) start
2.) stop
3.) setup
4.) quit
What task would you like to do?: 

При вводе "1" программа предложит выбрать вам какой туннель вы хотите стартовать и после ввода запустит его.

При вводе "2" прекращают свою работу все работавшие туннели.

При вводе "3" вы попадете в диалог настройки:

1.) Manage CHAP secrets
2.) Manage PAP secrets
3.) List PPTP Tunnels
4.) Add a NEW PPTP Tunnel
5.) Delete a PPTP Tunnel
6.) Configure resolv.conf
7.) Select a default tunnel
8.) Quit
?:

Для начала нам нужно создать записи с "секретами". Эти записи имеют формат "имя_пользователя имя_сервера пароль" и хранятся в файлах /etc/ppp/chap-secrets или /etc/ppp/pap-secrets в зависимости от метода авторизации. Вам скорее всего понадобится создать CHAP-секрет (точно может сказать только ваш провайдер). Итак выбираем "1" и видим на экране диалог управления секретами:

1.) List CHAP secrets
2.) Add a New CHAP secret
3.) Delete a CHAP secret
4.) Quit
?: 

При вводе "1" на экран выводится список существующих секретов.

При вводе "3" вам предлагается выбрать из списка секрет для удаления. Секреты создаются и удаляются парами (подробнее ниже), так что нужно выбирать только один.

Для добавления нового секрета вводим "2". На экране видим следующее:

Add a NEW CHAP secret.

NOTE: Any backslashes (\) must be doubled (\\).

Local Name:

This is the 'local' identifier for CHAP authentication.
 
NOTE: If the server is a Windows NT machine, the local name
          should be your Windows NT username including domain.
          For example:

                  domain\\username
 
Local Name: 

"Local name" - это "имя_пользователя", которое вы должны были придумать сами и сообщить провайдеру или провайдер должен был придумать сам и сообщить его вам. После ввода имени (я вводил test) на экране появится следующее:

Remote Name:

This is the 'remote' identifier for CHAP authentication.
In most cases, this can be left as the default. It must be
set if you have multiple CHAP secrets with the same local name
and different passwords. Just press ENTER to keep the default.

Remote Name [PPTP]: 

Здесь нужно ввести "имя_сервера", которое будет использоваться при авторизации. Часто серверу не нужно подтверждать свою "персону", так что, если вам провайдер не сообщил имя сервера, то смело жмите ENTER, и имя станет "PPTP". Далее увидим:

Password:

This is the password or CHAP secret for the account specified. The
password will not be echoed.

Password: 

Здесь нужно ввести пароль, соответствующий вашему "имени_пользователя".

После всех этих действий мы снова попадаем в диалог управления секретами. Теперь вы можете выбрать "1" и увидеть ваши секреты. Их два:

test    PPTP    *****
PPTP    test    *****

Второй нужен для авторизации сервера.

Далее нам нужно создать "туннель". Для этого возвращаемся в главный диалог, введя "4" или "q", и выбираем "4" (Add a NEW PPTP Tunnel). На экране видим следующее:

Add a NEW PPTP Tunnel.

1.) Other
Which configuration would you like to use?: 

Здесь нам ничего не остается, как ввести "1" для продолжения.

Tunnel Name: 

Имя туннеля, т.е. имя файла в /etc/ppp/peers. Я ввел test.

Server IP: 

IP-адрес сервера, с которым мы будем соединяться (вам его должен был сообщить провайдер). Я ввел 192.168.5.2

What route(s) would you like to add when the tunnel comes up?
This is usually a route to your internal network behind the PPTP server.
You can use TUNNEL_DEV and DEF_GW as in /etc/pptp.d/ config file
TUNNEL_DEV is replaced by the device of the tunnel interface.
DEF_GW is replaced by the existing default gateway.
The syntax to use is the same as the route(8) command.
Enter a blank line to stop.
route: 

Здесь можно создать дополнительные маршруты. В частности, если вы хотите автоматически ходить в интернет через этот туннель, вам нужно добавить здесь маршрут по умолчанию. Делается это так:

route: del default

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

route: add default TUNNEL_DEV

После этого появится еще дно приглашение

route:

Для завершения нажимаем ENTER. Далее видим:

Local Name and Remote Name should match a configured CHAP or PAP secret.
Local Name is probably your NT domain\username.
NOTE: Any backslashes (\) must be doubled (\\).

Local Name: 

Здесь нужно ввести "имя_пользователя" из существующего секрета, которое будет использоваться при соединении.

Remote Name [PPTP]: 

Все вышесказанное относится и к "имени_сервера". После ввода получаем следующее:

Adding test - 192.168.5.2 - test - PPTP
Added tunnel test

И попадаем в главный диалог. Далее неплохо выбрать "туннель по умолчанию" (Select a default tunnel). На экран выводится список туннелей и мы выбираем нужный нам туннель. При этом в каталоге /etc/ppp/peers появляется символическая ссылка

__default->файл_туннеля

Скорее всего нам больше ничего не нужно настраивать и мы выбираем "8". Другие, не описанные здесь пункты диалогов, остаются читателю для самостоятельного изучения.

Настройка автоматического соединения при старте системы.

1 Вариант. Прописываем в /etc/rc.d/rc.local строку

pptp-command start miac

Где miac - Имя туннеля
2 Вариант В пакет pptp-client входит стартовый скрипт /etc/init.d/pptptunnel, который автоматически стартует туннель, указанный в его файле конфигурации /ect/sysconfig/pptp. В этом файле можно указать значения двух параметров:

PPTP_TUNNEL - строка с именем туннеля, который нужно стартовать. Если параметр не указан, используется /etc/ppp/peers/__default.

PPTP_SET_HOSTNAME - yes/no, если yes, скрипт будет автоматически устанавливать доменное имя машины, которое соответствует вашему IP-адресу, полученному от сервера. Для этого скрипт использует команду nslookup you.new.ip.address

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

3 Вариант Можно еще использовать следующий скрипт

# Подключение к VPN серверу для выхода в Inet
/usr/sbin/pppd persist maxfail 0 pty '/usr/sbin/pptp 82.137.137.30 --nolaunchpppd' call miac
route del default
route add default ppp0

Где miac - имя тунеля.

82.137.137.30 - ip адрес сервера VPN

Этот скрипт можно вставить в файл /etc/init.d/rc.local. Его преимущество, что при падении интерфейса тунель автоматически восстанавливается. А недостаток, что тонель может подняться не сразу и при этом не сработают команды для поднятия default route, и их придется добавлять в скрипт и выполнять в кроне.

Файл /etc/ppp/options.pptp для клиента

При использовании mppe нужно загрузить модуль ppp_mppe

modprobe ppp_mppe

И в файл /etc/modules.preload и /etc/modules добавить строку.

ppp_mppe

В файле /etc/ppp/options.pptp лежат настройки клиента для подключения к серверу VPN.

Вот вид этого файла при при авторизации MSCHAP и MPPE

#
# Lock the port
#
lock


#
# Turn off transmission protocols we know won't be used
#
nobsdcomp
nodeflate

#
# We want MPPE
#
#mppe no40
#mppe no56
#mppe no128
mppe required,stateless
+mschap-v2
# needed for W2K3 anyway
refuse-eap

#
# We want a sane mtu/mru
#
mtu 1000
mru 1000

#
# Time this thing out of it goes poof
#
lcp-echo-failure 10
lcp-echo-interval 10
#
# We don't need the tunnel server to authenticate itself
#
noauth

Обратите внимание, что noauth стоит в конце файла, иначе будет возникать ошибка соединения.

Start a tunnel to which server?: 1
/usr/sbin/pppd: The remote system (PPTP) is required to authenticate itself
/usr/sbin/pppd: but I couldn't find any suitable secret (password) for it to use to do so.
/usr/sbin/pppd: (None of the available passwords would let it use an IP address.)