PPTP server (Русский)

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

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

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

Важно: Протокол PPTP по своей сути небезопасен. Подробности смотрите на странице https://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.