Настройка PPTP соединения в Debian GNU Linux

Если не все, то многие знают что такое VPN. А также понимают насколько это хорошо и удобно. Ну вот сие благо пришло и в мой дом 🙂 Попросил на работе чтобы дали мне возможность из дому попадать в рабочую сеть. И вуаля … имею листик с такими вот настройками:

  • Тип соединения — PPTP
  • PPTP сервер — mymegawork.kiev.ua
  • Имя пользователя — worker13
  • Пароль — some_password

Итак, что мы из этого видим? Собственно, видим все что нам нужно — тип соединения, куда подключаемся и как авторизируемся.

Дальше нам надо настроить pptp-клиент для подключения согласно вышеописанным данным. У меня это получилось без каких бы то ни было проблем. Потратил всего около 10-15 минут чтобы сообразить что к чему. Итак, настраивал в Debian Lenny GNU Linux, но статья подойдей и для Ubuntu.

1. Сначала надо убедиться что в системе установлен pptp-клиент, для Debian-like систем он называется pptp-linux:

black:~# aptitude install pptp-linux

2. Переходим в директорию /etc/ppp:

black:~# cd /etc/ppp/

3. Конфиг /etc/ppp/options.pptp оставляем таким какой он есть, у меня он вот такой:

black:/etc/ppp# cat options.pptp
###############################################################################
# $Id: options.pptp,v 1.3 2006/03/26 23:11:05 quozl Exp $
#
# Sample PPTP PPP options file /etc/ppp/options.pptp
# Options used by PPP when a connection is made by a PPTP client.
# This file can be referred to by an /etc/ppp/peers file for the tunnel.
# Changes are effective on the next connection.  See "man pppd".
#
# You are expected to change this file to suit your system.  As
# packaged, it requires PPP 2.4.2 or later from http://ppp.samba.org/
# and the kernel MPPE module available from the CVS repository also on
# http://ppp.samba.org/, which is packaged for DKMS as kernel_ppp_mppe.
###############################################################################

# Lock the port
lock

# Authentication
# We don't need the tunnel server to authenticate itself
noauth

# We won't do PAP, EAP, CHAP, or MSCHAP, but we will accept MSCHAP-V2
# (you may need to remove these refusals if the server is not using MPPE)
refuse-pap
refuse-eap
refuse-chap
refuse-mschap

# Compression
# Turn off compression protocols we know won't be used
nobsdcomp
nodeflate

# Encryption
# (There have been multiple versions of PPP with encryption support,
# choose with of the following sections you will use.  Note that MPPE
# requires the use of MSCHAP-V2 during authentication)

# http://ppp.samba.org/ the PPP project version of PPP by Paul Mackarras
# ppp-2.4.2 or later with MPPE only, kernel module ppp_mppe.o
# {{{
# Require MPPE 128-bit encryption
#require-mppe-128
# }}}

# http://polbox.com/h/hs001/ fork from PPP project by Jan Dubiec
# ppp-2.4.2 or later with MPPE and MPPC, kernel module ppp_mppe_mppc.o
# {{{
# Require MPPE 128-bit encryption
#mppe required,stateless
# }}}
black:/etc/ppp#

4. Любым консольным редактором (nano, vi, vim …) правим файлик /etc/ppp/chap-secrets до такого состояния:

black:/etc/ppp# cat chap-secrets
# Secrets for authentication using CHAP
# client    server    secret            IP addresses
### <my work vpn> ###
worker13   mymegawork.kiev.ua    some_password    *
black:/etc/ppp#

5. Опять же, любым консольным текстовым редактором создаем файлик /etc/ppp/peers/work. Название файлика можно выбрать произвольно, оно будет использоваться только как название при поднятии pptp соединения. Содержимое файла такое:

black:/etc/ppp# cat peers/work
# written by black_13
pty "pptp mymegawork.kiev.ua --nolaunchpppd"
file "/etc/ppp/options.pptp"
name worker13
remotename mymegawork.kiev.ua
ipparam work
require-mppe-128
persist
black:/etc/ppp#

6. После этого пробуем приконектиться вот такой вот командочкой:

black:/etc/ppp# pon work

7. Секунд через 7 после ввода этой командочки у меня появился новый интерфейс ppp0 вот такого вида:

black:/etc/ppp# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol
inet addr:192.168.100.204  P-t-P:192.168.100.200  Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1296  Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:78 (78.0 B)  TX bytes:72 (72.0 B)

black:/etc/ppp#

8. На сервак попали, но надо бы еще прописать маршрут для всей рабочей сети. Тут есть 2 пути: либо после каждого конекта писать в рутовой консоли руцями, либо настроить чтобы маршрут в рабочую сетку прописывался автоматически при поднятии соединения work. Я решил автоматизировать сей процесс. Делается это очень просто, тут нам помогает параметр

ipparam work

Создаем файлик /etc/ppp/ip-up.d/work с таким содержимым:

black:/etc/ppp# cat ip-up.d/work
#!/bin/sh
if [ "${PPP_IPPARAM}" = "work" ]; then
   /sbin/route add -net 192.168.100.0/24 dev ${IFNAME}
fi

И делаем его исполняемым:

black:/etc/ppp# chmod +x ip-up.d/work

9. Переподключаемся и проверяем маршрут в рабочую сеть:

black:/etc/ppp# poff work
black:/etc/ppp# pon work
black:/etc/ppp# route -n |grep 192
192.168.100.200 0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 ppp0
black:/etc/ppp#

Маршрут прописан! Проверяем доступность какогото хоста в рабочей сети. Для этого сгодится обычная пинга:

black:/etc/ppp# ping 192.168.100.102
PING 192.168.100.102 (192.168.100.102) 56(84) bytes of data.
64 bytes from 192.168.100.102: icmp_seq=1 ttl=127 time=1198 ms
64 bytes from 192.168.100.102: icmp_seq=2 ttl=127 time=184 ms
64 bytes from 192.168.100.102: icmp_seq=3 ttl=127 time=955 ms
64 bytes from 192.168.100.102: icmp_seq=4 ttl=127 time=6.12 ms
^C
--- 192.168.100.102 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3018ms
rtt min/avg/max/mdev = 6.128/586.264/1198.951/502.562 ms, pipe 2
black:/etc/ppp#

Ну вот! Краста! Все работает как надо.

10. Проблемы в процессе настройки и поиски информации о них:

Все нужно настраивать очень внимательно! Малейшая ошибочка — и ничего не заработает!
В случае если чтото работает нетак как вы ожидали от настроек запускайте из рутовой консоли такой командой вместо pon work

black:/etc/ppp# pon work debug dump logfd 2 nodetach

Лог pptp сесии пишется в /var/log/syslog и в /var/log/messages — очень полезно сюда посматривать в случае если чтото неработает как надо. У меня все работает, syslog выглядит вот так:

Jul 13 11:52:00 black pppd[12647]: pppd 2.4.4 started by root, uid 0
Jul 13 11:52:00 black pptp[12648]: anon log[main:pptp.c:314]: The synchronous pptp option is NOT activated
Jul 13 11:52:00 black pppd[12647]: Using interface ppp0
Jul 13 11:52:00 black pppd[12647]: Connect: ppp0 <--> /dev/pts/7
Jul 13 11:52:00 black pptp[12655]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 1 'Start-Control-Connection-Request'
Jul 13 11:52:00 black pptp[12655]: anon log[ctrlp_disp:pptp_ctrl.c:739]: Received Start Control Connection Reply
Jul 13 11:52:00 black pptp[12655]: anon log[ctrlp_disp:pptp_ctrl.c:773]: Client connection established.
Jul 13 11:52:01 black pptp[12655]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request'
Jul 13 11:52:01 black pptp[12655]: anon log[ctrlp_disp:pptp_ctrl.c:858]: Received Outgoing Call Reply.
Jul 13 11:52:01 black pptp[12655]: anon log[ctrlp_disp:pptp_ctrl.c:897]: Outgoing call established (call ID 0, peer's call ID 14720).
Jul 13 11:52:07 black pppd[12647]: CHAP authentication succeeded
Jul 13 11:52:07 black pppd[12647]: MPPE 128-bit stateless compression enabled
Jul 13 11:52:10 black pppd[12647]: Cannot determine ethernet address for proxy ARP
Jul 13 11:52:10 black pppd[12647]: local  IP address 192.168.100.204
Jul 13 11:52:10 black pppd[12647]: remote IP address 192.168.100.200
Jul 13 11:53:01 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 11:53:02 black pptp[12648]: anon log[decaps_gre:pptp_gre.c:414]: buffering packet 14 (expecting 13, lost or reordered)
Jul 13 11:53:02 black pptp[12648]: anon log[decaps_gre:pptp_gre.c:414]: buffering packet 15 (expecting 13, lost or reordered)
Jul 13 11:54:01 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 11:55:01 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 11:56:01 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 11:57:01 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 11:58:01 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 11:59:02 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 12:00:02 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 12:01:02 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 12:02:02 black pptp[12655]: anon log[logecho:pptp_ctrl.c:677]: Echo Reply received.
Jul 13 12:02:02 black pptp[12655]: anon log[logecho:pptp_ctrl.c:679]: no more Echo Reply/Request packets will be reported.

Фух … ну вроде все написал. Соединяйтесь наздоровье! 😀

    • VasilR
    • Октябрь 29th, 2010 6:08пп

    Проще настроить через vpnpptp: http://code.google.com/p/vpnpptp/
    Пакет vpnpptp работает и в Debian, и в Ubuntu и много где еще.

  1. Трэкбэков пока нет.

Why ask?