Статья написана по мотивам Настройка VPN (PPTP) соединения в ArchLinux и переработана для Debian. Процесс аналогичен для релизов Etch, Lenny, Squeeze и Wheezy

Дано:

  1. Компьютер с установленной системой Debian;
  2. Провайдер Интернет-услуг, предоставляющий доступ по VPN (PPTP) с выдачей реального ip-адреса пользователю;
  3. Провайдер автоматически назначает ip-адрес компьютерам пользователей в транспортной сети;
  4. В транспортной сети не используется основной шлюз.

Задача: настроить VPN-соединение для выхода в сеть Интернет через провайдера.
Уровень пользователя: средний, умеющий работать в консоли, с файловыми менеджерами и с текстовыми редакторами.
Решение:

В таких сетях, где провайдер предосталяет услуги, обычно создаётся транспортная сеть, где размещены, например файловые или игровые серверы. К этой же сети подключаются и пользователи, но для доступа в сеть Интернет, пользователь должен настроить как бы "тоннель во внешний мир Интернета" с помощью VPN-соединения.
Конечно, у разных провайдеров свои способы предоставления услуг доступа в Интернет, но остановимся на таком, что предоставляет доступ посредством VPN PPTP.

Итак, для настройки VPN-соединения, провайдер должен выдать параметры этого соединения. Предположим они такие:

логин: user
пароль: user-007
сервер доступа: 10.0.0.1 или vpn.provider.ru
тип vpn-соединения: PPTP
тип аутентификации: CHAP, MS-CHAP
параметры TCP\IP: IP-адрес соединения, DNS-сервера автоматически
шифрование данных: нет
компрессия данных: нет

Немного о строке "параметры TCP\IP - автоматически" - это означает, что провайдер сам выдаёт адрес и дополнительные сетевые параметры для подключения. Пользователю в этом случае, в параметрах TCP\IP для этого VPN-подключения ничего настраивать не надо.

Установка нужных пакетов

Для настройки собственно VPN-соединения, потребуется доустановить пакеты: ppp, pptp-linux и некоторые зависимости. Это можно проделать из Synaptic или из консоли:

 # apt-get install ppp pptp-linux 

Менеджер пакетов установит необходимые и ещё несколько зависимых пакетов. Эти пакеты находятся на установочном компакт-диске, поэтому менеджер попросит вставить этот диск.

Настройка

Предполагается, что транспортная сеть на компьютере уже настроена и сетевой адаптер имеет адрес 10.0.0.25, который получен автоматически по DHCP или настроен пользователем вручную.

После установки пакета ppp, будет создан каталог /etc/ppp , где собственно и будут содержаться файлы, управляющие PPP- и в частности VPN- -соединениями.

Теперь нужно создать или изменить некоторые файлы. Естественно, это нужно делать из под учётной записи root`а.

Редактируем или создаём файл конфигурации собственно соединения. Назовём его "provider" и поместим в /etc/ppp/peers Пример файла:

peers
pty "pptp 10.0.0.1 --nolaunchpppd"
user "user"
password "user-007"
require-mschap
noauth
nobsdcomp
nodeflate
nomppe
mtu 1372
mru 1372
defaultroute
usepeerdns
lcp-echo-failure 10
persist
maxfail 0
holdoff 15

Несколько слов о том, что значат все эти непонятные опции:

pty "pptp 10.0.0.1 --nolaunchpppd" строка говорит программе запустить соединение с VPN-сервером провайдера с адресом 10.0.0.1. Если провайдер указал вместо IP-адреса, символьное имя, строку надо модифицировать так: pty "pptp vpn.provider.ru --nolaunchpppd"
user "user" логин для соединения
password "user-007" это пароль для соединения
require-mschap строка говорит, что нужно использовать протокол аутентификации MS-CHAP
noauth строка запрещает использовать обратную аутентификацию
nobsdcomp отключаем сжатие (компрессию данных, идущих в VPN-соединении)
nodeflate дополнительный параметр компрессии - отключаем
nomppe отключаем шифрование данных
mtu 1372 размер отсылаемого пакета данных с компьютера пользователя. Если провайдер не уточняет размер пакета, рекомендуется выставить именно такой
mru 1372 это размер принимаемого пакета
defaultroute указывает программе устанавливать для компьютера основной маршрут, выдаваемый провайдером для VPN-соединения*
usepeerdns переключить параметры DNS-сервера с глобальных (/etc/resolv.conf) на те, что выдаёт провайдер при установке соединения. При завершении соединения, глобальные параметры возвращаются обратно.
lcp-echo-failure 10 это количество попыток проверки активности канала, после которого соединение отключается, в случае, если проверка оказалась неуспешной
persist после аварийного разрыва канала, всё-равно пытаться создать соединение
maxfail 0 количество попыток восстановить соединение, 0 - пробовать бесконечно
holdoff 15 пауза между попытками (требуется для завершения всех процессов на стороне провайдера, если разрыв произошёл аварийно

Прим.

  • Опция defaultroute требует дополнительных комментариев. Если провайдер предоставляет услуги доступа в сеть Интернет через NAT И при этом не устанавливает в транспортной сети основной шлюз (для сетевого адаптера компьютера), то опцию следует выставить. Если в транспортной сети основной шлюз указывается, то опция defaultroute не сработает и основной шлюз в VPN-сети не установится.
  • Опция usepeerdns нужна только когда провайдер не задаёт адрес DNS-сервера на адаптере транспортного подключения через DHCP или ручную настройку.

Когда файл создан (модифицирован) и скопирован в /etc/peers , нужно выставить необходимые права доступа для ограничения доступа к учётным данным, хранимым в файле. Читать и модифицировать файл следует разрешить только пользоватею root. В консоли, это делается примерно так:

Переходим в каталог и просматриваем его:

# cd /etc/ppp/peers/
# ls -l
total 1
-rw-rw-rw- 1 user user 221 Sep 19 11:08 provider
<code>
Изменяем владельца файла provider, а затем меняем права доступа:
<code>
# chown root:root provider
# chmod 600 provider

Проверяем результат:

# ls -l</font><nowiki>
-rw------- 1 root root 221 Sep 19 11:08 provider

Теперь доступ к учётным данным может получить только пользователь root. Можно сделать несколько файлов с разными именами и параметрами для доступа к больше чем одному провайдеру и запускать соединение к нужному. В примере выше, были даны базовые опции конфигурации VPN. Если Вы хотите углубиться в настройку и больше узнать об опциях, загляните в man pppd.

Пробуем запустить наше соединение для начала от имени root`а:

# pon provider

Как Вы уже догадались, pon - активирует соединение с провайдером, сконфигурированным в файле /etc/ppp/peers/providers

Через 3…5 секунд читаем последние события лога /var/log/daemon.log на предмет ошибок. Это можно сделать через команду tail или воспользоваться файловым менеджером типа Midnight Commander, запущенным от имени root`а. Последние события лога будут выглядеть примерно так:

...
Dec 27 22:32:47 comp pppd[[3151]]: pppd 2.4.5 started by root, uid 0
Dec 27 22:32:47 comp pppd[[3151]]: Using interface ppp0
Dec 27 22:32:47 comp pppd[[3151]]: Connect: ppp0 <--> /dev/pts/4
Dec 27 22:32:47 comp pptp[[3152]]: anon log[[main:pptp.c:314]]: The synchronous pptp option is NOT activated
Dec 27 22:32:47 comp pptp[[3156]]: anon log[[ctrlp_rep:pptp_ctrl.c:251]]: Sent control packet type is 1 'Start-Control-Connection-Request'
Dec 27 22:32:47 comp pptp[[3156]]: anon log[[ctrlp_disp:pptp_ctrl.c:739]]: Received Start Control Connection Reply
Dec 27 22:32:47 comp pptp[[3156]]: anon log[[ctrlp_disp:pptp_ctrl.c:773]]: Client connection established.
Dec 27 22:32:48 comp pptp[[3156]]: anon log[[ctrlp_rep:pptp_ctrl.c:251]]: Sent control packet type is 7 'Outgoing-Call-Request'
Dec 27 22:32:48 comp pptp[[3156]]: anon log[[ctrlp_disp:pptp_ctrl.c:858]]: Received Outgoing Call Reply.
Dec 27 22:32:48 comp pptp[[3156]]: anon log[[ctrlp_disp:pptp_ctrl.c:897]]: Outgoing call established (call ID 0, peer's call ID 27136).
Dec 27 22:32:52 comp pppd[[3151]]: CHAP authentication succeeded
Dec 27 22:32:52 comp pppd[[3151]]: CHAP authentication succeeded
Dec 27 22:32:52 comp pppd[[3151]]: Cannot determine ethernet address for proxy ARP
Dec 27 22:32:52 comp pppd[[3151]]: local  IP address 172.16.1.81
Dec 27 22:32:52 comp pppd[[3151]]: remote IP address 172.16.0.1

- это лог нормально состоявшегося соединения.

Теперь проверим, появился ли в списке сетевых адаптеров VPN-адаптер. Сделать это можно командой ifconfig без параметров:

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:30:25:B1:9E:A6  
          inet addr:10.0.0.25  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21554 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15437 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7894630 (7.5 Mb)  TX bytes:1877575 (1.7 Mb)
          Interrupt:20 Memory:d0300000-d0320000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:94 errors:0 dropped:0 overruns:0 frame:0
          TX packets:94 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:10336 (10.0 Kb)  TX bytes:10336 (10.0 Kb)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:172.16.1.81  P-t-P:172.16.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1372  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:42 (42.0 b)  TX bytes:48 (48.0 b)

Обратите внимание, что помимо аппаратной сетевой карты eth0 и интерфейса обратной связи, появился адаптер ppp0 - это и есть адаптер VPN-соединения. Проверить прохождение пакетов именно в VPN-канале можно командой ping:

# ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=28.4 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=13.4 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=5.28 ms
64 bytes from 172.16.0.1: icmp_seq=4 ttl=64 time=23.9 ms
64 bytes from 172.16.0.1: icmp_seq=5 ttl=64 time=29.1 ms
^C
--- 172.16.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 5.288/20.066/29.151/9.269 ms
^C

Здесь, адрес 172.16.0.1 - это адрес удалённого конца VPN-соединения. В Вашем случае, он может быть другим. Как видно пинг проходит, значит VPN-соединение работает. Отключаем соединение:

# poff provider

Здесь poff - даёт команду на завершение работы, а provider - Вы уже знаете ;-)

Когда соединение настроено и проверено, нужно сконфигурировать операционную систему так, чтобы запускать соединение не от имени учётной записи root`а, а от имени обычного пользователя. Здесь поможет статья Настройка sudo - отредактируйте файл /etc/sudoers до примерно такого вида:

root ALL=(ALL) ALL 
Host_Alias LOCALHOST = localhost, compname
username LOCALHOST = NOPASSWD: /usr/bin/poff, /usr/bin/pon

, где вместо compname - подставьте своё имя компьютера, username - имя пользователя, который будет манипулировать VPN-соединением.

Теперь можно запускать\останавливать соединение от имени пользователя, указанного вместо username:
запуск

$ sudo pon provider

останов

$ sudo poff provider

На этом настройку vpn-соединения можно считать завершённой.

Дополнительные опции

Поскольку провайдеров в мире много, у каждого могуть быть свои особенности в настройке VPN (PPTP) соединения. Ниже приведены некоторые дополнительные опции для файла конфигурации соединения.

включающая опциявыключающая опцияописание
persistnopersistпозволяет автоматически рестартовать соединение, если по каким-то причинам произошёл обрыв связи. После 10 неудачных попыток, соединение не рестартует.
maxfail N количество неудачных попыток создать соединение, после которого процесс завершается. По умолчанию N = 10. Если N = 0 - количество попыток не ограничено.
debug позволяет выводить отладочную информацию в syslog. Бывает полезно, если что-то идёт не так.
require-paprefuse-papприменить для аутентификации метод PAP.
require-chaprefuse-chapприменить для аутентификации метод CHAP.
require-mschaprefuse-mschapприменить для аутентификации метод MS-CHAP.
require-mschap-v2refuse-mschap-v2применить для аутентификации метод MS-CHAP версии 2.
require-mppenomppeприменить шифрование для трафика, передаваемого в VPN-соединении. Работает вместе с методами аутентификации MS-CHAP или MS-CHAP v2 и включает как 40-битный метод, так и 128-битный шифрования. Если включена - отключает все методы компресии (для работы этой опции, ядро должно поддерживать MPPE!).
require-mppe-40nomppe-40включить 40-битный метод шифрования MPPE.
require-mppe-128nomppe-128включить 128-битный метод шифрования MPPE.

зелёным - выделены опции по умолчанию, если не указаны в файле конфигурации.

Проблема с основным шлюзом в транспортной сети

Здесь будет описан вариант настроек, когда в транспортной сети провайдера работает основной шлюз - другими словами, когда между сервером VPN и пользовательским компьютером располагаются маршрутизаторы.

Решение и диагностика проблем

Здесь будут описаны самые распространённые проблемы с запуском VPN-соединений.

Настройка VPN-соединения в графических средах

В среде GNOME для этих целей есть Network Manager, с помощью которого можно управлять различными соединениями, в том числе и VPN. Для среды KDE есть менеджер kvpnc с аналогичной функцией. Следует отметить, что все эти менеджеры работают как графические оболочки для создания и правки конфигурационных файлов, нужных для работы VPN. Соответственно они работают в рамках своей парадигмы и если по каким-то причинам соединение будет закрыто или создано методами не этих менеджеров (например, из консоли), то возникнет конфликт между тем, что ожидает менеджер и фактическим состоянием соединения. В результате возможен незапланированный запуск нескольких соединений или сброс всех. Поэтому, самым универсальным способом управления соединениями, по мнению автора, является вышеописанная ручная правка конфигов и запуск соединений из консоли или скриптами. Если пользователь работает только в графической среде - пользуйтесь только средствами графической среды. Если пользователь умеет работать в консоли - никакие программы-менеджеры ему вообще не пригодятся для создания сетевых соединений

KVpnc

Этот менеджер универсален и поддерживает массу всякого рода настроек и типов соединений, но обратная сторона такой универсальности - сложность процесса настройки. Информация о настройках хранится в виде профилей. Пользователь может создать несколько профилей для каждого соединения и использовать нужный в своё время.

Для работы с этим менеджером, сперва его надо установить:

 # apt-get install kvpnc kvpnc-data

После установки появится ярлык для запуска в меню: "Приложения" > "Интернет" > "KVpnc". При первом запуске, программа спросит пароль root`а, после чего откроется окно программы и вопрос о настройке KWallet - вспомогательной программы для сохранения паролей (менеджер паролей). Выбираем пункт "Basic Setup" и переходим по "Next". Далее программа спросит глобальный пароль для менеджера паролей. Не ставим галочку на "Yes, I wish to use…" переходим по "Next". У автора программа аварийно закрылась в этом месте - перезапускаем её.

Появится окно программы. Теперь нужно создать профиль настроек через "Profile" > "New Profile (wizard)". Далее программа предложит выбрать тип VPN ("Select the type of your VPN"), выбираем "Microsoft PPTP". Теперь пользователям самим придётся разобраться что значат те или иные галочки и кнопочки, а затем сопоставить это с опциями в вышеописанной конфигурации, ибо у автора не хватило терпения создать даже один работающий профиль :^:_:^:

Network Manager

Говорят он стал намного стабильнее и удобнее в современных дистрибутивах Linux Mint 12 и Ubuntu 11.10 Поделитесь кто-нибудь настройкой VPN PPTP в Network Manager.

Смотрите также

Печать/экспорт