суббота, 7 мая 2011 г.

Настройка VPN (PPTP) соединения в Ubuntu 11.04

Для установки соединения VPN есть множество руководств, однако их объем настолько велик, что найти нужное для себя порой не представляется возможным. Здесь я постараюсь как можно проще рассказать как установить VPN соединение из Ubuntu.

Установите пакет pptp-linux командой sudo apt-get install pptp-linux, если вы установили данный пакет, то все что необходимо для создания VPN соединения у вас уже есть. Остальное - это редактирование пары конфигурационных файлов.

Создайте файл конфигурации с произвольным именем в каталоге /etc/ppp/peers. В данном примере я буду использовать файл с именем office, но вы можете использовать как я уже сказал любой. Вот как выглядит мой:

# cat /etc/ppp/peers/office
pty "pptp 10.10.10.10 --nolaunchpppd"
user "domain\\user"
password "password"
nodeflate
nobsdcomp
#require-mppe-128
require-mppe

debug
#nodetach

lcp-echo-interval 60
lcp-echo-failure 4

#+mschap-v2
#-chap
noauth

Самое главное: для создания соединения VPN этих настроек уже достаточно. Проверьте соединение сейчас и не двигайтесь дальше пока не добьетесь соединения VPN.

Для тестирования соединения измените IP 10.10.10.10 на тот который используете вы, аналогичным образом измените вхождения в файл "domain\\user" и "password". Введите команду: sudo pon office (измените office на ваше имя файла) и если все сделано правильно, то в результате успешного соединения вы увидите новый виртуальный интерфейс при помощи команды ifconfig.

...
ppp0      Link encap:Протокол PPP (Point-to-Point Protocol) 
          inet addr:10.10.10.1  P-t-P:10.10.10.0  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:90 (90.0 B)  TX bytes:90 (90.0 B)
...

Если это так, то поздравляю вас - соединение установлено! Остались сущие мелочи: прописать маршрутизацию и возможно изменить адреса сервера имен. Если же соединение установить не удается, то читайте содержимое файла /var/log/syslog там будут достаточно подробные сведения почему соединение установить не удалось.

Маршрутизация

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

Если вы хотите использовать данный туннель в качестве маршрута по умолчанию, то введите следующую команду:

$ sudo route add default gw 10.10.10.0

Обратите внимание:
  1. Если вы добавляете маршрут по умолчанию к сети управляемой аплетом NetworkManager - то скорее всего не будет работать как новый маршрут так и старый. Чтобы исключить данное поведение выведите интерфейс маршрута по умолчанию из-под контроля аплета менеджера сети.
  2. При добавлении маршрута по умолчанию в тунель VPN вы должны прописать отдельный маршрут до вашего сервера VPN минуя туннель.

Что заставит весь исходящий трафик для которого явно не определено правило маршрутизации использовать данный туннель.

Для маршрутизации в данной туннель трафика только для определенной сети используйте команду

$ sudo route add -net 10.10.0.0 netmask 255.255.0.0 gw 10.10.10.0

Выставив при этом корректные параметры для -net и netmask.
Если в данный туннель необходимо отправлять трафик только одного хоста, то используйте команду

$ sudo route add -host 10.10.10.20 gw 10.10.10.0

Где 10.10.10.0 шлюз туннеля VPN (он отображается в команде ifconfig)

Если все выполнено правильно, то теперь вы имеете доступ ко всем ресурсам предоставленным вашем туннелем, но возможно только по IP адресу. Для использования имен серверов вместо IP адресов необходимо настроить использование сервера имен вашей операционной системой.

Сервер имен

Для использования сервера имен отредактируйте файл /etc/resolv.conf
Впишите IP адрес сервера имен, который необходим для работы. Например так:

$ cat /etc/resolv.conf
nameserver 192.168.1.1

Замените 192.168.1.1 на ваш фактический сервер имен (вы можете пропустить этот шаг, если у вас все работает и без настройки сервера имен).

Объединяем все вместе

У вас все работает? Если нет - вернитесь назад, если да - поздравляю! Но, погодите... Что-то здесь не так. Не слишком ли много действий нужно выполнить, чтобы установить соединение VPN? Установка соединения, создание одного или нескольких маршрутов, назначение нового сервера DNS. Возможно ли это все объединить в одно действие? Разумеется - можно. Сейчас я расскажу как. Ubuntu (как и другой известный мне Linux) использует механизм скриптов-триггеров обрабатывающих события изменения состояния сетевых интерфейсов.

В каталогах /etc/ppp/ip-down.d и /etc/ppp/ip-up.d находятся скрипты, которые выполняются при изменении состояния любого из сетевого интерфейса типа Point-to-Point. Скрипты при этом получают следующие переменные среды:

PPP_TTY=
IFNAME=ppp0
PPPLOGNAME=root
IPLOCAL=10.10.10.1
PPP_REMOTE=10.10.10.0
PPP_IFACE=ppp0
PPP_TTYNAME=
ORIG_UID=0
SPEED=38400
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
CALL_FILE=office
IPREMOTE=10.10.10.0
PPP_LOCAL=10.10.10.1
PPP_IPPARAM=
PPPD_PID=2524
PWD=/
PPP_SPEED=38400

Для нас наиболее интересным будет переменная среды CALL_FILE.

В каталоге /etc/ppp/ip-up.d создадим файл и сделаем исполняемым файл office со следующим содержимым

#!/bin/sh
# /etc/ppp/ip-up.d/office

if [ x"$CALL_FILE" = x"office" ]; then
        route add -host 10.10.20.0 gw $IPREMOTE
        # ... другие маршруты ....
        # ... меняем /etc/resolv.conf если необходимо
fi

При завершении соединения все маршуруты связанные с этим туннелем будут уничтожены автоматически поэтому их удалять специально нет необходимости. Однако если, вы вносили изменения в /etc/resolv.conf то эти изменения нужно будет внеси обратно при отключении туннеля. Сделать это можно в файле office в каталоге /etc/ppp/ip-down.d/ Все выполнять по аналогии с уже выполненным файлом.

#!/bin/sh
# /etc/ppp/ip-down.d/office

if [ x"$CALL_FILE" = x"office" ]; then
        # ... меняем /etc/resolv.conf в первоначальное состояние!
fi

Итак, теперь, когда все настроено вы можете устанавливать VPN соединение командой sudo pon office и разрывать соединение используя poff office.

Чего же нам не хватает для полного удовлетворения? Еще пары вещей: установка соединения при загрузке компьютера и повторный подъем при разрыве. Но об этом я уже расскажу в своей следующей записи. :)

10 комментариев:

  1. pptp соединение поднялося, сервер имен доступен, маршрут по умолчанию добавил. Адреса в интернете пингуются (google.com, mail.ru, rambler.ru) а браузер на страницы не заходит. В чем может быть проблема?

    ОтветитьУдалить
  2. Misha: тут я вижу два варианта:

    1. Некорректно настроен файервол - запрет исходящего tcp:80

    2. В браузере возможно некорректно настроен прокси-сервер.

    Если пингуются внешние ресурсы по имени хоста, то с настройкой VPN у вас все завершилось успешно. Ищите ошибку в другом месте (скорее всего файервол)

    ОтветитьУдалить
  3. Файервола у меня вообще еще нету (только установил Ubuntu 11.04). Настройки браузера проверил, прокся не используеться. Но сайты, которые находяться в локальной сети, работают без проблем. Не открываются все остальные, которые находяться за pptp соединением.
    Раньше использовал Suse linux, там была такая же проблема. На винде все работает отлично.

    ОтветитьУдалить
  4. Misha: нужно убедиться, что пакеты уходят по нужному маршруту. (netstat -rn, traceroute), если уходят туда, куда ожидалось, то нужно смотреть логи соединения - возможно проблема с mtu.

    ОтветитьУдалить
  5. ags: Трасировка маршрута работает, все как обычно, проверял на разных сайтах. MTU менял (и в конфиг файле pptp соединения и в настройке самого интерфейса), пробовал различные значения (1000, 1300, 1400, 1500) результат тот-же. :(
    Логи сохраняются только в /var/log/syslog или еще в каком-то файле?
    Спасибо за советы, но они пока что не помогли.

    ОтветитьУдалить
  6. Misha: если пинги во внешку ходят и ходят по нужному маршруту, по значит проблем с маршрутизацией нет (а это обычно именно то место, где многие могли бы споткнуться) и если нет файервола на локальной машине, то что остается в сухом остатке? icmp работает, dns работает. Соответственно если не работает браузер,значит идет фильтрация tcp трафика и если фаервола нет на локальной машине, значит он есть на одном из узлов между локальным и удаленным хостом. Других вариантов-то и нет на самом деле.

    Да логи лучше всего в сислоге и смотреть.

    ОтветитьУдалить
  7. Вариант с фаерволом на одном из узлов между моей машиной и удаленным хостом маловероятен, так как на этой же машине на windows xp pptp поднимается и все сайты октрываються в любом браузере.
    Я думаю что существует какой-то параметр, который windows передает по умолчанию на сервер pptp, а linux его не передает.
    Где можно почитать полное описание параметров для конфиг-файла pptp?

    ОтветитьУдалить
  8. Misha, опции можно посмотреть здесь http://linux.die.net/man/8/pppd и здесь http://linux.die.net/man/8/pptp сомневаюсь, что дело в них. Если проблемы с mtu нет и имеется устойчивое соединение с правильно проложенным маршрутом, то с сожалению даже не знаю, что еще можно и посоветовать... :(

    ОтветитьУдалить
  9. вот ведь! у мя та же проблема.=( убунта 12.04

    ОтветитьУдалить