Настраиваем 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 | добавляем новый маршрут по умолчанию через недавно созданный интерфейс. |
Несколько полезных ссылок:
- http://pptpclient.sourceforge.net/documentation.phtml - официальная документация pptpclient
- http://www.opennet.ru/man.shtml?topic=pppd&category=8 - переведённый man