Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

настройка_pptp_vpn_во_freebsd [2015/02/23 05:50] (текущий)
vovka Перенос со старой wiki
Строка 1: Строка 1:
 +Существует два способа организации клиентского PPTP-соединения из FreeBSD: 1) используя связку ppp + pptpclient, 2) используя связку netgraph и mpd5. Второй способ более универсален и, как говорят на форумах,​ намного лучше первого. В данной статье будет рассмотрен первый вариант,​ как проверенный автором.
  
 +=====  Исходные данные ​ =====
 +**//​Дано://​** \\  ​
 +  * Компьютер с установленной системой FreeBSD 10;
 +  * Провайдер Интернет-услуг,​ предоставляющий доступ по VPN (PPTP) с выдачей "​серого"​ ip-адреса пользователю;​
 +  * Провайдер автоматически назначает ip-адрес компьютерам пользователей в транспортной сети;
 +  * В транспортной сети не используется основной шлюз.
 +**//​Задача://​** настроить VPN-соединение для выхода в сеть Интернет через провайдера.\\  ​
 +**//​Уровень пользователя://​** средний,​ умеющий работать в консоли,​ с файловыми менеджерами и с текстовыми редакторами.\\ ​  
 +**//​Решение://​**\\  ​
 +
 +В таких сетях, где провайдер предосталяет услуги,​ обычно создаётся транспортная сеть, где размещены,​ например файловые или игровые серверы. К этой же сети подключаются и пользователи,​ но для доступа в сеть Интернет,​ пользователь должен настроить как бы "​тоннель во внешний мир Интернета"​ с помощью ​ VPN-соединения.\\  ​
 +Конечно,​ у разных провайдеров свои способы предоставления услуг доступа в Интернет,​ но остановимся на таком, что предоставляет доступ посредством VPN PPTP.
 +
 +Итак, для настройки VPN-соединения,​ провайдер должен выдать параметры этого соединения. Предположим они такие:​\\  ​
 +|**логин:​** | user-login |
 +|**пароль:​** ​ | user-password |
 +|**сервер доступа:​** ​ | 10.0.0.1 или vpn.provider.ru |
 +|**тип vpn-соединения:​** ​ |PPTP |
 +|**тип аутентификации:​** ​ |CHAP, MS-CHAP |
 +|**параметры TCP\IP:​** ​ |автоматические |
 +|**шифрование данных:​** ​ |нет |
 +|**компрессия данных:​** ​ | MPPE 128 bit |
 +
 +Немного о строке "​**параметры TCP\IP - автоматически**"​ - это означает,​ что провайдер сам выдаёт адрес и дополнительные сетевые параметры для подключения. Пользователю в этом случае,​ в параметрах TCP\IP для этого VPN-подключения ничего настраивать не надо.
 +
 +=====  Установка нужных пакетов ​ =====
 +Для настройки собственно VPN-соединения,​ потребуется установка:​ //ppp//, //​pptpclient//​ и некоторые зависимости. Выбор способа установки - на усмотрение пользователя. ​
 +===  Из портов ​ ===
 +Обновляем дерево портов,​ если не актуально.
 +<​code>​
 +# portsnap fetch
 +# portsnap fetch extract
 +</​code>​
 +
 +Переходим в каталог pptpclient и производим сборку
 +<​code>​
 +# cd /​usr/​ports/​net/​pptpclient/​
 +# make
 +# make install clean
 +# rehash
 +</​code>​
 +
 +===  Из бинарных пакетов ​ ===
 +<​code>​
 +# pkg install pptpclient
 +# rehash
 +</​code>​
 +
 +=====  Настройка соединения ​ =====
 +Редактируем файл /​etc/​ppp/​ppp.conf \\  ​
 +Комментируем все строки в секции default, но саму секцию оставляем. В конец файла дописываем параметры нашего соединения:​
 +
 +<file bash ppp.conf>​
 +default:
 +#
 +provider:
 + set log phase
 + set ifaddr 0 0
 + set authname user-login
 + set authkey user-password
 + set timeout 0
 + set reconnect 3 5
 + ​resolv readonly
 + ​disable vj pred1 deflate
 + deny vj pred1 deflate
 + set mppe * stateless
 +</​file>​
 +
 +<note important>​ Внимание!\\ ​ Строки с параметрами в секции должны начинаться с пробела как показано выше! Имя секции (профиля) начинается с новой строки!</​note>​
 +
 +
 +Так как логин\пароль содержатся в этом файле в открытом виде, к файлу нужно ограничить права:
 +<​code> ​
 +# chmod 600 /​etc/​ppp/​ppp.conf
 +# ls -l /​etc/​ppp/​ppp.conf
 +
 +-rw------- ​ 1 root  wheel  1389 Apr  7 20:32 /​etc/​ppp/​ppp.conf
 +</​code>​
 +
 +Некоторые пояснения к параметрам:​
 +| provider: | Имя профиля. Оно будет необходимо при запуске |
 +| set log phase | Устанавливает уровень логгирования работы ppp. **//​phase//​** - уровень установки соединения. События пишутся в лог: /​var/​log/​ppp.log |
 +|set ifaddr 0 0 | Так как провайдер сам выдаёт адреса клиентам,​ ставим нули. |
 +|set authname //​user-login//​ | Здесь устанавливается логин vpn-аккаунта.|
 +|set authkey //​user-password//​ | Здесь устанавливается пароль vpn-аккаунта. |
 +|set timeout 0 | Здесь устанавливается время в секундах,​ когда соединение будет разорвано при неактивности. Если **//0//** - держать активным всегда. |
 +|set reconnect 3 5 | Переустановить соединение после 5 неудавшихся попыток передачи данных. Интервал между попытками - 3 секунды. |
 +|resolv readonly | Если DNS-адреса провайдера уже указаны пользователем в /​etc/​resolv.conf , то, значение **readonly** указывает ​ не менять параметры в resolv.conf при установке соединения. Иначе демон ppp-соединения перепишет значения в /​etc/​resolv.conf на провайдерские. |
 +|disable vj pred1 deflate | Указывает не использовать компрессию заголовков Van Jacobson, не использовать предиктор протокола компрессии,​ deflate-компрессию. |
 +|deny vj pred1 deflate | Тоже, но отключает полностью. |
 +|set mppe * stateless | Указывает использовать шифрование MPPE любой битности в режиме "​stateless"​ (переинициализация словаря шифрования для каждого пакета). |
 +
 +Последние 3 параметра уточняются у провайдера или подбираются экспериментально по успешному запуску линка. Более подробно все параметры описаны в **man ppp**.
 +
 +Переходим к запуску.
 +
 +=====  Методы запуска соединения ​ =====
 +====  Вучную ​ ====
 +<​code>​
 +# /​usr/​local/​sbin/​pptp vpn.provider.ru provider
 +</​code>​
 +, где **vpn.provider.ru** - это адрес VPN-сервера,​ **provider** - имя профиля соединения в /​etc/​ppp/​ppp.conf .\\  ​
 +После запуска возможны сообщения об ошибках,​ но их можно игнорировать. ​ Соединение будет активно,​ пока не будет завершен процесс соединения по kill или Ctrl-C.
 +
 +====  Автозапуск соединения при загрузке ОС  ====
 +Если необходимо,​ чтобы vpn-соединение активировалось после загрузки ОС, необходимо создать скрипт запуска соединения,​ поместить его в каталог скриптов инициализации и указать в /​etc/​rc.conf разрешение на запуск.
 +
 +В любимом редакторе создаём скрипт запуска с именем //​providervpn//​ и сохраняем его в /​usr/​local/​etc/​rc.d/​ :
 +<file bash providervpn>​
 +#!/bin/sh
 +
 +name="​providervpn"​
 +rcvar="​providervpn_enable"​
 +pidfile="/​var/​run/​${name}.pid"​
 +vpn_server="​vpn.provider.ru"​
 +conn_name="​provider"​
 +tun0_pid="/​var/​run/​tun0.pid"​
 +
 +case "​$1"​ in
 +start)
 + if [[|f $tun0_pid ]]; then
 + echo "​Connection already active!"​
 +   else
 + echo "​Connection not active yet. Starting."​
 +         /​usr/​local/​sbin/​pptp ${vpn_server} ${conn_name} & 2>&1
 + touch $pidfile
 + fi
 +        ;;
 +stop)
 + if [[|f $tun0_pid ]]; then
 + echo "​Connection is active. Stopping."​
 + tun0_pid_value=`cat ${tun0_pid}`
 + kill $tun0_pid_value
 + rm -f $pidfile
 +   else
 +         echo "​Connection not active yet!"
 + fi
 + ;;
 +status)
 +       if [[|f $tun0_pid ]]; then
 + tun0_pid_value=`cat ${tun0_pid}`
 +                echo "​Connection is active. PID=${tun0_pid_value}."​
 +          else
 +                echo "​Connection not active yet!"
 +        fi
 +        ;;
 +  * )
 +        echo "​Usage:​ `basename $0` {start|stop|status}"​ >&2
 +        exit 64
 +        ;;
 +esac
 +
 +exit 0
 +
 +</​file>​
 +Делаем файл скрипта выполняемым:​
 +<​code>​
 +# chmod +x /​usr/​local/​etc/​rc.d/​providervpn
 +</​code>​
 +
 +Далее, разрешаем загрузку при старте - открываем на редактирование **/​etc/​rc.conf** и добавляем строку:​
 +<​code>​
 +providervpn_enable="​YES"​
 +</​code>​
 +Обратите внимание,​ что //​providervpn_enable//​ - это значение параметра,​ определённое в переменной //rcvar// скрипта запуска соединения.
 +
 +Пробуем ручной запуск,​ который обеспечит активацию и работу соединения в фоновом режиме: ​
 +<​code>​
 +# /​usr/​local/​etc/​rc.d/​providervpn start
 +</​code>​
 +
 +Обратите внимание,​ что данный скрипт сделан для классической системы инициализации. Во FreeBSD 10, наравне с классической системой инициализации, ​ используется и новая система,​ в которой можно указывать разные зависимости. Автор пока не разобрался с новой системой,​ поэтому,​ не удивляйтесь,​ что утилита инспектирования процесса запуска:​
 +<​code>​
 +# rcorder /etc/rc.d/* /​usr/​local/​etc/​rc.d/​*
 +</​code>​
 +выдаст очередь запуска скрипта vpn-соединения в секции DAEMON, а не NETWORKING.
 +
 +=====  Установка параметров и выполнение скриптов после старта или останова соединения ​ =====
 +Также как и в Linux, во FreeBSD есть возможность запуска скриптов при включении и отключении соединения,​ но взаимодействие и семантика скриптов другая.
 +
 +Конфиги **/​etc/​ppp/​ppp.linkup** и **/​etc/​ppp/​ppp.linkdown** - соответственно содержат команды и параметры исполняемые во время включения и выключения соединения. Для разделения параметров,​ как и в /​etc/​ppp.conf применяется имя профиля соединения. ​
 +
 +===  Пример установки маршрута по умолчанию на провайдерский шлюз после активации соединения ​ ===
 +**/​etc/​ppp/​ppp.linkup**
 +<​code>​
 +providervpn:​
 + add default HISADDR ​
 +</​code>​
 +
 +===  Пример установки своих DNS-адресов,​ а не провайдерских ​ ===
 +При запуске,​ ставим DNS-сервер от google и назначаем основной маршрут на провайдера:​
 +**/​etc/​ppp/​ppp.linkup**
 +<​code>​
 +providervpn:​
 + add default HISADDR ​
 + ! sh -c "echo '​nameserver 8.8.8.8'​ >> /​etc/​resolv.conf"​
 +</​code>​
 +
 +При отключении возвращаем провайдерский DNS, действующий в транспортной локальной или WAN сети.\\  ​
 +**/​etc/​ppp/​ppp.linkdown**
 +<​code>​
 +providervpn:​
 + ! sh -c "echo '​nameserver 10.0.0.1'​ >> /​etc/​resolv.conf"​
 +</​code>​
 +
 +=====  Отладка запуска соединения ​ =====
 +Рабочее соединение создаёт интерфейс типа **tun*** . Внизу секции этого интерфейса указывается PID-файл процесса ppp, ответственного за соединение.
 +<​code>​
 +# ifconfig
 +rl0: flags=8843<​UP,​BROADCAST,​RUNNING,​SIMPLEX,​MULTICAST>​ metric 0 mtu 1500
 + options=2008<​VLAN_MTU,​WOL_MAGIC>​
 + ether 00:​01:​18:​2a:​b7:​e5
 + inet 10.10.10.195 netmask 0xffffff00 broadcast 10.255.255.255 ​
 + media: Ethernet autoselect (100baseTX <​full-duplex>​)
 + status: active
 +lo0: flags=8049<​UP,​LOOPBACK,​RUNNING,​MULTICAST>​ metric 0 mtu 16384
 + options=600003<​RXCSUM,​TXCSUM,​RXCSUM_IPV6,​TXCSUM_IPV6>​
 + inet 127.0.0.1 netmask 0xff000000 ​
 +tun0: flags=8051<​UP,​POINTOPOINT,​RUNNING,​MULTICAST>​ metric 0 mtu 1498
 + options=80000<​LINKSTATE>​
 + inet 192.168.1.168 --> 192.168.1.1 netmask 0xffffffff ​
 + Opened by PID 622
 +
 +</​code>​
 +Если интерфейс не создаётся,​ смотрим лог: /​var/​log/​ppp.log на предмет каких-либо ошибок. Для более подробного логгирования процесса работы демона ppp, можно прописать другие значения параметра ​ "set log" в конфиге /​etc/​ppp/​ppp.conf . Например:​
 +<​code>​
 +set log Phase Chat LCP IPCP CCP tun command
 +</​code>​
 +После отладки соединения,​ чтобы лог не "​разбухал"​ значение "set log" лучше выставить в **//​phase//​** .
 +
 +=====  Смотрите также ​ =====
 +  *  [[http://​nix.zeya.org/​forum/​index.php?​topic=342.0|Обсуждение статьи на форуме]]
 +  *  **man //ppp//**
 +  *  **man //pptp//**
Печать/экспорт