В интернете куча мануалов, как поднять PPTP сервер (туннель), но бывает много лишнего, либо наоборот не хватает чего для функционирования, в общем от части это будет копипаст, но все более менее четко работает с 8й версии дебиана.
- Установим pptp сервер выполнив команду apt-get install pptpd
- Отредактируем конфиг pptp c помощью команды nano /etc/pptpd.conf (mcedit или кому как удобно), листаем в самый низ, и находим следующие строки:
# (Recommended)
#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245
# or
#localip 192.168.0.234-238,192.168.0.245
#remoteip 192.168.1.234-238,192.168.1.245
Раскомментируем строки localip и remoteip убрав символ # так-же можно изменить IP адрес, в конечном итоге получаем например:
localip 10.8.0.1
remoteip 10.8.0.2-238
3. Отредактируем файл с опциями nano /etc/ppp/pptpd-options все убираем и пишем:
name pptpd # имя туннеля
refuse-pap # отвергать авторизацию PAP
refuse-chap # отвергать авторизацию CHAP
refuse-mschap # отвергать авторизацию MSCHAP
require-mschap-v2 # требовать вторую версию авторизации MSCHAP
require-mppe-128 # требовать 128-битное шифрование
ms-dns 8.8.8.8 # адрес DNS-сервера, лучше указать IP VDS
#logfile /var/log/pptpd.log # куда писать логи
lock # ставить лочку
nobsdcomp # отключить компрессию bsd
proxyarp
novj
novjccomp
4. Создадим пользователей для нашего pptp сервера, отредактируем файл nano /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
Формат следующий имя пользователя имя сервера пароль IP адрес
Например:
user1 pptpd passuser1 10.8.0.2
либо:
user1 pptpd passuser1 *
в данном случае IP адрес пользователь будет получать динамически. pptpd — имя туннеля, которое мы указали выше в файле pptpd-options.
5. Настройка NAT
C VPN-сервером все, теперь надо сделать так, чтобы пакеты из нашей приватной сети могли попадать в интернет и обратно, для этого включаем форвардинг пакетов
5.1. Выполним команду sysctl net.ipv4.ip_forward=1 или echo 1 > /proc/sys/net/ipv4/ip_forward
Чтобы настройка сохранилась после перезагрузки, необходимо указать в файле nano /etc/sysctl.conf найти строку:
#net.ipv4.ip_forward=1
и раскомментировать убрав # получаем:
net.ipv4.ip_forward=1
5.2. Настраиваем трансляцию IP адресов для этого добавим в фаерфолл несколько правил/выполним команду
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
где 10.8.0.0/24 сеть нашего pptp сервера, а eth0 имя внешнего интерфейса сервера.
5.3. Скорее всего некоторые сайты не будут работать, из за проблем с MTU, для этого выполним команду/добавим правило:
iptables -t mangle -I FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —clamp-mss-to-pmtu
5.4. Чтобы все правила подгружались после перезагрузки, добавим их в файл nano /etc/rc.local:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will «exit 0» on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
iptables -t mangle -I FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —clamp-mss-to-pmtu
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
exit 0
6. Перезапускаем наш сервер командой /etc/init.d/pptpd restart создаем соединение на устройстве клиенте указав протокол PPTP с логином и паролем из chap-secrets, пробуем подключиться. Все должно работать.
6.1. При перезагрузке сервера в некоторых случаях pptpd не запускается, либо висит в непонятном состоянии, не стал заморачиваться, решил проблему банально, cron команду перезапуска при рестарте. Выполним команду crontab -e и добавим в конец файла:
@reboot /etc/init.d/pptpd restart
В конце обязательно поставить перевод строки (Enter) и сохранить изменения.
7. В последних версиях Debian выпилили файл rc.local, который позволяет выполнять произвольные скрипты при запуске системы. Данное решение очень удобно, поэтому запилим его обратно.
7.1. Создадим файл сервиса:
nano /etc/systemd/system/rc-local.service
Со следующим содержимым:
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
7.2. Создадим сам rc.local:
nano /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will «exit 0» on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
7.3. Добавим права на выполнение:
chmod +x /etc/rc.local
7.4. Добавим сервис в автозапуск:
systemctl enable rc-local
7.5. Запускаем сервис:
systemctl start rc-local
7.6 Смотрим состояние сервиса:
systemctl status rc-local
На этом настройка полностью закончена