RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:vpn_pptpd

Сервер PPTPD, VPN

/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"
# 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)

MTU

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

Мониторинг

Better than nothing

Munin

pptpd-monitor

Python скрипт для отображения статистики по VPN сессиям

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/vpn_pptpd.txt · Последнее изменение: 2016/12/07 13:15 — 127.0.0.1