Как я поднимал PPTP‐сервер

Дело было вечером, делать было нечего…

Решил я поднять VPN сервер для личных нужд, начал рыться в интернетах в поиске информации на эту тему. Везде кричат OpenVPN, OpenVPN, ну и я сначала подумал что тоже его буду использовать, но меня таки отпугнула сложность настройки и использование сертификатов для авторизации. Ну и его нету по умолчанию ни в Windows, ни в MacOS, ни в Linux, ну, а на iOS так тем более. И тут я наткнулся на PPTP…

Бегло просмотрев информацию по нему, я понял, что это то, что мне нужно. И я приступил к настройке.

Первым делом, конечно же, нужно установить pptpd:

sudo apt-get install pptpd

После установки можно приступать к настройке:

nano /etc/pptpd.conf

В этом файле хранится только базовая информация, в частности, какую подсеть выделить для локальной vpn‐сети. Предположим, что шлюз у нас будет располагаться на адресе 10.10.10.1, а IP‐адреса клиентов будут в диапазоне 10.10.10.10–10.10.10.30, для этого нам необходимо добавить в конец файла следующее:

localip 10.10.10.1
remoteip 10.10.10.10-30

После этого можно сохранять файл и переходить к следующему этапу — редактированию /etc/ppp/pptpd‐options.

В этом файле нам понадобится только добавить dns‐сервера, дописав куда‐нибудь в конец:

ms-dns 8.8.8.8
ms-dns 8.8.4.4

Да, я не заморачивался с установкой и настройкой dnsmasq, ибо меня устраивает и такая работа.

Далее можно перейти к третьему шагу, настройке /etc/ppp/chap‐secrets. В этом файле хранятся логины, пароли и IP клиентов, и записи должны быть вида:

user * supersecretpassword 10.10.10.20
otheruser * password *

Первая указывает что пользователем с логином user и паролем supersecretpassword после подключения получит IP 10.10.10.20, а вторая запись — то что клиент otheruser получит IP который «придумает» pptp‐сервер (а может быть внутри него dhcp сервер спрятан?).

После всех этих действий перезапускаем демон:

service pptpd restart

И пытаемся подключиться, указав в качестве pptp‐сервера IP компьютера на котором установлен pptpd, а так же указываем логин/пароль который указали в chap‐secrets. Подключаемся… (тут мы отбрасываем все проблем с закрытыми портами, кривыми руками, прилётом инопланетян, и т.д.) и подключились. Подключения к компьютерам внутри vpn‐сети работает отлично, но… Но подключение к компьютерам вне сети — не работает вообще. Для того чтобы всё заработало, необходимо разрешить форвардинг пакетов следующими путями:

#раскомментировать строку "net.ipv4.ip_forward=1" или добавить эту строку и сохранить файл
sudo nano /etc/sysctl.conf
#и выполнить:
sysctl -p
#или выполнить:
echo 1 > /proc/sys/net/ipv4/ip_forward

А так же добавить правило в iptables:

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

где вместо wlan0 указать интерфейс, «который смотрит в интернет».

После всех этих действий можно сказать что VPN‐сеть поднята, и можно идти пить кофе.

P.S. Эта статья не описывает шифрование трафика, какие еще исключения добавлять в iptables, ибо кому это понадобится, тот сам загуглит.

comments powered by Disqus