====== Сервер PPTPD, VPN ======
{{tag>vpn pptpd mtu}}
/etc/pptpd.conf
option /etc/ppp/pptpd-options
logwtmp
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
/etc/ppp/pptpd-options, setup 128-bit MPPE with MS-CHAP v2
name pptpd
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
# for iOS device compatibility
nopcomp
noaccomp
mtu 1400
mru 1400
default-asyncmap
/etc/sysctl.conf
net.ipv4.ip_forward=1
setup iptables in /etc/rc.local and make it persist even after reboot
iptables -t nat -A POSTROUTING -j MASQUERADE
===== PPTPD с одним внешним адресом =====
Исходные данные: CentOS 6, 1 внешний IP
Задача: настроить pptpd для личного использования.
# yum install pptpd
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
/etc/ppp/ip-up
ifconfig $1 mtu 1492
pptpd.conf
[root@vpngw3 ~]# cat /etc/pptpd.conf
#start of custom file
logwtmp
option /etc/ppp/options.pptpd
#localip 185.72.246.227-229
localip 185.72.246.252
remoteip 192.168.246.227-229
###localip 192.168.246.1-254
###remoteip 185.72.246.227-229
listen 185.72.246.252
#end of custom file
debug
===== PPTPD с несколькими внешними адресами =====
Исходные данные: CentOS 5, X внешних IP
Задача: Каждому пользователю выдавать закрепленный за ним внешний IP
iptables -t nat -A POSTROUTING -s (IP)/24 -o eth0 -j SNAT --to-source (IP)
iptables -t nat -A POSTROUTING -s (IP)/24 -o eth0 -j SNAT --to-source (IP)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -m tcp -p tcp -—dport 1723 -j ACCEPT
**/etc/pptpd.conf**
1
**/etc/ppp/chap-secrets**
[root@vpngw3 ~]# cat /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addres
Alice * secret1 192.168.20.20
Bob * secret2 192.168.20.30
Carlos * secret3 192.168.20.40
Сеть
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:16:3E:DA:20:EF
IPADDR=185.72.246.252
NETMASK=255.255.255.0
ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-eth0:228
DEVICE=eth0:228
ONBOOT=yes
IPADDR=185.72.246.228
NETMASK=255.255.255.255
MTU=1400
/etc/sysconfig/network-scripts/ifcfg-eth0:229
DEVICE=eth0:229
ONBOOT=yes
IPADDR=185.72.246.229
NETMASK=255.255.255.255
MTU=1400
/etc/sysconfig/network-scripts/ifcfg-eth0:xyz
DEVICE=eth0:xyz
ONBOOT=yes
IPADDR=185.72.246.xyz
NETMASK=255.255.255.255
MTU=1400
**iptables**
iptables -t nat -A POSTROUTING -s 192.168.20.30 -j SNAT --to-source 185.72.246.x
iptables -t nat -A POSTROUTING -s 192.168.20.30 -j SNAT --to-source 185.72.246.y
iptables -t nat -A POSTROUTING -s 192.168.20.30 -j SNAT --to-source 185.72.246.z
/sbin/iptables -t nat -A POSTROUTING -s 10.45.0.0/24 -o eth0 -j SNAT --to-source PUBLIC_IP1
/sbin/iptables -t nat -A POSTROUTING -s 10.45.1.0/24 -o eth0 -j SNAT --to-source PUBLIC_IP2
===== Бонусы и плюшки
==== Убрать маршрут по-умолчанию ====
Опция ''nodefaultroute'' заставляет pppd не устанавливать маршрут по-умолчанию через VPN сервер.
В файл ''/etc/ppp/pptpd-options'' добавляем ''nodefaultroute''
Подключение VPN → Свойства → Сеть → Протокол интернета TCP/IP → Свойства → Дополнительно → Использовать основной шлюз удаленной сети (убрать галочку)
VPN connection → Properties → Networking → TCP/IPv4 → Properties → Advanced → Use default gateway on remote network
==== MTU ====
Часть сайтов у вас может отвечать на ping, но при этом в браузере они не открываются. WTF?! MTU!
//А помните был такой провайдер MTU Intel :)//
Правило Аркадия Паровозова должно (?) всё исправить
iptables -A FORWARD -i ppp+ -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Что делать если на сервере не изменяется размер MTU и остается равным 1396?
Через /etc/pptpd.conf и /etc/ppp/options.pptpd MTU не устанавливается.
Добавить в файл **/etc/ppp/ip-up.local**
ifconfig $1 mtu 1420
==== Как ограничить количество подключений для учетной записи (один логин один коннект) ====
Рабочий скрипт - http://poptop.sourceforge.net/dox/skwok/poptop_ads_howto_12.htm#oneconnection
Создаём два файла
''/etc/ppp/auth-up''
#!/bin/sh
# get the username/ppp line number from the parameters
PPPLINE=$1
USER=$2
# create the directory to keep pid files per user
mkdir -p /var/run/pptpd-users
# if there is a session already for this user, terminate the old one
if [ -f /var/run/pptpd-users/$USER ]; then
kill -HUP `cat /var/run/pptpd-users/$USER`
rm /var/run/pptpd-users/$USER
fi
# write down the username in the ppp line file
echo $USER > /var/run/pptpd-users/$PPPLINE.new
''/etc/ppp/ip-up.local''
#!/bin/sh
REALDEVICE=$1
# Get the username from the ppp line record file
USER=`cat /var/run/pptpd-users/$REALDEVICE.new`
# Copy the ppp line pid
cp "/var/run/$REALDEVICE.pid" /var/run/pptpd-users/$USER
# remove the ppp line record file
rm "/var/run/pptpd-users/$REALDEVICE.new"
* [[http://open-life.org/blog/1288.html|Описание опций /etc/pptpd.conf и /etc/ppp/options.pptpd]]
* https://sourceforge.net/p/poptop/mailman/message/20602020/
* http://tech.snathan.org/tech/pptp_vpn_routing
* [[https://habrahabr.ru/post/136871/|Еще несколько слов о Path MTU Discovery Black Hole]]
* [[http://www.znep.com/~marcs/mtu/|Path MTU Discovery and Filtering ICMP]]
* https://en.wikipedia.org/wiki/Path_MTU_Discovery
# Reset/Flush iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Flush end
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
# Allow localhost traffic
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o lo -m state --state NEW -j ACCEPT
# Allow server and internal network to go anyway
iptables -A INPUT -s 10.0.0.0/24 -m state --state NEW -j ACCEPT
iptables -A INPUT -s 199.101.100.10 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -m state --state NEW -j ACCEPT
# Allow ssh
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
$ uname -srv
Linux 2.6.18-407.el5 #1 SMP Wed Nov 11 08:12:41 EST 2015
$ cat /etc/redhat-release
CentOS release 5.11 (Final)
* http://open-life.org/blog/1288.html
* https://www.velocihost.net/clients/knowledgebase/12/Install-PPTP-VPN-Server-on-your-VPS.html
==== MTU ====
* http://linuxforum.ru/post/366683
* https://www.linux.org.ru/forum/admin/9872673
* http://www.opennet.ru/base/net/pppoe_mtu.txt.html
* https://lists.debian.org/debian-russian/2008/01/msg00504.html
==== Firewall ====
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
# Пропускать все пакеты с интерфейсов 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
#!/bin/bash
# hostwelt
# 23mar2016
# simple ruleset for pptpd
# reset iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# basic rules
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t mangle -A FORWARD -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o lo -m state --state NEW -j ACCEPT
#iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
##iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth0 -j TCPMSS --clamp-mss-to-pmtu
#iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 0:65535 -j TCPMSS --clamp-mss-to-pmtu -i ppp+
# vpn pool
# localip 192.168.170.241-249
# publicip 185.53.170.241-249
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.170.241 -j SNAT --to-source 185.53.170.241
iptables -t nat -A POSTROUTING -s 192.168.170.242 -j SNAT --to-source 185.53.170.242
iptables -t nat -A POSTROUTING -s 192.168.170.243 -j SNAT --to-source 185.53.170.243
iptables -t nat -A POSTROUTING -s 192.168.170.244 -j SNAT --to-source 185.53.170.244
iptables -t nat -A POSTROUTING -s 192.168.170.245 -j SNAT --to-source 185.53.170.245
iptables -t nat -A POSTROUTING -s 192.168.170.246 -j SNAT --to-source 185.53.170.246
iptables -t nat -A POSTROUTING -s 192.168.170.247 -j SNAT --to-source 185.53.170.247
iptables -t nat -A POSTROUTING -s 192.168.170.248 -j SNAT --to-source 185.53.170.248
iptables -t nat -A POSTROUTING -s 192.168.170.249 -j SNAT --to-source 185.53.170.249
=== 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
Ошибка: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=330973
=== pptpd[xxxxx]: Long config file line ignored ===
Добавляем пустую строку в конец файла ''/etc/pptpd.conf''
Ошибка: http://sourceforge.net/p/poptop/bugs/35/
===== FreeRADIUS =====
* http://bulbsoft.com/product/blissradius/details.html
* http://docs.whmcs.com/FreeRadius_Addon_Module
* https://github.com/secondimpression/whmcs-freeradius
* https://github.com/arch-lamp/freeradius-web-ui
* http://wiki.freeradius.org/guide/PopTop-HOWTO
* http://freehostinganswers.com/blog/how-to-install-your-own-vpn-server-in-5-mins-pptp-on-centos-redhat-and-ubuntu/
* http://metalcandy.ru/how-to-forge-centos/370-centos-5-configuring-the-pptp-server
* http://blog.secaserver.com/2011/10/install-vpn-pptp-server-centos-6/
* http://www.gaggl.com/2012/06/installing-poptop-pppd-vpn-serveron-centos-6/
* http://progger.ru/2011/01/iptables-i-vpn-47-protokol-i-619-oshibka/
* http://poptop.sourceforge.net/dox/gre-protocol-unavailable.phtml
* http://www.alsigned.ru/?p=805
*
* http://arm1.ru/blog/bystraya-nastrojka-vpn-servera-pptp-na-ubuntu-server
* http://websistent.com/setup-pptp-vpn-server-debian-ubuntu/
* https://www.zeitgeist.se/2013/11/26/mtu-woes-in-ipsec-tunnels-how-to-fix/
===== Мониторинг =====
Better than nothing
==== Munin ====
http://bibabox.fr/munin-pptp-plugin/
==== pptpd-monitor ====
[[https://github.com/boukeversteegh/pptpd-monitor|Python скрипт]] для отображения статистики по VPN сессиям