Настройка pptp сервера на Debian
Возникла необходимость настроить vpn сервер для доступа к локальной сети организации. В качестве vpn сервера я предпочитаю использовать openvp за ее гибкость, удобство и простоту настройки. Но в данном случае мне был нужен именно pptp сервер с возможностью автоматической передачи маршрутов клиентам. С последним пришлось немного повозиться.
Содержание:
- 1 Введение
- 2 Установка pptp сервера
- 3 Настраиваем dhcp сервер для раздачи маршрутов
- 4 Заключение
- 5 Дополнительные материалы по Debian
Введение
Сама по себе настройка pptp сервера на Debian очень проста не представляет никакой сложности. Все настраивается за 10 минут. Проблема здесь в другом. По-умолчанию, windows при подключении по pptp использует удаленный vpn сервер в качестве шлюза по умолчанию. За это отвечает галка в настройках vpn соединения «Использовать основной шлюз в удаленной сети». При такой конфигурации весь трафик компьютера пользователя идет через vpn сервер. Это очень неудобно, да и не нужно. Эту настройку обычно отключают.
Когда ее отключаешь, pptp клиент ничего не знает о маршрутах в удаленный офис. Чтобы туда попасть, маршруты нужно прописывать вручную, например так:
route add 192.168.0.0 mask 255.255.255.0 192.168.10.1
192.168.0.0 | Сеть удаленного офиса. |
192.168.10.1 | Адрес vpn сервера |
Этот маршрут нужно либо в командной строке прописывать, либо bat файл сделать и запускать. И то и другое неудобно, так как пользователю нужно выполнять дополнительные действия. В openvpn этот вопрос решается очень просто. Там можно на уровне сервера задать любые настройки пользователя, в том числе и маршруты. Они будут передаваться после подключения openvpn клиента. В pptp так сделать нельзя, он это не умеет. Вместо него передать маршруты может dhcp сервер, его для этого нужно специальным образом настроить. Этим мы и займемся.
Установка pptp сервера
Подразумеваю, что у вас установлен и настроен сервер. Если это не так, то воспользуйтесь моими материалами по установке и настройке debian сервера.
Сначала установим pptp сервер:
# apt-get install pptpd
Рисуем следующий конфиг /etc/pptpd.conf:
# mcedit /etc/pptpd.conf
option /etc/ppp/pptpd-options
logwtmp
bcrelay eth1:1
localip 192.168.10.1
remoteip 192.168.10.30-50
eth1:1 | Виртуальный интерфейс. Нужен для передачи dhcp параметров клиентам pptp. |
192.168.10.1 | IP адрес pptp сервера в vpn сети |
192.168.10.30-50 | Диапазон адресов, которые будут назначены pptp пользователям в vpn сети |
Редактируем файл с дополнительными параметрами /etc/ppp/options:
# mcedit /etc/ppp/options
ms-dns 77.88.8.1
ms-dns 8.8.4.4
require-mschap-v2
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 10
lcp-echo-failure 100
noipx
nodefaultroute
Не буду подробно описывать параметры, в интернете есть описание. Обращаю внимание на proxyarp, без него не будет работать задуманная схема, и на nodefaultroute. Если вам иногда нужно ставить пользователям vpn сервер в качестве шлюза по-умолчанию, закомментируйте этот параметр. Отключить шлюз можно будет вручную на клиенте.
Дальше создаем учетки для подключения в файле /etc/ppp/chap-secrets:
# mcedit /etc/ppp/chap-secrets
user-01 pptpd passw51 192.168.10.41
user-02 pptpd passw88 192.168.10.42
user-03 pptpd passw59 192.168.10.43
user-04 pptpd passw27 192.168.10.44
Первый столбец — имя пользователя, второй — тип сервера, он всегда один и тот же, третий — пароль, четвертый — ip адрес в vpn сети, который будет назначен клиенту. Если его явно не указать, то ему будет назначен первый свободный из диапазона remoteip в pptpd.conf.
На этом настройка непосредственно pptp сервера закончена. Им можно пользоваться, но маршруты пользователям передаваться не будут.
Настраиваем dhcp сервер для раздачи маршрутов
У меня на сервере уже был настроен isc-dhcp-server, поэтому я использовал именно его. Но можно воспользоваться и dnsmasq. Я приведу пример с dhcpd. Если у вас его еще нет, то устанавливайте командой:
# apt-get install isc-dhcp-server
Рисуем следующий конфиг /etc/dhcp/dhcpd.conf:
# mcedit /etc/dhcp/dhcpd.conf
deny unknown-clients;
ddns-update-style none;
option domain-name "office";
option domain-name-servers 77.88.8.8, 8.8.4.4;
default-lease-time 604800;
max-lease-time 864001;
log-facility local7;
local-address 192.168.0.1;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
authoritative;
allow unknown-clients;
option netbios-name-servers 192.168.0.1;
option domain-name-servers 77.88.8.8, 8.8.4.4;
option domain-name "debian.office";
option broadcast-address 192.168.0.255;
range 192.168.0.150 192.168.0.199;
}
option ms-classless-static-routes code 249 = array of unsigned integer 8;
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
subnet 192.168.10.0 netmask 255.255.255.0 {
option dhcp-server-identifier 192.168.10.1;
authoritative;
range 192.168.10.51 192.168.10.99;
option ms-classless-static-routes 24, 192,168,0, 192, 168, 10, 1;
option rfc3442-classless-static-routes 24, 192,168,0, 192, 168, 10, 1;
option routers 192.168.10.1;
}
Я тут не разбирался, что и зачем настроено именно так. Сервер настраивал не я, он мне достался в наследство. Мне нужно было только грамотно настроить pptpd с раздачей маршрутов. Поэтому я не расписываю все от и до, а просто делюсь рабочим конфигом, который сейчас у меня работает.
Подсеть 192.168.10.0 и 2 строчки с options перед ней это то, что я добавил для раздачи маршрутов pptp клиентам в vpn подсеть.
Теперь создадим виртуальный интерфейс, добавив в самый конец конфигурационного файла сети:
# mcedit /etc/network/interfaces
auto eth1:1
iface eth1:1 inet static
address 192.168.10.1
netmask 255.255.255.0
О настройке 2-х ip адресов на одном интерфейсе можно подробно прочитать в статье — настройка сети в debian. В моем случае eth1 это интерфейс, который смотрит в локальную сеть, доступ к которой мы организуем с помощью vpn.
Перезапускаем сеть для применения настроек:
# service networking restart
По сути все готово. Запускаем pptpd и dhcpd и проверяем.
# service isc-dhcp-server restart
# service pptpd restart
У меня почему-то команда pptpd restart отрабатывает с ошибкой и не перезапускает демон. Приходится запускать вручную:
# service pptpd start
Проверяем работу клиента windows. Список маршрутов до vpn подключения:
После:
Вот пример такой же конфигурации для dnsmasq:
listen-address=192.168.10.1
dhcp-range=vpn,192.168.10.50,192.168.10.99,255.255.255.0,1h
dhcp-option=tag:vpn,vendor:MSFT,2,1i
dhcp-option=tag:vpn,249,192.168.0.0/24,192.168.10.1
dhcp-option=tag:vpn,121,192.168.0.0/24,192.168.10.1
Нашел, пока разбирался с вопросом. У себя не проверял, так как решил все на одном dhcp сервере делать, который уже был.
Заключение
Немного сложно реализуется функционал, который доступен в openvpn из коробки без дополнительных настроек. Я поэтому и не очень люблю с pptp возиться, после openvp он мне кажется не таким удобным. Но иногда приходится и его настраивать. К примеру, микротики, к сожалению, так и не научились работать с openvpn по udp, приходится использовать pptp. Да и встроенный в windows клиент тоже добавляет удобство.
Я немного повозился, поразбирался, прежде чем у меня получилось настроить рабочий вариант. Ключевым моментом оказался виртуальный интерфейс eth1:1, который я создал для pptp подсети. Без него у меня не работала передача маршрута.
- Настройка syslog-ng для централизованного сбора логов
- Спам запросов к al_profileEdit.php на веб сервере
- Не работает http/2 на nginx в chrome
- Установка Asterisk 13 на Debian 8
- Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7
- Обновление Debian 8 Jessie до 9 Stretch
- Как скачать и установить Debian 9 Stretch
- Ввод CentOS 7 в домен Active Directory и авторизация по SSH доменных пользователей
- Установка и настройка VestaCP — бесплатной панели управления хостингом
- Бэкап и перенос linux (centos, debian, ubuntu) сервера с помощью Veeam Agent for Linux