Простой VPN-сервер на базе Ubuntu+pptpd

Приспичило поднять VPN-сервер, с которым смогли бы работать все устройства (Android, Windows) потому, что старый добрый VPN поднятый на базе Cisco работал исключительно через специальное приложение-клиент. Нам хотелось работать просто и без постороннего ПО, пусть даже и просто запускаемого на стороне клиента без всяких установок. Решение было найдено довольно быстро, а главное бесплатно.
Для основы сервера была выбрана Ubuntu Server 14.04 LTS, а в качестве демона VPN был выбран pptpd
. Процесс установки Ubuntu я описывать не буду потому, что это проще чем кажется. Все действия производились на виртуальной машине, в которой из плюшек было только наличие двух сетевых адаптеров, а все остальное на усмотрение. После установки и обновления системы приступаем к работе над VPN-сервером. Для начала установим все что нужно (на всякий случай: вы либо уже под рутом как и я, либо все делаете от рута через sudo). Установим pptpd:
apt-get install pptpdРазрешаем IP-forwarding. Для этого редактируем файл /etc/sysctl.conf и в нём либо расскоментируем, либо добавляем следующую строку, если таковая отсутствует:
net.ipv4.ip_forward = 1Для принятия изменений в терминале командуем:
sysctl -pПравим файл /etc/pptpd.conf и приводим его к следующему виду:
option /etc/ppp/pptpd-options
logwtmp
localip 172.16.10.1
remoteip 172.16.10.10-100Где localip — IP виртуального сетевого интерфейса ppp0. Не нужно прописывать сюда внешний IP сервера, или IP других сетевых интерфейсов сервера. remoteip — диапазон клиентских адресов в количестве девяносто (от 172.16.10.10 и до 172.16.10.100), а так же (через запятую) выделенные адреса (если таковые необходимы). В моём случае выделенный адрес один. Вы можете указать здесь любое приемлемое значение.
Например:
localip 172.16.10.1
remoteip 172.16.10.1-100В таком случае динамичные адреса, раздаваемые клиентам присутствуют в количестве ста штук и два адреса зарезервированы.
Далее редактируем файл /etc/ppp/chap-secrets:
user1 pptpd password "*"
user2 pptpd password "172.16.10.15"В файле у нас два пользователя user1 и user2, password — пароли пользователей, звёздочка в кавычках говорит о том, что user1 получит свободный IP из указанного в /etc/pptpd.conf диапозона, а за user2 закреплён выделенный адрес. Соблюдение синтаксиса обязательно.
Редактируем файл /etc/ppp/pptpd-options:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
noipx
mtu 1400
mru 1400Где ms-dns — DNS сети. Указаны публичные адреса Google, но можно выставить свои, если таковые имеются. MTU и MRU по умолчанию установлены в значение 1500. Если удалить эти две строки, то будет использоваться значение по умолчанию. В моём случае при значениях по умолчанию наблюдается большая потеря пакетов. То есть к этим строкам подход индивидуальный. Всё зависит от настроек клиентской стороны и от скорости соединения в целом.
Перезагружаем pptp сервер:
service pptpd restartПроверяем:
netstat -alpn | grep :1723Если получаем нечто похожее на то, что показано ниже, то всё работает как надо.
netstat -alpn | grep :1723
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 1756/pptpdСоздаём правила NAT для iptables:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-saveЕсли хотим, чтоб клиенты видели друг друга в локальной сети и могли обмениваться файлами, то прописываем следующие правила:
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPTСохраняем:
iptables-saveНа этом все! Profit!
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат , а так же подписывайся на канал .
О способах отблагодарить автора можно почитать на странице “Донаты ”.