Настройка VPN (PPTP) соединения в Debian Squeeze

Материал из Nix.zeya.org

Перейти к: навигация, поиск

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

Дано:

  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 Пример файла:

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 пауза между попытками (требуется для завершения всех процессов на стороне провайдера, если разрыв произошёл аварийно

Прим.

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

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

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

 
[root@comp ~]#  cd /etc/ppp/peers/
[root@comp peers]#  ls -l
total 1
-rw-rw-rw- 1 user user 221 Sep 19 11:08 provider
 

Изменяем владельца файла provider, а затем меняем права доступа:

 
[root@comp peers]#  chown root:root provider
[root@comp peers]#  chmod 600 provider
 

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

 
[root@comp peers]#  ls -l
-rw------- 1 root root 221 Sep 19 11:08 provider
 

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

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

[root@comp ~]#  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 без параметров:

[root@comp ~]#  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:

[root@comp ~]#  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
[root@comp ~]#
 

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

[root@comp ~]#  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) соединения. Ниже приведены некоторые дополнительные опции для файла конфигурации соединения.

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

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