Простой 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!

Опубликовано 30.03.2015 в 14:39 · Автор JTProg_ru · Ссылка
Рубрики: HOW-TO, Ubuntu, Рабочие моменты · Теги: , , , ,