====== Сервер 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 сессиям