# PPTP server (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Point-to-Point Tunneling Protocol (PPTP) — метод реализации виртуальной частной сети. PPTP использует канал контроля над туннелями TCP и GRE для инкапсуляции PPP-пакетов.

Далее будет показано, как создать сервер PPTP в Arch.

Важно: Протокол PPTP по своей сути небезопасен. Подробности смотрите на странице http://poptop.sourceforge.net/dox/protocol-security.phtml.

## Установка

Установите пакет pptpd из официальных репозиториев.

## Настройка

Совет: Примеры файлов настроек доступны в каталоге `/usr/share/doc/pptpd`

Настройка производится в файле `/etc/pptpd.conf`. Пример:

    /etc/pptpd.conf

    # Обратитесь к man pptpd.conf для получения подробной информации о настройке

    # Файл опций, который будет передан в pppd вместо стандартного /etc/ppp/options
    # В данном примере: /etc/ppp/options.pptpd
    option /etc/ppp/options.pptpd

    # IP-адрес сервера в локальной сети (замените своим)
    # В данном примере: 192.168.1.2
    localip 192.168.1.2

    # Диапазон адресов для клиентов PPTP-сервера (замените по своему усмотрению)
    # В данном примере клиенты будут получать IP-адреса в диапазоне 192.168.1.234-238 и 192.168.1.245
    remoteip 192.168.1.234-238,192.168.1.245

После чего создайте файл опций `/etc/ppp/options.pptpd`. Пример:

    /etc/ppp/options.pptpd

    # Обратитесь к man pppd чтобы увидеть полный список доступных опций и их описание.

    name pptpd         # Название локальной системы для целей авторизации
    refuse-pap         # Отказывать авторизацию пирам, использующим PAP
    refuse-chap        # Отказывать авторизацию пирам, использующим CHAP
    refuse-mschap      # Отказывать авторизацию пирам, использующим MS-CHAP
    require-mschap-v2  # Требовать авторизацию с использованием MS-CHAPv2
    require-mppe-128   # Требовать использование MPPE с 128-битным шифрованием
    proxyarp           # Добавлять запись в системную таблицу ARP
    lock               # Обеспечить блокирование для монопольного доступа к последовательному устройству
    nobsdcomp          # Отключить сжатие BSD-Compress
    novj               # Отключить сжатие Вана Якобсона для заголовков
    novjccomp          # Отключить сжатие идентификатора соединения
    nolog              # Отличить логирование в файл
    ms-dns 8.8.8.8     # Указываем первичный адрес DNS-сервера для клиентов Microsoft Windows
    ms-dns 8.8.4.4     # Указываем вторичный адрес DNS-сервера для клиентов Microsoft Windows

Примечание: Убедитесь, что в конце файла `/etc/ppp/options.pptpd` присутствует пустая строка, так как раннее замечались проблемы при запуске сервера из-за её отсутствия.

Далее вам необходимо создать пользователей для авторизации в файле `/etc/ppp/chap-secrets`:

    /etc/ppp/chap-secrets

    # <Имя> <Название сервера> <Пароль> <IP-адреса>
    user2    pptpd    123    *

Теперь вы сможете авторизоваться, используя имя "user2" и пароль "123" под любым IP-адресом.

Далее необходимо включить форвардинг пакетов (это можно сделать несколькими способами, больше информации доступно на странице Sysctl#Configuration):

    /etc/sysctl.d/99-sysctl.conf

    net.ipv4.ip_forward=1

Теперь примените все изменения, сделанные в конфигурационных файлах sysctl:

    # sysctl --system

### Настройка межсетевого экрана iptables

Ниже представлен пример конфигурации iptables для настройки межсетевого экрана.

    # Пропускать все пакеты с интерфейсов ppp*, например ppp0
    iptables -A INPUT -i ppp+ -j ACCEPT
    iptables -A OUTPUT -o ppp+ -j ACCEPT

    # Пропускать входящие соединения на порт 1723 (PPTP)
    iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

    # Пропускать все пакеты GRE
    iptables -A INPUT -p 47 -j ACCEPT
    iptables -A OUTPUT -p 47 -j ACCEPT

    # Включить форвардинг IP
    iptables -F FORWARD
    iptables -A FORWARD -j ACCEPT

    # Включить NAT для интерфейсов eth0 и ppp*
    iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
    iptables -A POSTROUTING -t nat -o ppp+ -j MASQUERADE

После чего сохраните новые правила iptables в файл командой:

    # iptables-save > /etc/iptables/iptables.rules

Больше информации доступно на странице Iptables.

### Настройка межсетевого экрана UFW

Настройте UFW так, чтобы предоставить доступ клиентам PPTP.

Вам необходимо изменить правило переадресации по умолчанию в файле `/etc/default/ufw`:

    /etc/default/ufw

    DEFAULT_FORWARD_POLICY="ACCEPT"

Теперь отредактируйте файл `/etc/ufw/before.rules`, добавив следующий код после заголовка и перед строкой *filter:

    /etc/ufw/before.rules

    # Правила для таблицы NAT
    *nat
    :POSTROUTING ACCEPT [0:0]

    # Пропускать пакеты от клиентов на интерфейс eth0
    -A POSTROUTING -s 172.16.36.0/24 -o eth0 -j MASQUERADE

    # Коммит, чтобы изменения вступили в силу
    COMMIT

Открываем PPTP порт 1723:

    ufw allow 1723

Перезапустите ufw:

    ufw disable
    ufw enable

## Запуск сервера

Для запуска сервера PPTP, запустите службу `pptpd.service`.

## Решение проблем

Информация о решении проблем со службами доступна на странице Systemd (Русский)#Решение проблем.

### Ошибка 619 на стороне клиента

Найдите и удалите (или закомментируйте) опцию `logwtmp` в файле `/etc/pptpd.conf`. С включенной опцией используется wtmp для записи лога подключений и отключений клиента.

### pptpd[xxxxx]: Long config file line ignored

Добавьте пустую строку в конец файла `/etc/pptpd.conf`.[1]

### ppp0: ppp: compressor dropped pkt

Если при подключении клиента выводится это сообщение, добавьте скрипт `/etc/ppp/ip-up.d/mppefixmtu.sh` со следующим содержимым:

    #!/bin/sh
    CURRENT_MTU="`ip link show $1 | grep -Po '(?<=mtu )([0-9]+)'`"
    FIXED_MTU="`expr $CURRENT_MTU + 4`"
    ip link set $1 mtu $FIXED_MTU

После чего не забудьте сделать его исполняемым:

    # chmod 755 /etc/ppp/ip-up.d/mppefixmtu.sh

Смотрите также отчет об ошибке: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=330973.

Category:

- Virtual Private Network (Русский)