PPTP сервер на Debian 10

В интернете куча мануалов, как поднять PPTP сервер (туннель), но бывает много лишнего, либо наоборот не хватает чего для функционирования, в общем от части это будет копипаст, но все более менее четко работает с 8й версии дебиана.

  1. Установим pptp сервер выполнив команду apt-get install pptpd
  2. Отредактируем конфиг 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

На этом настройка полностью закончена

Записи созданы 119

Начните вводить, то что вы ищите выше и нажмите кнопку Enter для поиска. Нажмите кнопку ESC для отмены.

Вернуться наверх