PPTP

Материал из Webko Wiki
Версия от 20:37, 12 мая 2015; Sol (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

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

Установка и настройка

yum install pptpd

Настройка производится в файле /etc/pptpd.conf. Пример:

vim /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
listen xxx.xxx.xxx.xxx

После чего отредактируйте файл опций /etc/ppp/options.pptpd. Пример:

vim /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/chap-secrets:

vim /etc/ppp/chap-secrets
# <Имя> <Название сервера> <Пароль> <IP-адреса>
user2    pptpd    123    *

Теперь вы сможете авторизоваться, используя имя "user2" и пароль "123" под любым IP-адресом. Далее необходимо включить форвардинг пакетов:

vim /etc/sysctl.d/99-sysctl.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 для присвоения каждому клиенту белого ip (NAT)

Для такой настройки требуются зарание настроеные сетевые интерфейсы с белыми ip.

С начала мы метим пакеты с внутренних ip назначеных клиентам в /etc/ppp/chap-secrets а потом уже при помощи NAT выворвчиваем эти пакеты на внешние (белые) интерфейсы.

Вот мой конфиг /etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 -j DROP
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 4949 -j ACCEPT -m comment --comment "munin"
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT -m comment --comment "ssh from all network"
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 1723 -j ACCEPT -m comment --comment "pptp server"
-A INPUT -m hashlimit --hashlimit-name rejects --hashlimit-upto 20/min --hashlimit-mode srcip -j REJECT --reject-with icmp-admin-prohibited -m comment --comment "reject unknown traffic"
-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i ppp+ -m conntrack --ctstate NEW -j ACCEPT
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
#-A FORWARD -s 192.168.0.93 -j MARK --set-mark 93
-A FORWARD -s 192.168.0.112 -j MARK --set-mark 112
-A FORWARD -s 192.168.0.113 -j MARK --set-mark 113
-A FORWARD -s 192.168.0.114 -j MARK --set-mark 114   # метим пакеты
-A FORWARD -s 192.168.0.115 -j MARK --set-mark 115
-A FORWARD -s 192.168.0.116 -j MARK --set-mark 116
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
#-A POSTROUTING -m mark --mark 93 -j SNAT --to-source  2.246.112.93
-A POSTROUTING -m mark --mark 112 -j SNAT --to-source  2.246.112.112
-A POSTROUTING -m mark --mark 113 -j SNAT --to-source  2.246.112.113
-A POSTROUTING -m mark --mark 114 -j SNAT --to-source  2.246.112.114 # выворачиваем их
-A POSTROUTING -m mark --mark 115 -j SNAT --to-source  2.246.112.115
-A POSTROUTING -m mark --mark 116 -j SNAT --to-source  2.246.112.116
-A POSTROUTING -o eth0 ! -s 2.246.112.93/32 -j MASQUERADE --random   # не маскарадим трафик с нащего интерфейса
COMMIT
*raw
:PREROUTING ACCEPT [6:456]
:OUTPUT ACCEPT [3:684]
COMMIT

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

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

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

pptpd[xxxxx]: Long config file line ignored

Добавьте пустую строку в конец файла /etc/pptpd.conf.

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

или добавить в /etc/ppp/ip-up

ifconfig $1 mtu 1400