Базовые сведения по настройке и установке PPTP соединения с провайдером +------------------------------------------------------------------------+ | История переиздания | |------------------------------------------------------------------------| | Издание 0.5 | 16 Apr 2006 | |------------------------------------------------------------------------| | Добавлено описание настроки системы etcnet. Убрано описание натройки | | устарешим способом через netscripts. | |------------------------------------------------------------------------| | Издание 0.4 | 12 Feb 2004 | |------------------------------------------------------------------------| | Добавлено описание работы с командами ifup и ifdown. | |------------------------------------------------------------------------| | Издание 0.3 | 19 Jun 2003 | |------------------------------------------------------------------------| | Переписано для соответствия команде pptp-config и новому скрипту | | pptptunnel. Добавлен раздел про ip-up.local. | |------------------------------------------------------------------------| | Издание 0.2 | 19 Nov 2002 | |------------------------------------------------------------------------| | Добавлен раздел про маршрутизацию. Восстановлена sectioninfo. | |------------------------------------------------------------------------| | Издание 0.1 | 22 May 2002 | |------------------------------------------------------------------------| | Начальная версия. | +------------------------------------------------------------------------+ -------------------------------------------------------------------------- Введение Протокол PPTP используется для установления частного (VPN, Virtual Private Network) соединения с провайдером посредством локальной сети. <<Частность>> соединения обеспечивается механизмом <<имя_пользователя -- пароль>>, т.е. каждый, кто хочет соединиться с провайдером должен иметь <<имя_пользователя>> и соответствующий ему <<пароль>>. Соединение по этому протоколу часто применяется для предотвращения так называемого IP-спуфинга. Пакет pptp-client является реализацией протокола PPTP для Линукс и других UNIX систем. Программы, входящие в него, распространяются на условиях лицензии GPL (см. файл COPYING). Для установки пакета pptp-client в вашу систему выполните команду apt-get install pptp-client. Дополнительную более подробную информацию вы можете получить с сайта [1]http://pptpclient.sourceforge.net Руководство по настройке Основы работы программ по протоколу PPTP и их взаимодействия между собой Для работы PPTP-туннеля необходима поддержка в ядре o IP: tunneling o IP: GRE tunnels over IP o PPP (point-to-point protocol) support В дистрибутивах [2]ALT Linux Team все эти пункты поддерживаются по умолчанию, так что пересборка ядра не требуется. Установление туннеля состоит из двух стадий. Сначала программа pptp создаёт через существующее сетевое соединение туннель к серверу провайдера. Для этого используется протокол GRE. Через установленный туннель открывается соединение с сервером провайдера по протоколу PPP, и вся фактическая работа по управлению соединением возлагается на демон pppd. По сути, принцип работы не отличается от работы через модем: модем создаёт транспортный "туннель" через телефонные линии, а pppd устанавливает и обслуживает сетевое соединение. Настройка соединения по протоколу PPTP, соответственно, тоже состоит из двух стадий. Первая стадия очень простая. Нужно определить, какие параметры командной строки нужно указать для pptp, чтобы создать туннель. Для этого воспользуйтесь man pptp. Два наиболее употребительных параметра это IP-адрес сервера, с которым устанавливается туннель, и --nolaunchpppd, который указывает pptp, способ взаимодействия с pppd. В результате, команда установления туннеля будет выглядеть примерно так: pptp 192.168.5.2 --nolaunchpppd. Вторая и основная стадия настройки заключается в конфигурировании демона pppd. По этой части есть много разной документации, например PPP-HOWTO из пакета howto-html-ru. Естественно, man pppd ваш лучший друг. Для работы по протоколу PPTP демону pppd нужно указать, как взаимодействовать с pptp. Взаимодействие происходит через псевдопоследовательное устройство (псевдотерминал), которое pptp создаёт для pppd. В конфигурации pppd это указывается параметром pty "pptp 192.168.5.2 --nolaunchpppd". Имя пользователя и пароль указываются обычным для pppd образом. <<Ручная>> настройка pppd Создаём файл /etc/ppp/peers/tunnel_name, tunnel_name выбирайте по своему усмотрению. В этот файл пишем ipparam "tunnel_name" debug pty "pptp 192.168.5.2 --nolaunchpppd" connect /bin/true name login_name defaultroute 192.168.5.2 замените на IP-адрес сервера, с которым вы устанавливаете туннель, а login_name на ваше имя пользователя. Скорее всего для авторизации на сервере будет использоваться chap-авторизация. Поэтому, в файле /etc/ppp/chap-secrets пишем login_name * password Всё. Основная конфигурация готова. Естественно, вместо login_name и password, нужно написать настоящие имя пользователя и пароль. О всевозможных полезных дополнительных параметрах читайте в man pppd. НЕПРАВИЛЬНЫЕ ИЛИ НЕДОСТАЮЩИЕ ПАРАМЕТРЫ ЯВЛЯЮТСЯ ПРИЧИНОЙ НЕРАБОТОСПОСОБНОСТИ ТУННЕЛЯ В БОЛЬШИНСТВЕ СЛУЧАЕВ. Настройка pppd с использованием программы pptp-config pptp-config -- это программа, написанная на языке Perl, она задаёт вопросы пользователю и в соответствии с ответами создаёт конфигурационный файл в каталоге /etc/ppp/peers. Запустить программу легко (делать это надо от имени пользователя root): # pptp-config Если в ответ вы получаете сообщение, похожее на это bash: pptp-config: No such file or directory то скорее всего вы забыли установить пакет pptp-client. Вернитесь к введению и уточните порядок установки пакета. Вы увидите на экране приглашение для ввода цифры: 1.) Manage CHAP secrets 2.) Manage PAP secrets 3.) List PPTP Tunnels 4.) Add a NEW PPTP Tunnel 5.) Delete a PPTP Tunnel 6.) 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: <> -- это <<имя_пользователя>>, которое используется для установки соединения. После ввода имени (я вводил test_user) на экране появится следующее: 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, и имя станет <>. Далее увидим: Password: This is the password or CHAP secret for the account specified. The password will not be echoed. Password: Здесь нужно ввести пароль, соответствующий вашему <<имени_пользователя>>, который используется для установки соединения. После всех этих действий мы снова попадаем в диалог управления секретами. Теперь вы можете выбрать <<1>> и увидеть ваши секреты. test_user PPTP ***** Далее нам нужно создать <<туннель>>. Для этого возвращаемся в главный диалог, введя <<4>> или <>, и выбираем <<4>> (Add a NEW PPTP Tunnel). На экране видим следующее: Add a NEW PPTP Tunnel. Tunnel Name: Здесь мы вводим имя туннеля. Конфигурация туннеля будет храниться в одноимённом файле в каталоге /etc/ppp/peers/, так что желательно для туннеля выбрать имя без пробелов и только из латинских букв. Я ввёл test_tunnel. Server IP: IP-адрес сервера, с которым мы будем устанавливать VPN-соединение (вам его должен был сообщить провайдер). Я ввёл 192.168.5.2 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_tunnel - 192.168.5.2 - test_user - PPTP Added tunnel test_tunnel И попадаем в главный диалог. Скорее всего нам больше ничего не нужно настраивать и мы выбираем <<6>>. Другие, не описанные здесь пункты диалогов, остаются читателю для самостоятельного изучения. pptp-config вписывает в файл туннеля такие строки. # # 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-сервером. НЕПРАВИЛЬНЫЕ ИЛИ НЕДОСТАЮЩИЕ ПАРАМЕТРЫ В ЭТИХ ФАЙЛАХ ЯВЛЯЮТСЯ ПРИЧИНОЙ НЕРАБОТОСПОСОБНОСТИ ТУННЕЛЯ В БОЛЬШИНСТВЕ СЛУЧАЕВ. Старт туннеля Старт туннеля производится командой (выполнять от имени root) # pppd call имя_туннеля Это означает, что вы запускаете демон pppd, а свою конфигурацию он читает из файла /etc/ppp/peers/имя_туннеля. Необходимые действия после старта туннеля можно производить из скрипта /etc/ppp/ip-up.local ([3]<< Выполнение дополнительных действий после старта туннеля. >>). Использование современной системы управления сетевыми соединениями etcnet. Настройка системы etcnet для старта PPTP-туннеля практически ничем не отличается от настройки etcnet для работы с PPP-соединениями. Я настоятельно рекомендую ознакомиться с докумендацией по адресу http://wiki.sisyphus.ru/admin/etcnet для более подробного описания настроек. Для настройки PPTP-соединения необходимо в каталоге /etc/net/ifaces создать каталог для нового сетевого интерфейса, например ppp20 (не рекомендуется создавать PPP-интрефейсы с низкими номерами из-за неискоренимых недостатков демона pppd). В этом каталоге создаём файл options со следующим содержанием: TYPE=ppp PPPTYPE=pptp PPTP_SERVER=192.168.0.2 PPPOPTIONS="call pptp0" Здесь PPTP_SERVER~--- адрес сервера вашего провайдера, pptp0~--- имя настроенного туннеля. После этого можно устанавливать соединение командой ifup ppp20 и останавливать соелинение командой ifdown ppp20. Выполнение дополнительных действий после старта туннеля. Демон pppd предлагает возможность автоматического выполнения определённых пользователем скриптов сразу после старта сетевого интерфейса. По умолчанию pppd автоматически выполняет скрипт /etc/ppp/ip-up. В дистрибутивах [4]ALT Linux Team в этот скрипт уже записаны полезные команды, и этот файл не рекомендуется исправлять. Пользователи могут вписывать свои команды в файл /etc/ppp/ip-up.local, который вызывается в конце файла /etc/ppp/ip-up как обычная программа. Так как файл /etc/ppp/ip-up.local является общим для всех сетевых интерфейсов, которыми управляет pppd, использовать его напрямую не совсем удобно. Вероятно, более предпочтительным способом использования будет вписывание в него таких строк: #!/bin/bash SCRIPT=/etc/ppp/ip-up.$6 [ -x $SCRIPT ] && $SCRIPT $@ Эти строки означают, что сразу будет выполнена программа с именем /etc/ppp/ip-up.ipparam. Значение <> это строка, передаваемая демону pppd через параметр ipparam. pptp-config устанавливает значение ipparam равное имени туннеля. Например, если в конфигурации pppd есть строка <>, то выполнится программа с именем /etc/ppp/ip-up.test_tunnel. Программа /etc/ppp/ip-up.ipparam может быть обычным скриптом или ссылкой на какую-то другую программу. Имейте только ввиду, что она будет выполняться с правами суперпользователя. Программе /etc/ppp/ip-up.ipparam при вызове передаются параметры, соответствующие только что стартовавшему сетевому интерфейсу. Они полностью идентичны параметрам, передаваемым в /etc/ppp/ip-up, и их значения описаны в man pppd. Программа /etc/ppp/ip-up.ipparam может выполнять любые необходимые пользователю действия, используя или не используя передаваемые ей параметры. Например, если вам необходимо использовать специальные настройки для DNS, вы можете вписать команды, модифицирующие файл /etc/resolv.conf в скрипт /etc/ppp/ip-up.ipparam. Для выполнения действий после выключения туннеля используется файл /etc/ppp/ip-down.local. Использование этого скрипта полностью аналогично использованию /etc/ppp/ip-up.local. Настройка маршрутизации Для того, чтобы сетевые соединения пошли через туннель в таблице маршрутизации должен быть указан для них маршрут через туннель. Если туннель используется для соединения с Internet, то через туннель нужно направлять все соединения, кроме локальных. Это делается указанием маршрута по умолчанию в таблице маршрутизации. Демон pppd может автоматически добавлять маршрут по умолчанию, если ему указан параметр defaultroute. Однако, если уже существует другой маршрут по умолчанию, то pppd не добавит маршрут через туннель. Как правило при настройке соединения с локальной сетью указывается маршрутизатор по умолчанию -- GATEWAY. Это означает, что при старте локальных сетевых интерфейсов в таблицу маршрутизации будет добавлен маршрут по умолчанию через указанный маршрутизатор. Так как PPTP-туннель стартует позже локальных сетевых интерфейсов, то даже при указанном параметре defaultroute pppd не установит маршрут по умолчанию через туннель. Чтобы выйти из данной ситуации, нужно отключить создание маршрута по умолчанию при старте локальных сетевых интерфейсов. Для этого нужно в файлах /etc/net/ifaces/*/ipv4route удалить строки вида default via xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx IP-адрес маршрутизатора. Это значение зависит от настроек вашей системы. После удаления этих строк и перезапуска сетевых интерфейсов командой service network restart маршрута по умолчанию не будет и вашему компьютеру будет доступна локальная сеть, соответствующая заданной сетевой маске. Однако, часто бывает так, что у вас есть соединения с локальной сетью, состоящей из нескольких подсетей. В этом случае, после выполнения указанной выше операции другие подсети будут недоступны, так как к ним не будет указан маршрут (раньше его роль выполнял маршрут по умолчанию). Чтобы получить доступ к локальным подсетям, необходимо указать статический маршрут в эти сети. Статические маршруты указываются в файле /etc/net/ifaces/*/ipv4route для соответствующих сетевых интерфейсов. Например, 192.168.0.0/16 via 192.168.5.2 данная строка указывает, что должен быть создан маршрут в сеть 192.168.0.0/16 через маршрутизатор 192.168.5.2. В качестве маршрутизатора для этого маршрута как правило следует установить IP-адрес, указанный ранее как маршрутизатор по умолчанию. После перезапуска сетевых интерфейсов и старта туннеля команда 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, который добавляется при старте сетевых интерфейсов и на него не влияет старт туннеля. Решение проблем При анализе проблем вам поможет указание параметра debug в файле настроек pppd и чтение логов. Ещё загляните в howto-diagnosis.html в каталоге с документацией к пакету pptp-client. References Visible links 1. http://pptpclient.sourceforge.net/ 2. http://www.altlinux.ru/ 3. Выполнение дополнительных действий после старта туннеля. file:///home/yura/Documents/!WORK/alt-docs/docs/admin/network/pptpclient-howto/pptpclient-howto.html#ip-up.local 4. http://www.altlinux.ru/