Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи PPTP server. Дата последней синхронизации: 17 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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-адресом.

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

    /etc/sysctl.d/30-ipforward.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

Примечание: По необходимости замените "eth0" на реальное название используемого ethernet-интерфейса.

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

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

Чтобы файл `/etc/iptables/iptables.rules` применялся автоматически при загрузке системы, включите службу `iptables.service`.

    # systemctl enable iptables.service

Больше информации доступно на странице 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

Разрешаем пакеты GRE (протокол 47) в `/etc/ufw/before.rules`, найдите строку: `# drop INVALID packets` и добавьте правило:

    /etc/ufw/before.rules

    # drop INVALID packets (logs these in loglevel medium and higher)
    -A ufw-before-input -p 47 -i $iface -j ACCEPT
    -A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
    -A ufw-before-input -m conntrack --ctstate INVALID -j DROP

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

    ufw allow 1723

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

    ufw disable
    ufw enable

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

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

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

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

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

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

    # logwtmp

### 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 (Русский)