Настройка PPTP-клиента в Linux

()

Недавно автору этих строк понадобилось настроить PPTP-соединение в Linux. После чтения документации оказалось что всё очень просто.

Приводимые здесь инструкции применимы в первую очередь для Debian/Ubuntu, однако, скорее всего без больших изменений ими можно воспользоваться и на других дистрибутивах.

Во-первых нужно установить несколько пакетов:

apt-get install pptp-linux ppp

Во-вторых создаём файл /etc/ppp/peers/vpn0 следующего содержания:

pty "pptp адрес_pptp_сервера --nolaunchpppd"
name ваш_логин
file /etc/ppp/options.pptp
remotename PPTP
ipparam vpn0

Далее открываем в редакторе файл /etc/ppp/chap-secrets и добавляем строку:

ваш_логин   PPTP    ваш_пароль

Наконец выполняем команду:

pon vpn0

И всё работает. В системе должен появиться новый ppp-интерфейс. Проверить это можно командой:

ifconfig

Если же соединения не происходит, то можно попытаться выполнить команду:

pon vpn0 debug dump logfd 2 nodetach

И посмотреть какие ошибки будут выданы на экран.

Если нужно чтобы соединение выполнялось автоматически при загрузке компьютера, то нужно добавить в файл /etc/network/interfaces строки:

auto tunnel
iface tunnel inet ppp
provider vpn0

Таким способом автор успешно подключается к описанному ранее PPTP-серверу.

Приятной работы!

Ключевые слова: pptp-client, pptp, linux, pon, vpn.

Комментарии:

MooSE 2008-03-23 10:02:15 (#)

Небольшое дополнение: чтобы вальнуть весь трафик через vpn нужно добавить в /etc/ppp/peers/vpn0 строчку:

defaultroute

Oper.kh 2008-12-01 08:57:10 (#)

Единственным недостатком такого подключения является то, что, если по каким либо причинам соединение разорвалось, то интерфейс падает и не переподключается. Мне нужно было создать впн подключение, что бы оно было на фиксированном интерфейсе(для создания правил в iptables), при разрыве переподключалось и не пересоздавала интерфейс(что бы можно было удобно всё это дело мониторить по snmp)

В общем нашел такое решение в роутере ASUS wl500gP, и сплагатил их конфиг себе

Ну собственно создаём файл /etc/ppp/peers/vpn0 с таким содержимым:

noauth refuse-eap
user '<Логин>'
password '<Пароль>'
connect true
sync pty 'pptp --idle-wait 0 <IP_адрес_pptp_сервера> --nolaunchpppd --nobuffer --sync'
lock
idle 1800 demand
maxfail 0
#Отвечает за переподключение при падении соединения
persist
ktune
default-asyncmap nopcomp noaccomp
novj nobsdcomp nodeflate
lcp-echo-interval 10
lcp-echo-failure 6
defaultroute
#Создадим подключение на интерфейсе ppp999
unit 999

Anonymous 2011-06-24 11:22:53 (#)

Oper.kh Спасибо большое! совет помог!

oermolaev 2011-11-23 02:48:35 (#)

Уважаемый MooSE, не могли бы Вы дополнить статью нюансами подключения к офисному pptp-серверу (построеному по http://www.ylsoftware.com/news/538) через домашний роутер (типа TRENDnet TEW-432BRP). Несколько часов блуждания по форумам успеха не принесли. Напрямую, без роутера, всё работает.

MooSE 2011-11-24 01:06:42 (#)

Цитата:

Уважаемый MooSE, не могли бы Вы дополнить статью нюансами подключения к офисному pptp-серверу (построеному по http://www.ylsoftware.com/news/538) через домашний роутер (типа TRENDnet TEW-432BRP). Несколько часов блуждания по форумам успеха не принесли. Напрямую, без роутера, всё работает.


Не могу:) Да и не хочу:) Потому что я знаю в чём проблема и решать еёё дело не благодарное. Сабжевый роутер скорее всего использует классический NAT, описанный ещё в RFC 1631. Этот NAT не содержит хаков для поддержки PPTP, который defective by design.

Моё ИМХО: или ставить роутер с соответствующими хаками, или не использовать сей арахичный протокол, ибо существуют куда как более вменяемые альтернативы.

Основная проблема PPTP в том что он использует GRE, который не работает через NAT. Есть роутеры, которые палят пакеты, идущие на tcp/1723 и вытаскивают из них информацию о туннеле после чего его корректно натят. Но это нарушение RFC 1631. Так что нафиг такое счастье.

oermolaev 2011-11-24 11:12:21 (#)

Спасибо, меня полностью удовлетворил Ваш ответ :)

oermolaev 2012-01-02 11:36:23 (#)

oermolaev 2012-11-05 01:54:53 (#)

Здравствуйте, MooSE!

При подключении из Network Manager соединение происходит успешно:
Nov  5 01:33:46 F80L pppd[3407]: Plugin /usr/lib/pppd/2.4.5/nm-pptp-pppd-plugin.so loaded.
Nov  5 01:33:46 F80L pppd[3407]: pppd 2.4.5 started by root, uid 0
Nov  5 01:33:46 F80L pppd[3407]: Using interface ppp0
Nov  5 01:33:46 F80L pppd[3407]: Connect: ppp0 <--> /dev/pts/6
Nov  5 01:33:46 F80L pptp[3410]: nm-pptp-service-3405 log[main:pptp.c:314]: The synchronous pptp option is NOT activated
Nov  5 01:33:46 F80L NetworkManager[942]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/virtual/net/ppp0, iface: ppp0)
Nov  5 01:33:46 F80L NetworkManager[942]:    SCPlugin-Ifupdown: device added (path: /sys/devices/virtual/net/ppp0, iface: ppp0): no ifupdown configuration found.
Nov  5 01:33:46 F80L pptp[3425]: nm-pptp-service-3405 log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 1 'Start-Control-Connection-Request'
Nov  5 01:33:46 F80L pptp[3425]: nm-pptp-service-3405 log[ctrlp_disp:pptp_ctrl.c:739]: Received Start Control Connection Reply
Nov  5 01:33:46 F80L pptp[3425]: nm-pptp-service-3405 log[ctrlp_disp:pptp_ctrl.c:773]: Client connection established.
Nov  5 01:33:47 F80L pptp[3425]: nm-pptp-service-3405 log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request'
Nov  5 01:33:48 F80L pptp[3425]: nm-pptp-service-3405 log[ctrlp_disp:pptp_ctrl.c:858]: Received Outgoing Call Reply.
Nov  5 01:33:48 F80L pptp[3425]: nm-pptp-service-3405 log[ctrlp_disp:pptp_ctrl.c:897]: Outgoing call established (call ID 0, peer's call ID 2432).
Nov  5 01:33:48 F80L pppd[3407]: CHAP authentication succeeded
Nov  5 01:33:48 F80L pppd[3407]: MPPE 128-bit stateless compression enabled
Nov  5 01:33:48 F80L pppd[3407]: local  IP address 10.0.1.203
Nov  5 01:33:48 F80L pppd[3407]: remote IP address 10.0.1.1
Nov  5 01:33:48 F80L NetworkManager[942]: <info> Tunnel Device: ppp0
Nov  5 01:33:49 F80L NetworkManager[942]: <info> (ppp0): writing resolv.conf to /sbin/resolvconf


При подключении с этой же машины указанным здесь способом - неудача:
# pon vpn1 debug dump logfd 2 nodetach
pppd options in effect:
debug		# (from command line)
nodetach		# (from command line)
logfd 2		# (from command line)
dump		# (from command line)
noauth		# (from /etc/ppp/options.pptp)
refuse-pap		# (from /etc/ppp/options.pptp)
refuse-chap		# (from /etc/ppp/options.pptp)
refuse-mschap		# (from /etc/ppp/options.pptp)
refuse-eap		# (from /etc/ppp/options.pptp)
name user-23		# (from /etc/ppp/peers/vpn1)
remotename PPTP		# (from /etc/ppp/peers/vpn1)
		# (from /etc/ppp/options.pptp)
pty pptp pptp_сервер --nolaunchpppd		# (from /etc/ppp/peers/vpn1)
crtscts		# (from /etc/ppp/options)
		# (from /etc/ppp/options)
asyncmap 0		# (from /etc/ppp/options)
lcp-echo-failure 4		# (from /etc/ppp/options)
lcp-echo-interval 30		# (from /etc/ppp/options)
hide-password		# (from /etc/ppp/options)
ipparam vpn1		# (from /etc/ppp/peers/vpn1)
nobsdcomp		# (from /etc/ppp/options.pptp)
nodeflate		# (from /etc/ppp/options.pptp)
noipx		# (from /etc/ppp/options)
using channel 19
Using interface ppp0
Connect: ppp0 <--> /dev/pts/6
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x3c445e8b> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0x9b238fcb> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0x9b238fcb> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c445e8b> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0x3c445e8b]
rcvd [LCP EchoReq id=0x0 magic=0x9b238fcb]
sent [LCP EchoRep id=0x0 magic=0x3c445e8b]
rcvd [CHAP Challenge id=0xe3 <0a2aaea3c4357fb5d114b2733a3b9e1e>, name = "pptpd"]
sent [CHAP Response id=0xe3 <10f00856bb1904c61587cd6bd3e26f780000000000000000f3460b5cf6a5b807cbaa126ea5b157c00b1f847ac1eb7d6c00>, name = "user-23"]
rcvd [LCP EchoRep id=0x0 magic=0x9b238fcb]
rcvd [CHAP Success id=0xe3 "S=C1AE2A867B4A2ACE33074F16B6DFFF0DC42BD6DD M=Access granted"]
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
rcvd [CCP ConfReq id=0x1 <mppe +H -M +S -L -D -C>]
sent [CCP ConfReq id=0x1]
sent [CCP ConfRej id=0x1 <mppe +H -M +S -L -D -C>]
rcvd [IPCP TermAck id=0x1]
rcvd [LCP TermReq id=0x2 "MPPE required but peer refused"]
LCP terminated by peer (MPPE required but peer refused)
sent [LCP TermAck id=0x2]
rcvd [CCP ConfAck id=0x1]
Discarded non-LCP packet when LCP not open
Script pptp pptp_сервер --nolaunchpppd finished (pid 3528), status = 0x0
Modem hangup
Connection terminated.


И сервер, и клиент настраивались по материалам вашего сайта. Помогите, пожалуйста, разобраться.

MooSE 2012-11-07 14:55:19 (#)

Цитата:


rcvd [LCP TermReq id=0x2 "MPPE required but peer refused"]
LCP terminated by peer (MPPE required but peer refused)


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

oermolaev 2012-11-08 00:55:32 (#)

Не знаю как отключают MPPE. Тем более что при подключении из Network Manager видим что
Цитата:

Nov 5 01:33:48 F80L pppd[3407]: MPPE 128-bit stateless compression enabled

В файле /etc/ppp/options.pptp снял комментарий со строки
require-mppe-128
после чего соединение стало устанавливаться:
Цитата:

CHAP authentication succeeded
sent [CCP ConfReq id=0x1 <mppe +H -M +S -L -D -C>]
rcvd [CCP ConfReq id=0x1 <mppe +H -M +S -L -D -C>]
sent [CCP ConfAck id=0x1 <mppe +H -M +S -L -D -C>]
rcvd [CCP ConfAck id=0x1 <mppe +H -M +S -L -D -C>]
MPPE 128-bit stateless compression enabled
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 10.0.1.1>]
sent [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 10.0.1.1>]
rcvd [IPCP ConfNak id=0x1 <addr 10.0.1.201>]
sent [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 10.0.1.201>]
rcvd [IPCP ConfAck id=0x2 <compress VJ 0f 01> <addr 10.0.1.201>]
local IP address 10.0.1.201
remote IP address 10.0.1.1
Script /etc/ppp/ip-up started (pid 14264)
Script /etc/ppp/ip-up finished (pid 14264), status = 0x0

Это правильное решение?

MooSE 2012-11-08 22:05:17 (#)

Цитата:


Это правильное решение?


похоже на правду. а так-то работает?

oermolaev 2012-11-09 14:38:33 (#)

да, так работает, проверил на двух разных серверах (ubuntu-server 10.04).
спасибо!
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE