Просто о сложном. VPN для начинающих

Материал из Wiki.UnixForum.org

Перейти к: навигация, поиск

Содержание

[править] Просто о сложном. VPN для начинающих.

[править] Введение!

Казалось бы — про VPN не говори, про него все сказано. В сети выложено огромное количество настроек и HOW-TO на любой вкус. Однако, поток одинаковых вопросов, которые задают на форуме http://www.unixforum.org начинающие линуксоиды, не иссякает. Скрупулезный анализ показал, что основные проблемы новичков возникают на этапах аутентификации клиента и VPN-сервера, а также настройки роутинга. На них мы остановимся подробно. Попутно выяснилось что настройки VPN-соединения можно сильно упростить и тем самым облегчить понимание ключевых параметров.

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

Настраивать VPN-соединение мы будем по шагам. В конце каждого шага - шаг проверки. Все команды в командной строке вводятся от имени суперпользователя (root). Готовы? Тогда вперед!

[править] Что нам нужно для работы

Для поднятия и настройки VPN-соединения нам потребуются всего две программы - ppp и pptp. Программа ppp с вероятностью 99% уже стоит в вашем дистрибутиве, пакет, содержащий pptp, в разных дистрибутивах называется по-разному, в основном pptp-linux. После установки в системе должны присутствовать два исполняемых файла - /usr/sbin/pppd и /usr/sbin/pptp. Вкратце - pptp создает туннель к VPN-серверу, через который ppp соединяется и работает как обычное модемное соединение.

Естественно, для поднятия соединения нам необходима рабочая локальная сеть и данные провайдера об IP (или имени) VPN-сервера, VPN-логине и VPN-пароле. Также пригодится информация об используемом протоколе аутентификации и о наличии шифрования траффика. Если ее нет - ничего страшного. Подавляющее большинство провайдеров используют протокол аутентификации MS-CHAP v2, а о наличии шифрования нам подскажут логи ошибок pppd.

Подсказка: Если у вас стоит MS Windows и там поднято VPN-соединение, его параметры можно посмотреть на вкладке соединения "Сведения". Нас интересуют параметры "Проверка подлинности" и "Шифрование".

Все манипуляции мы будем проводить на имеющейся под рукой домашней сети Корбина телеком. Итак, провайдер снабдил нас следующей информацией:

Локальная сеть:
                        IP: 10.167.17.38 
                        Маска подсети: 255.255.0.0. 
                        Шлюз (gateway): 10.167.0.17 
                        DNS1: 195.14.50.1 
                        DNS2: 195.14.50.21 
VPN параметры:
                        Имя VPN-сервера: vpn.corbina.net 
                        Логин: VPN_LOGIN 
                        Пароль: VPN_PASSWORD

[править] Проверка работоспособности локальной сети

Если сеть уже настроена, мы должны увидеть примерно следующее

Консоль: [root@myhost sergo]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:13:D4:68:B2:3E  
          inet addr:10.167.17.38  Bcast:10.167.255.255  Mask:255.255.0.0
          inet6 addr: fe80::213:d4ff:fe68:b23e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2884 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:243742 (238.0 Kb)  TX bytes:2242 (2.1 Kb)
          Interrupt:19

или

Консоль: [root@myhost sergo]# ip a sh dev eth0
3: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:D4:68:B2:3E brd ff:ff:ff:ff:ff:ff
    inet 10.167.17.38/16 brd 10.167.255.255 scope global eth0


Консоль: [root@myhost sergo]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.167.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         10.167.0.17     0.0.0.0         UG    0      0        0 eth0

или

Консоль: [root@myhost sergo]# ip r
10.167.0.0/16 dev eth0  proto kernel  scope link  src 10.167.17.38
default via 10.167.0.17 dev eth0 scope link

Если ничего подобного не выводится,поднимаем сеть и указываем в качестве шлюза по умолчанию наш шлюз:
ifconfig eth0 10.167.17.38 netmask 255.255.0.0 up
route add default gw 10.167.0.17
или
ip a a 10.167.17.18/16 dev eth0
ip l s up dev eth0
ip r a default via 10.167.0.17
Прописываем IP DNS-серверов в файл /etc/resolv.conf Он должен выглядеть следующим образом:

Файл: /etc/resolv.conf

nameserver 195.14.50.1

nameserver 195.14.50.21

Если сеть работоспособна, должны пинговаться шлюз и VPN-сервер. Проверяем:

[root@myhost sergo]# ping -c5 10.167.0.17
PING 10.167.0.17 (10.167.0.17) 56(84) bytes of data
64 bytes from 10.167.0.17: icmp_seq=1 ttl=255 time=3.95 ms
64 bytes from 10.167.0.17: icmp_seq=2 ttl=255 time=0.526 ms
64 bytes from 10.167.0.17: icmp_seq=3 ttl=255 time=0.528 ms
64 bytes from 10.167.0.17: icmp_seq=4 ttl=255 time=3.31 ms
64 bytes from 10.167.0.17: icmp_seq=5 ttl=255 time=0.534 ms
[root@myhost sergo]# ping -c5 vpn.someserver.net
PING vpn.corbina.net (195.14.38.8) 56(84) bytes of data.
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=1 ttl=248  time=1.17 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=2 ttl=248 time=1.16 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=3 ttl=248 time=1.19 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=4 ttl=248 time=1.17 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=5 ttl=248 time=1.00 ms

[править] Предварительная настройка роутинга

Настоятельно рекомендуем отложить ненадолго это руководство и прочитать Linux Network Administrators Guide Russian. Главы 2 и 5 снимут большинство ваших вопросов относительно роутинга.

Примечание: Предварительная настройка роутинга необходима в том случае, когда VPN и/или DNS-сервера находятся в других подсетях. Если это не так (да вы счастливчик!) - смело пропускайте этот шаг.

Из таблицы маршрутизации мы видим, что в настоящий момент доступ ко всем хостам сети (включая DNS и VPN сервера) осуществляется по маршруту по умолчанию (default route). Это означает, что любой хост, расположенный за пределами нашего сегмента, машина будет искать, обращаясь к шлюзу, указанному в этом маршруте. Когда мы поднимаем VPN-соединение, VPN-сервер дает нам новый шлюз, через который доступны интернет-хосты. Мы должны удалить из маршрута старый шлюз и заменить его на новый. Проблема в том, что после удаления старого шлюза машина перестанет видеть VPN-сервер и разорвет VPN-соединение. Чтобы этого не произошло, наша машина всегда должна знать, где искать VPN и DNS сервера вне зависимости от наличия или отсутствия маршрута по умолчанию. Для этого мы пропишем статические маршруты на каждый VPN и DNS сервер. Также статические маршруты на VPN сервера избавят нас от возможной проблемы, когда удаленный IP адрес, выдаваемый нам VPN сервером, равен IP адресу самого сервера. Подробнее об этом здесь (http://pptpclient.sourceforge.net/howto-diagnosis.phtml#ip_loop пункт 4с.)

Для начала узнаем IP нашего VPN-сервера с помощью команды ping.

Консоль: [root@myhost sergo]# ping -c5 vpn.corbina.net
  PING vpn.corbina.net (195.14.38.8) 56(84) bytes of data.

Как видно из команды ping, IP VPN сервера 195.14.38.8

Примечание: Чтобы не копаться в частностях, мы допускаем в данном примере, что vpn.corbina.net имеет только один IP. Ситуацию, когда хост vpn.corbina.net имеет не один а несколько IP адресов (на самом деле их 20) мы рассмотрим в шаге "Автоматизация".

Добавляем в нашу таблицу роутинга статические маршруты на VPN и DNS сервера:

route add -host 195.14.50.1 gw 10.167.0.17
route add -host 195.14.50.21 gw 10.167.0.17
 route add -host 195.14.38.8  gw 10.167.0.17

или

ip r a 195.14.50.1 via 10.167.0.17
ip r a 195.14.50.21 via 10.167.0.17
ip r a 195.14.38.8 via 10.167.0.17

Удаляем маршрут по умолчанию
route del default
или
ip r d default
Таблица маршрутизации будет выглядеть так:

Консоль: [root@myhost sergo]# route -n
 
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 195.14.50.21    10.167.0.17     255.255.255.255 UGH   0      0        0 eth0
 195.14.50.1     10.167.0.17     255.255.255.255 UGH   0      0        0 eth0
 195.14.38.8     10.167.0.17     255.255.255.255 UGH   0      0        0 eth0
 10.167.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
  

или

Консоль: [root@myhost sergo]# ip r
 
 195.14.50.21 via 10.167.0.17 dev eth0
 195.14.50.1 via 10.167.0.17 dev eth0
 195.14.38.8 via 10.167.0.17 dev eth0
 10.167.0.0/16 dev eth0 proto kernel skope link src 10.167.17.38
  

Проверка: мы должны успешно пинговать DNS и VPN сервера.

Консоль: [root@myhost sergo]# ping -c5 195.14.50.1
  
 PING 195.14.50.1 (195.14.50.1) 56(84) bytes of data.
 64 bytes from 195.14.50.1: icmp_seq=1 ttl=56 time=4.45 ms
 64 bytes from 195.14.50.1: icmp_seq=2 ttl=56 time=1.30 ms
 64 bytes from 195.14.50.1: icmp_seq=3 ttl=56 time=1.22 ms
  


Консоль: [root@myhost sergo]# ping -c5 195.14.50.21
  
 PING 195.14.50.21 (195.14.50.21) 56(84) bytes of data.
 64 bytes from 195.14.50.21: icmp_seq=1 ttl=56 time=0.982 ms
 64 bytes from 195.14.50.21: icmp_seq=2 ttl=56 time=0.954 ms
 64 bytes from 195.14.50.21: icmp_seq=3 ttl=56 time=1.02 ms
  


Консоль: [root@myhost sergo]# ping -c5 195.14.38.8
 
  PING 195.14.38.8 (195.14.38.8) 56(84) bytes of data.
  64 bytes from 195.14.38.8: icmp_seq=1 ttl=248 time=1.34 ms
  64 bytes from 195.14.38.8: icmp_seq=2 ttl=248 time=2.60 ms
  64 bytes from 195.14.38.8: icmp_seq=3 ttl=248 time=1.09 ms
  

[править] Настройка параметров VPN-соединения. Тестовый запуск

Все параметры нашего VPN соединения мы запишем в файле /etc/ppp/peers/corbina. Создадим его и наполним следующим содержанием:

Файл: /etc/ppp/peers/corbina
 pty "pptp 195.14.38.8 --nolaunchpppd" 
 user VPN_LOGIN 
 password "VPN_PASSWORD" 
 nodeflate 
 nobsdcomp 
 noauth

Параметры user и password в комментариях не нуждаются, значение остальных можно посмотреть в файле справки man pppd. Обратим внимание на то, что пароль забран в кавычки.

Убеждаемся, что в файлах /etc/ppp/options, ~/.ppprc, /etc/ppp/options.ppp0 нет незакомментированных параметров, которыми бы система могла затереть наши настройки. Если есть - комментируем

Поднимаем VPN соединение
pppd call corbina debug nodetach
(примечание: если Вы собираетесь выкладывать логи где-нибудь на форуме, не забудьте добавить к командной строке еще и опцию dump)--2sash-kan 02:07, 1 декабря 2007 (MSK)
Появятся логи соединения. Если все прошло успешно, они будут выглядеть примерно так:

Консоль: [root@myhost sergo]# pppd call corbina debug nodetach
 
 using channel 2
 Using interface ppp0
 Connect: ppp0 <--> /dev/pts/0
 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
 rcvd [LCP ConfReq id=0x1 <auth chap MD5> <magic 0x36da4966>]
 sent [LCP ConfAck id=0x1 <auth chap MD5> <magic 0x36da4966>]
 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
 rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
 sent [LCP EchoReq id=0x0 magic=0x33368137]
 rcvd [CHAP Challenge id=0x1 <f872f6df5542429b46d6cf7e89a3386c>, name = "bras8"]
 sent [CHAP Response id=0x1 <ebb4965e871c49a07565b148dc2dbf29>, name = "unicorn2"]
 rcvd [LCP EchoRep id=0x0 magic=0x36da4966]
 rcvd [CHAP Success id=0x1 ""]
 CHAP authentication succeeded
 CHAP authentication succeeded
 sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
 rcvd [IPCP ConfReq id=0x1 <addr 195.14.38.8>]
 sent [IPCP ConfAck id=0x1 <addr 195.14.38.8>]
 rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
 sent [IPCP ConfReq id=0x2 <addr 0.0.0.0>]
 rcvd [IPCP ConfNak id=0x2 <addr 89.178.77.182>]
 sent [IPCP ConfReq id=0x3 <addr 89.178.77.182>]
 rcvd [IPCP ConfAck id=0x3 <addr 89.178.77.182>]
 Cannot determine ethernet address for proxy ARP
 local  IP address 89.178.77.182
 remote IP address 195.14.38.8
 Script /etc/ppp/ip-up started (pid 4072)
 Script /etc/ppp/ip-up finished (pid 4072), status = 0x0
  

На соседнем терминале убедимся, что VPN-соединение установлено. Должен появиться сетевой интерфейс ppp0:

Консоль: [root@myhost sergo]# ifconfig
 
 eth0      Link encap:Ethernet  HWaddr 00:13:D4:68:B2:3E|
           inet addr:10.167.17.38  Bcast:10.167.255.255  Mask:255.255.0.0
           inet6 addr: fe80::213:d4ff:fe68:b23e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:24990 errors:0 dropped:0 overruns:0 frame:0
           TX packets:97 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000 
           RX bytes:2327027 (2.2 Mb)  TX bytes:8516 (8.3 Kb)
           Interrupt:19 
 
 lo        Link encap:Local Loopback  
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:13496 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13496 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:1387313 (1.3 Mb)  TX bytes:1387313 (1.3 Mb)
 
 ppp0      Link encap:Point-to-Point Protocol  
           inet addr:89.178.77.182  P-t-P:195.14.38.8  Mask:255.255.255.255
           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
           RX packets:4 errors:0 dropped:0 overruns:0 frame:0
           TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:3 
           RX bytes:40 (40.0 b)  TX bytes:46 (46.0 b)
  

Если VPN сервер использует шифрование, соединение закончится ошибкой:

Консоль: [root@myhost sergo]# pppd call corbina debug nodetach
  using channel 2
 Using interface ppp0
 Connect: ppp0 <--> /dev/pts/0
 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
 rcvd [LCP ConfReq id=0x1 <auth chap MD5> <magic 0x36da4966>]
 sent [LCP ConfAck id=0x1 <auth chap MD5> <magic 0x36da4966>]
 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
 rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
 sent [LCP EchoReq id=0x0 magic=0x33368137]
 rcvd [CHAP Challenge id=0x1 <f872f6df5542429b46d6cf7e89a3386c>, name = "bras8"]
 sent [CHAP Response id=0x1 <ebb4965e871c49a07565b148dc2dbf29>, name = "unicorn2"]
 rcvd [LCP EchoRep id=0x0 magic=0x36da4966]
 rcvd [CHAP Success id=0x1 ""]
 CHAP authentication succeeded
 CHAP authentication succeeded
 sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
 rcvd [CCP ConfReq id=0x1 <mppe +H -M +S +L -D -C>]
 sent [CCP ConfReq id=0x1 <mppe -H -M -S -L -D -C>]
 sent [CCP ConfNak id=0x1 <mppe -H -M +S -L -D -C>]
 rcvd [LCP TermReq id=0x3 "MPPE required but peer negotiation failed"]
 LCP terminated by peer (MPPE required but peer negotiation failed)
 sent [LCP TermAck id=0x3]
 rcvd [IPCP TermAck id=0x1]
 Discarded non-LCP packet when LCP not open
 rcvd [CCP ConfRej id=0x1 <mppe -H -M -S -L -D -C>]
 Discarded non-LCP packet when LCP not open
 Script pptp 192.168.36.1 --nolaunchpppd finished (pid 1550), status = 0x0
 Modem hangup
 Connection terminated.
 

В этом случае добавим в файл /etc/ppp/peers/corbina строчку

require-mppe-128

или

mppe required,stateless

и загрузим соответствующий модуль ядра командой

modprobe ppp_mppe

Запускаем снова. Все должно заработать.

Обратите внимание на параметр MTU интерфейса ppp0. По умолчанию он равен 1500. Если ваш провайдер использует другую величину MTU (допустим, 1492) - в тот же файл конфигурации etc/ppp/peers/corbina добавляем строчку

mtu 1492

[править] Окончательная настройка роутинга

Итак, мы подняли VPN соединение, но в интернет выйти не можем - машина пока не знает, где искать интернет-хосты. Для этого мы должны добавить маршрут по умолчанию через интерфейс ppp0 в нашу таблицу маршрутизации (помните - старый маршрут по умолчанию мы удалили). В качестве шлюза по умолчанию теперь выступает remote IP address, который нам любезно предоставил VPN сервер - 195.14.38.8 (да-да, в нашем случае он совпадает с IP VPN сервера!). Этот remote IP address присутствует как в логах pppd (remote IP address 195.14.38.8), так и в параметрах интерфейса ppp0, которые выводятся на экран командой ifconfig (P-t-P:195.14.38.8). Вводим:

route add default gw 195.14.38.8

или

route add default dev ppp0

что в данном контексте - одно и то же Теперь попробуем пропинговать какой-нибудь интернет-хост

Консоль: [root@myhost sergo]# ping -c5 www.ya.ru
 
 PING ya.ru (213.180.204.8) 56(84) bytes of data.
 64 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=61 time=2.11 ms
 64 bytes from ya.ru (213.180.204.8): icmp_seq=2 ttl=61 time=2.23 ms
 64 bytes from ya.ru (213.180.204.8): icmp_seq=3 ttl=61 time=2.39 ms    
  

Работает!

[править] Автоматизация

Теперь, когда соединение оттестировано, можно подумать и об автоматизации. Когда pppd устанавливает соединение, он автоматически выполняет скрипт /etc/ppp/ip-up, когда соединение рвется - выполняется скрипт /etc/ppp/ip-down. Значит, в эти файлы и надо забить весь роутинг, который в предыдущих пунктах мы вводили руками.

Мы не случайно сначала рассмотрели идеальный вариант, когда VPN сервер провайдера представлен в единственном числе и имеет один IP. В этом случае именем хоста (vpn.corbina.net) можно пренебречь и использовать в настройках только его IP, что мы и сделали. Однако если провайдер большой, под именем VPN сервера скрывается несколько серверов с разными IP, что позволяет провайдеру динамически регулировать нагрузку на них. Для того, чтобы выяснить, какие IP имеет хост vpn.corbina.net, воспользуемся командой host из пакета dnsutils

Консоль: [root@myhost sergo]# host vpn.corbina.net
 
 vpn.corbina.net has address 195.14.38.19
 vpn.corbina.net has address 195.14.38.20
 vpn.corbina.net has address 195.14.38.1
 vpn.corbina.net has address 195.14.38.2
 vpn.corbina.net has address 195.14.38.3
 vpn.corbina.net has address 195.14.38.4
 vpn.corbina.net has address 195.14.38.5
 vpn.corbina.net has address 195.14.38.6
 vpn.corbina.net has address 195.14.38.7
 vpn.corbina.net has address 195.14.38.8
 vpn.corbina.net has address 195.14.38.9
 vpn.corbina.net has address 195.14.38.10
 vpn.corbina.net has address 195.14.38.11
 vpn.corbina.net has address 195.14.38.12
 vpn.corbina.net has address 195.14.38.13
 vpn.corbina.net has address 195.14.38.14
 vpn.corbina.net has address 195.14.38.15
 vpn.corbina.net has address 195.14.38.16
 vpn.corbina.net has address 195.14.38.17
 vpn.corbina.net has address 195.14.38.18
  

Роутинг на всю эту прорву серверов нам нужно один раз внести в файл /etc/ppp/ip-up и привести файл к следующему виду:

Файл: /etc/ppp/ip-up
 
 #!/bin/sh
 #
 # This script is run by pppd when there's a successful ppp connection.
 #
 route add -host 195.14.38.1 gw 10.167.0.17
 route add -host 195.14.38.2 gw 10.167.0.17
 route add -host 195.14.38.3 gw 10.167.0.17
 ....
 route add -host 195.14.38.19 gw 10.167.0.17
 route add -host 195.14.38.20 gw 10.167.0.17
 route del default
  

а в скрипт /etc/ppp/ip-down мы запишем всего одну строчку, которая вернет нам шлюз по умолчанию после обрыва соединения:

Файл: /etc/ppp/ip-down
 
 #!/bin/sh
 #
 # This script is run by pppd after the connection has ended.
 #
 route add default gw 10.167.0.17
  

Вы, наверное, уже заметили, что мы не вписали в файл /etc/ppp/ip-up строчку route add default dev ppp0. Это не нужно - после успешного коннекта pppd сам впишет шлюз по умолчанию, если мы дадим ему команду defaultroute. В результате наш файл настроек /etc/ppp/peers/corbina будет выглядеть следующим образом:

Файл: /etc/ppp/peers/corbina
 
 pty "pptp vpn.corbina.net --nolaunchpppd" 
 user VPN_LOGIN 
 password "VPN_PASSWORD" 
 nodeflate 
 nobsdcomp 
 noauth
 defaultroute
  

Мы заменили IP VPN-сервера на его имя и добавили defaultroute Запускать и прерывать соединение можно командами

pon corbina
poff corbina

Если есть необходимость запускать соединение от простого пользователя, установите программу sudo и в файл /etc/sudoers впишите:

Файл: /etc/sudoers
 
 sergo   myhost = NOPASSWD: /usr/bin/pon, /usr/bin/poff
  

Соответственно, замените sergo и myhost на имя вашего пользователя и его машины. Он сможет запускать и прерывать соединение командами:

sudo pon corbina
sudo poff corbina
see also