PPTP
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