PPTP server (Русский)

From ArchWiki
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.
Состояние перевода: На этой странице представлен перевод статьи 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.