Настройка VPN (PPTP) соединения в Debian Squeeze
Материал из Nix.zeya.org
Статья написана по мотивам Настройка VPN (PPTP) соединения в ArchLinux и переработана для Debian. Процесс аналогичен для релизов Etch, Lenny и Squeeze
Дано:
- компьютер с установленной системой Debian;
- провайдер Интернет-услуг, предоставляющий доступ по VPN (PPTP) с выдачей реального ip-адреса пользователю;
- провайдер автоматически назначает ip-адрес компьютерам пользователей в транспортной сети;
- в транспортной сети не используется основной шлюз.
Задача: настроить 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 | пауза между попытками (требуется для завершения всех процессов на стороне провайдера, если разрыв произошёл аварийно |
Прим.
- Опция defaultroute требует дополнительных комментариев. Если провайдер предоставляет услуги доступа в сеть Интернет через NAT И при этом не устанавливает в транспортной сети основной шлюз (для сетевого адаптера компьютера), то опцию следует выставить. Если в транспортной сети основной шлюз указывается, то опция defaultroute не сработает и основной шлюз в VPN-сети не установится.
- Опция 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.