Устанавливаем PPTP сервер:

sudo apt install pptpd

Редактируем файл конфигурации:

sudo nano /etc/pptpd.conf

В нём находим или исправляем имеющиеся строчки:

option /etc/ppp/pptpd-options
bcrelay eth0
logwtmp
localip 10.1.0.1
remoteip 10.1.0.2-255

Редактируем следующий конфиг:

sudo nano /etc/ppp/pptpd-options

В нём находим или исправляем имеющиеся строчки:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128


#Google #1:
ms-dns 8.8.8.8
#CloudFlare #1:
ms-dns 1.1.1.1
#Yandex #1:
ms-dns 77.88.8.8

#Google #2:
ms-dns 8.8.4.4
#CloudFlare #2:
ms-dns 1.0.0.1
#Yandex #1:
ms-dns 77.88.8.1


proxyarp
nodefaultroute
lock
nobsdcomp

Правим ещё один конфиг авторизации пользователей:

sudo nano /etc/ppp/chap-secrets

В нём настраиваем авторизацию:

client server secret IP addresses
username pptpd password *

где username — имя пользователя, pptpd — имя подключения, password — пароль (подробнее ), * — ip адрес

Например:

user007 pptpd MySimpePassword *

Снова правим очередной конфиг:

sudo nano /etc/ppp/ip-up

В нём добавляем в конец:

ifconfig $1 mtu 1492

Снова правим:

sudo nano /etc/sysctl.conf

В нем нужно раскомментировать строчку:

net.ipv4.ip_forward=1

Нижеуказанная команда внесет все изменения, которые содержатся в файле /etc/sysctl.conf:

sysctl — в BSD и Linux — утилита, предназначенная для управления параметрами ядра на лету

sysctl -p

Смотрим, через какой интерфейс в интернет смотрит сервер:

ifconfig

В моём случае eth0 (да и в большинстве других случаев, думаю, тоже).

И самое главное, в моём случае — правила iptables. PPTP работает через TCP-порт 1723, он должен быть открыт. Например:

sudo nano run-iptables.sh

В него вставляем:

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #eth0 -- название вашего внешнего сетевого интерфейса
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.1.0.0/24 -i ppp0 -j ACCEPT #подсеть, которая выставлена в /etc/pptpd.conf
iptables --append FORWARD --in-interface eth0 -j ACCEPT  #eth0 -- название вашего внешнего сетевого интерфейса 

узнать название внешнего сетевого интерфейса можно командой ifconfig (у него значение inet будет равняться вашему внешнему ip адресу, если вы не за натом, как бывает на amazon AWS и тп.)

Сохраняем, выходим.

chmod +x run-iptables.sh
./run-iptables.sh
service pptpd restart
rm ./run-iptables.sh

Добавляем автоматическую загрузку правил iptables как описано ниже:

Устанавливаем:
sudo apt install netfilter-persistent iptables-persistent

Правила хранятся в следующих файлах и применяются при загрузке операционной системы.
Для IPv4 используется файл:
/etc/iptables/rules.v4
Для IPv6 используется файл:
/etc/iptables/rules.v6 
 
Варианты использования:  service netfilter-persistent {start|restart|reload|force-reload|save|flush}

service netfilter-persistent {flush, force-reload, reload, restart, save, start}
 flush - очистить правила
 reload - загрузить из файлов
 save - сохранить в файлы

PPTP работает на порту 1723, и мы можем после этого быстро проверить, открыт ли он, выполнив на сервере:

netstat -an | grep 1723

Будет что-то вроде:

tcp   0   0   0.0.0.0:1723   0.0.0.0:*   LISTEN

Так же доступность открытого порта из интернета можно проверив при помощи командной строки в windows:

WIN+R

вписываем:
cmd

Жмем Enter

В командной строке вписываем:
telnet *.*.*.* 1723
где *.*.*.* -- ip вашего сервера.

В случае ошибки мы прочтем что-то вроде:
C:\User>telnet 1.2.3.4 1723
Подключение к 1.2.3.4…Не удалось открыть подключение к этому узлу, на порт 1723: Сбой подключения


Обязательно включаем автозагрузку pptpd сервера после перезагрузки ubuntu:
sudo systemctl enable pptpd

Дополнительно можно почитать в следующих статьях: