Настраиваем VPN PPTP соединение из командной строки

Когда-то я писал пост про "правильную настройку VPN соединения по так называемому Gentoo way". Несмотря на то, что на пост было множество несогласных с моим мнением отзывов(кстати, набравшись опыта я сейчас понимаю что сделал бы тоже несколько по другому. Каюсь, грешен), эта тема как оказалось очень актуальна и востребована. Мне до сих пор приходят на email различные вопросы связанные с настройкой VPN соединения на сервере - т.е. без графической оболочки и утилит. В этом посте я постараюсь как можно более подробно описать данный процесс.

Итак приступим.
Для начала требуется установить нужный пакет. В deb based дистрибутивах он называется pptp-linux:

sudo aptitude install pptp-linux

В других дистрибутивах пакет может называться по другому, однако в названии вероятнее всего есть "pptp". Так что, можно поискать по названию, почитать описание и установить.

Следующее что нам нужно сделать, это отредактировать параметры для подключения. Откроем файл /etc/ppp/options.pptp:

sudo vim /etc/ppp/options.pptp

И приведём примерно к такому виду:

lock
noauth
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
require-mppe-128
nobsdcomp
nodeflate
persist

По порядку что и для чего:

ПараметрНазначение
lockсоздаём файл блокировки
authтребовать от сервера подтвердить свою подлинность перед началом обмена пакетами
refuse-papотключаем аутентификацию по протоколу pap
refuse-eapотключаем аутентификацию по протоколу eap
refuse-chapоотключаем аутентификацию по протоколу chap
refuse-mschapотключаем аутентификацию по протоколу mschap
require-mppe-128требовать использование mppe с 128-битным шифрованием
nobsdcompотключаем сжатие BSD-Compress
nodeflateотключаем deflate сжатие
persistпытаемся снова подключиться при разрыве

Теперь создадим файл с параметрами подключения:

sudo vim /etc/ppp/peers/vpn

И добавим туда следующее:

lcp-echo-interval 60
lcp-echo-failure 4
maxfail 0
defaultroute
pty "pptp 192.168.0.4 --nolaunchpppd"
name login
remotename PPTP
linkname vpn
file /etc/ppp/options.pptp

Что и для чего:

ПараметрНазначение
lcp-echo-intervalинтервал с которым опрашиваем удалённый сервер
lcp-echo-failureколичество не отвеченных запросов от сервера, по прошествии которых считаем что мы отключены
maxfail 0всегда пытаться подключиться если отсутствует связь
defaultrouteпосле подключения, добавляет маршрут по умолчанию через созданный туннель.
ptyсоздаём канал для связи с сервером. (подробнее man pptp)
nameлогин
remotenameустанавливаем "имя предполагаемой" удалённой системы для аутентификации
linknameустанавливает логическое имя канала. В данном случае нам нужно для удобного "роутинга"
fileуказываем где находится файл с параметрами подключения

Откроем /etc/ppp/chap-secrets:

sudo vim /etc/ppp/chap-secrets

И добавим логин\пароль подключения:

login PPTP password *

Вместо login надо подставить логин и вместо password пароль соответственно.

Для подключения используется команда pon.

pon имя_подключения

Например в нашем случае:

pon vpn

Для отключения poff:

poff vpn

Чтобы посмотреть состояние подключения plog:

plog vpn

У большинства провайдеров в локальной сети так же находятся внутренние ресурсы и многие наверняка захотят иметь к ним доступ при включенном VPN соединении. Для этого надо прописать маршруты. Т.е. грубо говоря, нам нужно задать правила для определённого диапазона адресов, чтобы трафик шёл не через наш внешний канал, а через внутреннюю сеть. Для этого нужно узнать шлюз который используется в локальной сети. Выполним следующую небольшую команду:

sudo ip r l | grep default

Важно: выполнять нужно обязательно нужно при отключенном VPN соединении. В противном случае мы получим шлюз PPTP туннеля.
Будет что-то вроде:

default via 10.7.131.11 dev eth0  proto static

10.7.131.11 и будет шлюз. Теперь создадим файл /etc/ppp/ip-up.d/vpn

sudo vim /etc/ppp/ip-up.d/vpn

И добавим в него небольшой скрипт:

1
2
3
4
5
6
7
8
#!/bin/sh
#
if [ ! $LINKNAME = "vpn" ]
then
     exit 0
fi
route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.7.131.11
route add -net 172.16.0.0 netmask 255.240.0.0 gw 10.7.131.11

Дадим права на исполнение:

sudo chmod +x /etc/ppp/ip-up.d/vpn

Так же при отключении было бы не плохо их удалять. Если не удалять их, конечно, ничего страшного произойти не должно, однако никогда не знаешь что потребуется сделать потом, и про них можно случайно забыть. Вот дабы такого не происходило, желательно их удалять.
Создадим файл /etc/ppp/ip-down.d/vpn

sudo vim /etc/ppp/ip-down.d/vpn

И туда тоже добавим небольшой скрипт:

1
2
3
4
5
6
7
8
#!/bin/sh
#
if [ ! $LINKNAME = "vpn" ]
then
     exit 0
fi
route del -net 10.0.0.0 netmask 255.0.0.0 gw 10.7.131.11
route del -net 172.16.0.0 netmask 255.240.0.0 gw 10.7.131.11

Так же дадим права на исполнение:

sudo chmod +x /etc/ppp/ip-down.d/vpn

Теперь остался последний штрих: подключать VPN соединение при загрузке ПК. Для этого откроем /etc/network/interfaces:

sudo vim /etc/network/interfaces

И добавим в конец что-нибудь вроде:

auto ppp0
iface ppp0 inet ppp
    provider vpn
    pre-up ip link set eth0 up
    up route del default
    up route add default dev ppp0

ПараметрНазначение
providerимя vpn подключения. То, которое находится в /etc/ppp/peers/
pre-up link set eth0 upпроверяем что локальная сеть - eth0, подключена прежде чем подключать VPN.
up route del defaultудаляем маршрут по умолчанию через eth0
up route add default dev ppp0добавляем новый маршрут по умолчанию через недавно созданный интерфейс.

Несколько полезных ссылок:

  1. http://pptpclient.sourceforge.net/documentation.phtml - официальная документация pptpclient
  2. http://www.opennet.ru/man.shtml?topic=pppd&category=8 - переведённый man


Понравилась статья? Поделись с друзьями!




Комментарии на этом сайте требуют включенного Javascript в вашем браузере. Вероятно, ваш браузер не поддерживает Javascript, или он был отключен по каким-то причинам. Если вы хотите прокомментировать пост, или просто почитать комментарии, то пожалуйста, включите Javascript или попробуйте открыть эту страницу другим браузером.