Протокол PPTP используется для установления частного соединения с провайдером посредством локальной сети. “Частность” соединения обеспечивается механизмом “имя_пользователя — пароль”, т.е. каждый, кто хочет соединиться с провайдером должен иметь “имя_пользователя” и соответствующий ему “пароль”. Соединение по этому протоколу часто применяется для предотвращения так называемого IP-спуфинга.
Пакет pptp-client является реализацией протокола PPTP для Линукс и других UNIX систем. Программы, входящие в него, распространяются на условиях лицензии GPL (см. файл COPYING).
Дополнительную более подробную информацию вы можете получить с сайта http://pptpclient.sourceforge.net
Для работы PPTP-туннеля необходима поддержка в ядре
IP: tunneling
IP: GRE tunnels over IP
PPP (point-to-point protocol) support
В дистрибутивах ALT Linux Team все эти пункты поддерживаются по умолчанию, так что пересборка ядра не требуется.
Для работы программе 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:
нужно ввести команду для работы с таблицей маршрутизации. Вся введенная строка просто передается как параметр команде route(8).
Для создания маршрута по умолчанию через туннель используйте параметр defaultroute в файле настроек для pppd.
После ввода команды появится еще одно приглашение
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”. Другие, не описанные здесь пункты диалогов, остаются читателю для самостоятельного изучения.
pptp-command вписывает в файл туннеля такие строки.
# # Include the main PPTP configuration file # file /etc/ppp/options.pptp
Это означает что дополнительные настройки для pppd будут читаться из файла /etc/ppp/options.pptp. Поэтому вам необходимо самим создать этот файл. За знаниями обращайтесь к man pppd. Параметры, указанные в файлах /etc/ppp/options.pptp и /etc/ppp/peers/имя_туннеля полностью определяют взаимодействие pppd с вашим PPTP-сервером. НЕПРАВИЛЬНЫЕ ИЛИ НЕДОСТАЮЩИЕ ПАРАМЕТРЫ В ЭТИХ ФАЙЛАХ ЯВЛЯЮТСЯ ПРИЧИНОЙ НЕРАБОТОСПОСОБНОСТИ ТУННЕЛЯ В БОЛЬШИНСТВЕ СЛУЧАЕВ.
Есть два способа старта туннеля.
Использовать программу pptp как псевдотерминал для pppd. Это делается указанием параметра
pty "/usr/sbin/pptp 192.168.5.2 --nolaunchpppd"
в файле настроек для pppd (например в /etc/ppp/options.pptp), где 192.168.5.2 IP-адрес PPTP сервера. В этом случае туннель нужно стартовать командой
# pppd call имя_туннеля
Необходимые действия после старта туннеля можно производить из скрипта /etc/ppp/ip-up.local Для дальнейшей информации смотрите файл options-2Com в каталоге с документацией к пакету pptp-client и man pppd.
В пакет pptp-client входит стартовый скрипт /etc/init.d/pptptunnel, который автоматически стартует туннель, указанный в его файле конфигурации /ect/sysconfig/pptp. В этом файле можно указать значения двух параметров:
строка с именем туннеля, который нужно стартовать. Если параметр не указан, используется /etc/ppp/peers/__default.
yes/no, если yes, скрипт будет автоматически устанавливать доменное имя машины, которое соответствует вашему IP-адресу, полученному от сервера. Для этого скрипт использует команду nslookup you.new.ip.address.
Кстати, этот скрипт можно использовать не только для запуска туннеля при старте системы, но и для ручного перезапуска туннеля.
Для того, чтобы сетевые соединения пошли через туннель в таблице маршрутизации должен быть указан для них маршрут через туннель. Если туннель используется для соединения с Internet, то через туннель нужно направлять все соединения, кроме локальных. Это делается указанием маршрута по умолчанию в таблице маршрутизации. Демон pppd может автоматически добавлять маршрут по умолчанию, если ему указан параметр defaultroute. Однако, если уже существует другой маршрут по умолчанию, то pppd не добавит маршрут через туннель.
Как правило при настройке соединения с локальной сетью указывается маршрутизатор по умолчанию — GATEWAY. Это означает, что при старте локальных сетевых интерфейсов в таблицу маршрутизации будет добавлен маршрут по умолчанию через указанный маршрутизатор. Так как PPTP-туннель стартует позже локальных сетевых интерфейсов, то даже при указанном параметре defaultroute pppd не установит маршрут по умолчанию через туннель.
Чтобы выйти из данной ситуации, нужно отключить создание маршрута по умолчанию при старте локальных сетевых интерфейсов. Для этого нужно в файле /etc/sysconfig/network удалить две строки
GATEWAY=xxx.xxx.xxx.xxx GATEWAYDEV=ethX
xxx.xxx.xxx.xxx и ethX IP-адрес маршрутизатора и имя сетевого интерфейса, соединённого с маршрутизатором. Эти значения зависят от вашей системы.
После удаления этих двух строк и перезапуска сетевых интерфейсов командой service network restart маршрута по умолчанию не будет и вашему компьютеру будет доступна локальная сеть, соответствующая заданной сетевой маске.
Однако, часто бывает так, что у вас есть соединения с локальной сетью, состоящей из нескольких подсетей. В этом случае, после указанной выше операции другие подсети не будут доступны, так как к ним не будет указан маршрут (раньше его роль выполнял маршрут по умолчанию). Чтобы получить доступ к локальным подсетям, необходимо указать статический маршрут в эти сети. Статические маршруты указываются в файле /etc/sysconfig/static-routes в формате, близком к синтаксису команды route(8). Например,
any net 192.168.0.0/16 gw 192.168.5.2
данная строка указывает, что должен быть создан маршрут в сеть 192.168.0.0/16 через маршрутизатор 192.168.5.2. Слово “any” в начале строки — обязательное ключевое слово. В качестве маршрутизатора для этого маршрута как правило следует установить IP-адрес, указанный ранее в параметре GATEWAY в файле /etc/sysconfig/network.
После перезапуска сетевых интерфейсов и старта туннеля команда route -n покажет примерно такую картину:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.30.96.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.0.0 192.168.5.2 255.255.0.0 UG 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 172.30.96.1 0.0.0.0 UG 0 0 0 ppp0
Как видим, маршрут по умолчанию указывает на туннель, также присутствует маршрут в локальную сеть 192.168.0.0, которые добавляется при старте сетевых интерфейсов и на него не влияет старт туннеля.