Настройка PPTP-сервера

На работе возникла необходимость под Linux настроить PPTP-сервер для Windows-клиентов. На всякий случай решил описать пример настройки.

Ставим ppp и pptpd:

# aptitude install ppp pptpd

Настраиваем сам сервер pptpd, прописывая в его конфигурационном файле /etc/pptpd.conf:

option /etc/ppp/pptpd-options
logwtmp
localip 10.3.17.1
remoteip 10.3.17.2-254

Опция localip задаёт IP-адрес на локальной стороне создаваемых туннелей, опция remoteip - задаёт соответственно диапазон IP-адресов, которые будут выдаваться клиентам, в качестве адресов с их стороны.

Настроим pppd для туннелей, поднимаемых сервером pptpd. Зададим настройки в файле /etc/ppp/pptpd-options:

10.3.17.1:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 10.3.1.3
ms-dns 10.3.1.4
ms-wins 10.3.1.4
ms-wins 10.3.1.5
nodefaultroute
lock
nobsdcomp
idle 900

Первая опция задаёт IP-адрес локальной стороны туннеля (почему-то настройка, указанная в /etc/pptpd.conf не действует).

Опция name pptpd задаёт имя сервера. Оно будет использоваться для поиска записей в файле паролей (см. ниже).

Опции refuse-pap, refuse-chap, refuse-mschap, require-mschap-v2 отклоняют различные способы аутентификации, требуя использовать только аутентификацию по MS-CHAPv2.

Опция require-mppe-128 указывает на необходимость шифрования передаваемых по туннелю данных с помощью протокола MPPE с длиной ключа 128 бит.

Опции ms-dns 10.3.1.3 и ms-dns 10.3.1.4 задают адреса DNS-серверов, которые будут сообщены подключившемуся клиенту.

Опции ms-wins 10.3.1.4 и ms-wins 10.3.1.5 задают адреса WINS-серверов, которые будут сообщены подключившемуся клиенту.

Опция nodefaultroute заставляет pppd не устанавливать маршрут по умолчанию через подключившегося клиента.

Опция lock создаёт файл блокировки интерфейса, который позволяет избежать попыток использовать этот интерфейс другими соединениями, пока он используется.

Опция nobsdcomp отключает сжатие потока данных по алгоритму BSD.

Опция idle задаёт количество секунд простоя, по истечении которых простаивающее соединение будет отключено.

Теперь нужно прописать клиентов в файле паролей /etc/ppp/chap-secrets:

elvira          pptpd   "111111"                10.3.17.23
#kon_sv         pptpd   "passwd"                *
igor            pptpd   "paroli"                10.3.17.28

Символ решётки говорит о том, что данная запись отключена (закомментирована).

Символ звёздочки говорит о том, что этому клиенту будет выдан любой свободный адрес из диапазона 10.3.17.2-254, который указан в настройках pptpd.

Клиентам, для которых указан IP-адрес в последней колонке, всегда будут выдаваться этот IP-адрес.

Теперь перезапускаем PPTP-сервер, чтобы настройки вступили в силу:

# /etc/init.d/pptpd restart

Если хочется выполнять какие-то специфические для PPTP-клиента команды, то можно создать сценарии /etc/ppp/ip-up.d/pptp-clients и /etc/ppp/ip-down.d/pptp-clients, шаблон для которых представлен ниже:

#!/bin/sh

case "$PPP_IPPARAM" in
  "pptp-clients")
    # ваши команды
  ;;
  *)
    echo "No PPP_IPPARAM defined"
  ;;
esac

Теперь в файле /etc/pptpd.conf нужно прописать опцию noipparam, которая заставит pptp-сервер не передавать в качестве ipparam IP-адрес, с которого было установлено подключение.

Чтобы отличать pptp-клиентов от других PPP-подключений, добавим опцию ipparam в файл /etc/ppp/pptpd-options:

ipparam "pptp-clients"

В случае если ipparam будет равен pptp-clients, выполнятся указанные для этого случая команды. Например таким образом можно настраивать разрешающие правила в фаерволле. В том числе можно делать дополнительные проверки, идентифицируя клиента по IP-адресу внутри тоннеля или по логину, с которым клиент подключился.

Другие источники информации по этой теме:

  1. Настройка PPTP-сервера в Debian/Ubuntu
  2. Русский перевод man pppd(8) - демон протокола точка-точка (Point-to-Point Protocol Daemon)
  3. Русский перевод man pptpd(8) - PPTP VPN-демон
  4. Русский перевод man pptpd.conf(5) - конфигурация PPTP VPN демона

Последняя правка: 22-09-2009

Написать автору