Home

вторник, 10 ноября 2009 г.

Ручной VPN в Леопарде

Иногда возможностей графического конфигуратора VPN в Mac OS X недостаточно по возможностям или его применение неоправдано или невозможно. В этом случае можно настроить и поднять соединение вручную.

Для начала запустим терминал и получим необходимые привилегии

sudo bash

То, что в M$ называют VPN (Виртуальные частные сети), в мире unix попадает под определение PPP (Point-to_Point Protocol, или протокол соединений точка-точка).

vpn_1.png

Так что и заведует такими соединениями программа pppd (демон протокола точка-точка) Практически для установления соединения достаточно запустить pppd с необходимыми параметрами, прямо в командной строке, однако это не совсем удобно и не совсем безопасно (можно подсмотреть все параметры в списке процессов). Поэтому мы создадим необходимые файлы конфигурации при помощи которых и будем управлять параметрами. Все файлы конфигурации pppd хранятся в одной корзине, каталоге /etc/ppp/ , он уже имеется в установленной системе, останется лишь создать каталог peers, в котором должны хранится файлы описания соединений.

mkdir /etc/ppp/peers

К примеру нам необходимо создать подключение к провайдеру Дубина, так что назовем соединение dubina

nano /etc/ppp/peers/dubina

Впишем в файл следующие строки

serviceid 2
logfile /var/log/ppp/dubina.log
debug
plugin PPTP.ppp
remoteaddress 123.123.123.123
noipdefault
nodefaultroute
looplocal
noauth
nodeflate
nobsdcomp
require-mppe
refuse-pap
user USERNAME
password PASSWORD
remotename dubina
ipparam dubina

В первую очередь вам необходимо подставить свои значения для параметров remoteaddress (адрес VPN сервера), user (имя пользователя) и password (пароль) Если ваше соединение не должно использоваться как основной шлюз (галка "Отправлять весь траффик через VPN" снята), оставьте параметр nodefaultroute нетронутым, в противном случае замените его на defaultroute
В принципе, указанного вполне достаточно для большинства случаев, однако бывают моменты, когда на той стороне установлена какая-то из разновидностей Windows со своими особенностями, в этом случае попробуйте параметры

nodeflate
nobsdcomp
require-mppe
заменить на
novj
mppe-stateless
mppe-128

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

pppd call dubina

Если все прошло успешно, у нас должен активироваться интерфейс ppp0, проверим

ifconfig ppp0

Результат должен выглядеть как-то так:

ppp0: flags=8051 UP,POINTOPOINT,RUNNING,MULTICAST mtu 1452 inet 192.168.4.123 --> 192.168.4.1 netmask 0xffffff00

а в списке процессов висеть запущенный pppd

ps ax |grep pppd 1338 ?? Ss 0:00.02 pppd call dubina

Неверный результат приведет к выдаче

ifconfig: interface ppp0 does not exist

Если соединение установить не удалось, то придется скурпулезно рассматривать лог /var/log/ppp/dubina.log при помощи Console.app в попытках понять, что-же там не срослось.
Перейдем к следующему этапу марлезонского балета, а пока пристрелим демона

kill 1338

Можно убрать параметр debug из файла dubina, т.к. соединение удачно и дополнительная информация нам не нужна.
Если необходимо, чтобы соединение восстанавливалось после обрыва само, добавьте к существющим еще один параметр persist Если ваше соединение необходимо для выхода в интернет и является основным каналом для траффика, настройки на этом можно завершить.

В принципе, поднятие VPN можно поставить в автозапуск, но это будет хорошо работать только для случаев, когда подключение осуществляется при помощи сетевой карты, а не по беспроводке. Для этого команду pppd call dubina можно записать в файл /etc/rc.local

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

vpn_2.png

В таких случаев в комплекте с проблемой может поставляться bat-файлик или команда, которую нужно запустить на Windows для решения проблемы. Руками. Мы решим ее аналогично, но автоматизировано.

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

В примере на картинке все ценности расположены по адресам 10.*.*.* и скрываются за адресом 10.10.1.1 Windows-аналог команды звучал бы route add 10.0.0.0 mask 255.0.0.0 10.10.1.1 В нашей интерпретации это выглядит как

/sbin/route add -net 10.0.0.0 -netmask 255.0.0.0 10.10.1.1

Создаем файл

nano /etc/ppp/ip-up

и вписываем пару строк

#!/bin/sh
/sbin/route add -net 10.0.0.0 -netmask 255.0.0.0 10.10.1.1

Соответственно создаем файлик и для уборки за собой

nano /etc/ppp/ip-down

#!/bin/sh
/sbin/route delete -net 10.0.0.0 -netmask 255.0.0.0 10.10.1.1

Не забываем сделать их исполняемыми

chmod a+x /etc/ppp/ip-up
chmod a+x /etc/ppp/ip-down

Ой.

7 коммент.:

Serhij комментирует...

Как альтернатива можно воспользоваться IP Securitas VPN
Позволяет настроить VPN подключение с мака к любому устройству которое поддерживает vpn. Например, пользую для подключения к раутеру Linksys WRT 2000

Alexey комментирует...
Этот комментарий был удален автором.
tsybulin комментирует...

2Alexey: Спасибо, полезное дополнение

Alexey комментирует...

serviceid 8
device en1
logfile /var/log/ppp/system.log
#debug
plugin PPPoE.ppp
#remoteaddress
#noipdefault
#nodefaultroute
#looplocal
#noauth
#nodeflate
#nobsdcomp
#require-mppe
#refuse-pap
user user
password passwd
#remotename system
#ipparam system

вариант для pppoe

(кое что убрал)

sensitive_photo комментирует...

Есть ещё отличный пакет VPN Tracker (http://www.equinux.com/us/products/vpntracker/index.html)

Простой в настройке (насколько VPN вообще может быть простым :) и в деплойменте.

Основное достоинство: хороший деплоймент и большое число поддерживаемых протоколов.
Недостаток - самая дорогая утилита на рынке.

iTux комментирует...

@Есть ещё отличный пакет VPN Tracker
Это не то о чем тут писали. Это VNCoVPN

iTux комментирует...

Еще раз выручил :)

Отправить комментарий