Настраиваем 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 или попробуйте открыть эту страницу другим браузером.