Дело было вечером, делать было нечего…
Решил я поднять 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, ибо кому это понадобится, тот сам загуглит.