Настройка 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 ваш_пароль
Наконец выполняем команду:
И всё работает. В системе должен появиться новый ppp-интерфейс. Проверить это можно командой:
Если же соединения не происходит, то можно попытаться выполнить команду:
pon vpn0 debug dump logfd 2 nodetach
И посмотреть какие ошибки будут выданы на экран.
Если нужно чтобы соединение выполнялось автоматически при загрузке компьютера, то нужно добавить в файл /etc/network/interfaces строки:
auto tunnel iface tunnel inet ppp provider vpn0
Таким способом автор успешно подключается к описанному ранее PPTP-серверу.
Комментарии:
Небольшое дополнение: чтобы вальнуть весь трафик через vpn нужно добавить в /etc/ppp/peers/vpn0 строчку:
Единственным недостатком такого подключения является то, что, если по каким либо причинам соединение разорвалось, то интерфейс падает и не переподключается. Мне нужно было создать впн подключение, что бы оно было на фиксированном интерфейсе(для создания правил в iptables), при разрыве переподключалось и не пересоздавала интерфейс(что бы можно было удобно всё это дело мониторить по snmp)
В общем нашел такое решение в роутере ASUS wl500gP, и сплагатил их конфиг себе
Ну собственно создаём файл /etc/ppp/peers/vpn0 с таким содержимым:
noauth refuse-eap
user »
password »
connect true
sync pty ‘pptp —idle-wait 0 —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 (#)
Уважаемый MooSE, не могли бы Вы дополнить статью нюансами подключения к офисному pptp-серверу (построеному по http://www.ylsoftware.com/news/538) через домашний роутер (типа TRENDnet TEW-432BRP). Несколько часов блуждания по форумам успеха не принесли. Напрямую, без роутера, всё работает.
Уважаемый 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. Так что нафиг такое счастье.
При подключении из 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]: Tunnel Device: ppp0 Nov 5 01:33:49 F80L NetworkManager[942]: (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 ] rcvd [LCP ConfReq ] sent [LCP ConfAck ] rcvd [LCP ConfAck ] sent [LCP EchoReq magic=0x3c445e8b] rcvd [LCP EchoReq magic=0x9b238fcb] sent [LCP EchoRep magic=0x3c445e8b] rcvd [CHAP Challenge , name = "pptpd"] sent [CHAP Response , name = "user-23"] rcvd [LCP EchoRep magic=0x9b238fcb] rcvd [CHAP Success "S=C1AE2A867B4A2ACE33074F16B6DFFF0DC42BD6DD M=Access granted"] CHAP authentication succeeded sent [IPCP ConfReq ] rcvd [CCP ConfReq ] sent [CCP ConfReq [CCP ConfRej ] rcvd [IPCP TermAck [LCP TermReq "MPPE required but peer refused"] LCP terminated by peer (MPPE required but peer refused) sent [LCP TermAck [CCP ConfAck non-LCP packet when LCP not open Script pptp pptp_сервер --nolaunchpppd finished (pid 3528), status = 0x0 Modem hangup Connection terminated.
И сервер, и клиент настраивались по материалам вашего сайта. Помогите, пожалуйста, разобраться.
How to configure a Linux PPTP VPN client
Configuring a VPN client connection is a simple matter of point and click in Windows OSes, but in Linux it is involves installing a package, configuring passwords, VPN server settings and finally routing the traffic destined for the VPN network via the VPN connection. The package named pptp is used on the client side for configuring a connection. To setup a VPN server read How to setup a VPN Server in Windows Server 2008. This tutorial is for both Debian Linux variants and Red Hat Linux variants.
Fedora/Red Hat/CentOS PPTP Client Installation
Debian/Ubuntu PPTP Client Installation
Configuring VPN credentials and server settings
Edit the following file and enter your VPN username and password
The syntax of the file is as follows
DOMAIN\\username PPTP vpnpassword *
For example to configure a user named jesin on example.com with pass1 as the password enter
If your VPN network doesn’t come under a domain replace DOMAIN with your VPNSERVER name.
Next is to configure the VPN server settings. Create and edit a new file under the peers directory
Add content according to the syntax below
pty «pptp vpn-server-hostname-or-ip-address —nolaunchpppd»
name DOMAIN\\username
remotename PPTP
require-mppe-128
file /etc/ppp/options.pptp
ipparam vpnconnection1
Here “DOMAIN\\username” is the same as the one entered in the chap-secrets file. The ipparam should contain the name of the newly created file, in this case it is “vpnconnection1”
Adding a route to the routing table
All traffic for the VPN network should pass through the VPN interface so an entry has to be added to the routing table. To automatically add an entry whenever a VPN connection is established create and edit the following file
Add the following content
#!/bin/bash
route add -net 10.0.0.0/8 dev ppp0
chmod +x /etc/ppp/ip-up.d/vpn1-route
Testing the connection
To connect using the newly created VPN connection use the following command
Take a peek into the messages log file using the following command
you should see something similar to this
Nov 27 13:46:20 server1 kernel: [ 800.071028] PPP generic driver version 2.4.2
Nov 27 13:46:20 server1 pppd[1083]: pppd 2.4.5 started by root, uid 0
Nov 27 13:46:20 server1 pppd[1083]: Using interface ppp0
Nov 27 13:46:20 server1 pppd[1083]: Connect: ppp0 /dev/pts/0
Nov 27 13:46:25 server1 pppd[1083]: CHAP authentication succeeded
Nov 27 13:46:25 server1 kernel: [ 804.683790] padlock: VIA PadLock Hash Engine not detected.
Nov 27 13:46:25 server1 kernel: [ 804.687408] PPP MPPE Compression module registered
Nov 27 13:46:25 server1 pppd[1083]: MPPE 128-bit stateless compression enabled
Nov 27 13:46:26 server1 pppd[1083]: local IP address 10.0.0.11
Nov 27 13:46:26 server1 pppd[1083]: remote IP address 10.0.0.12
Try pinging a system in the VPN network and you should get proper replies.
Disconnecting the connection
To disconnect the PPTP VPN connection use the killall command