PPTP server (Русский)

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