Приспичило поднять 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!
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.