Select Page

VPN (PPTPd) сервер на Ubuntu

VPN (PPTPd) сервер на Ubuntu

Иногда нужно получить удаленный доступ к сети предприятия, создать тоннель между серверами или предоставить доступ к Интернету хорошему соседу которого отключили от Сети за задолженность А, может быть, — просто иметь возможность получить доступ к своей сети из любого уголка мира, где есть Интернет.

Для этих целей можно использовать виртуальные частные сети (Virtual Private Network — VPN). В нашем случае, это будет самый распространенный протокол в странах СНГ, а именно — PPTP (Point-to-Point Tunneling Protocol). Многие кабельные провайдеры интернета используют именно его для предоставления услуг доступа ко Всемирной сети.

Поднять свой сервер на Linux Ubuntu Server LTS не так уж трудно. Для этого нам понадобится доступ к Интернету и реальный IP (если нужно будет подключаться к серверу из Интернета).

Заходим на сервер, логинимся под root и устанавливаем необходимые пакеты командой apt-get install pptpd Нам предложат также установить пакет bcrelay, он позволяет дублировать широковещательные пакеты, принятые на входящем интерфейсе на виртуальные (PPP тоннели клиентов).

pptp_install

Нажимаем enter и наш сервер установлен. Приступим к конфигурации. Откроем файл nano /etс/pptpd.conf и в самом низу увидим следующие строки

#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245
# or
#localip 192.168.0.234-238,192.168.0.245
#remoteip 192.168.1.234-238,192.168.1.245

Это настройки IP адресов клиентов. Раскомментируем первые две строки (удалим символ #) и немного подправим их.

Строка localip 192.168.0.1 значит, что у нашего VPN сервера будет IP 192.168.0.1 можно указать наш IP в одной из непосредственно подключенных сетей. Например, у меня в домашней сети у сервера IP адрес — 172.30.2.1

Вторая строка — remoteip 192.168.0.234-238,192.168.0.245 указывает диапазон IP адресов, которые будут присваиваться клиентам. Как видно из этих строк, сетевой адрес может быть любым (во второй группе строк). Для удобства мы выберем его из того же диапазона что и IP нашего сервера.

Я использую дома такую логику выдачи IP: 1й — роутер, 2-19 — компьютеры, 20-49 — статический VPN (при подключении выдается один и тот же адрес), 50-100 — VPN клиенты, 101-199 — Wi-Fi клиенты, 200-254 — для различных устройств (например IP Wi-Fi точки доступа, телевизора и т.п). Укажем такой диапазон remoteip 172.30.2.50-100 и сохраним конфигурацию.

Перейдем в каталог cd /etс/ppp/ здесь хранятся все файлы настройки pptpd (сервер) и pppd (клиент).

Переименуем файл pptpd-options командой mv pptpd-options pptpd-options.bak и создадим его по новой nano pptpd-options Это сделано для того, чтобы легче было вставить несколько строк в новый файл, чем искать параметры среди десятков строк с комментариями. Вставим в этот новый файл такое содержимое:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
#require-mppe-128
ms-dns 172.30.2.1
nodefaultroute
lock
nobsdcomp
auth
logfile /var/log/pptpd.log

Что все это значит? Давайте по порядку:

  • Использовать имя pptpd для поиска логинов в chap-secrets
  • При указании этой опции pptpd не согласится аутентифицироваться по протоколу refuse-pap, refuse-chap, refuse-mschap
  • Требовать у партнёра аутентификации с помощью MS-CHAPv2
  • Требовать использования MPPE со 128-битным шифрованием require-mppe-128 т.е. шифровать весь трафик. Это увеличивает нагрузку на сервер и не все «слабые» устройства его поддерживают (домашние Wi-Fi роутеры и т.п.).
  • Предложить использовать DNS сервер с IP 172.30.2.1
  • nodefaultroute — не устанавливать шлюз по умолчанию от сервера к клиенту, в противном случае, весь трафик в Интернет будет послан через подключившегося клиента, также Интернет может отключится из-за потери маршрута к провайдеру.
  • Lock — блокировать сессии, т.е. с одного логина может быть только одно подключение
  • nobsdcomp — не сжимать трафик. При включении увеличивает нагрузку на наш сервер
  • auth — требовать авторизации (логин и пароль)
  • logfile /var/log/pptpd.log — писать логи работы в этот файл.

Сохраняем и закрываем этот конфигурационный файл.

Теперь нужно добавить пользователей, которые будут подключаться к нашему серверу. Откроем файл nano chap-secrets (он используется для хранения учетных записей PPP).

Для корректной работы нужно соблюдать такой формат: колонки должны быть разделены хотя бы одним пробелом или табом (Tab), не допускается использование пробелов в именах (иначе пробел рассматривается как следующая колонка), логин должен начинаться на букву. Например:

vpn_users

Первая колонка — это логин пользователя, вторая — имя сервиса. В нашем случае это pptpd. Далее — пароль пользователя, последняя — IP адрес, который будет выдан. Причем, если стоит * то IP адрес будет выдан из заданного ранее диапазона автоматически. Также в качестве IP можно указать адрес, который может быть за пределами диапазона.

Перед тем, как использовать сервер, нужно его перезапустить. Для этого выполним /etс/init.d/pptpd restart если в конфигурации нет ошибок, сервер будет запущен.

rоot@CoolServ:/etс/ppp# /etс/init.d/pptpd restart
Restarting PPTP:
Stopping PPTP: pptpd.
Starting PPTP Daemon: pptpd.

Если вы используете IPTables (фаервол) в него нужно добавить такие строки:

# VPN - PPTPD
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

Для предоставления доступа к Интернету VPN клиентам через наш сервер нужно дописать такое правило в IPTables:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

где eth1 — интерфейс в сторону Интернета.

Так-же если у вас не включен форвардинг, нужно его включить командой

echo 1 > /proc/sys/net/ipv4/ip_forward
Для проверки можно создать тестовое подключение VPN с отключенным шифрованием (в MS Windows 7 это «Подключатся даже без шифрования») и используя любой указанный логин подключиться к серверу.

Частые ошибки при подключении в MS Windows

691 — проверьте логин и пароль (он регистрозависим, так-же не должно быть пробелов)

718 — проблема с настройкой фаервола на сервере или сервер не смог запуститься

741 или 742 — нужно отключить обязательное шифрование на стороне клиента

About The Author

Leave a reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Может быть интересно: