PPTP server (Русский)
Point-to-Point Tunneling Protocol (PPTP) — метод реализации виртуальной частной сети. PPTP использует канал контроля над туннелями TCP и GRE для инкапсуляции PPP-пакетов.
Далее будет показано, как создать сервер PPTP в Arch.
Установка
Установите пакет 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
После чего сохраните новые правила 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.