Блог им. LehikНастройка vpn в Debian на основе pptpd

Я как-то уже писал про настройку VPN-сервера в Debian на основе OpenVPN, но т.к. у меня до конца не получилось ее реализовать(так и не смог заставить windows-клиентов подключаться, хотя в связке debian-debian vpn работал), я нашел другой способ — через pptp.
Итак начнем.(Основывался на статье )
Сервер Debian 5.0.4. Все делаем из под root'а.
1.
aptitude install pptpd

2. Редактируем /etc/pptpd.conf
option /etc/ppp/pptpd-options
stimeout 3              #Какая-то задержка...
localip 192.168.100.x   #Устанавливаем локальный ip-адрес,
                        #который будет у виртуального интерфейса ppp0, можно указать диапазон
remoteip 192.168.100.(x+1)-(x+n)  #Устанавливаем диапазон локальных ip-адресов,
                        #которые будут назначаться клиентам, можно один адрес

Как я понял, адреса должны быть в той же сети что и все компы, чтоб клиент мог к ним обращаться, но не должны совпадать с существующими, это я думаю и так понятно.
3. В /etc/ppp/chap-secrets задаем логин и пароль для авторизации
# Secrets for authentication using CHAP
# client server secret IP address
user pptpd 12345 *

1-ое поле user — это имя пользователя
2-ое pptpd — я так понял это метка, которая объявляется в следующем конфиге
3-е 12345 — пароль
4-е * — ip-адрес, который будет присвоен клиенты с данным именем и паролем, если указана "*" то адрес будет выбран из указанного выше диапазона, но можно указать конкретный адрес из того же диапазона.
4. Редактируем /etc/ppp/pptpd-options
auth
lock
debug                  #Включить отладку
name pptpd             #Метка
nodefaultroute
refuse-pap             #refuse - запрещает/отключает использовать шифрование
refuse-chap
refuse-mschap
require-mschap-v2      #Вроде виды шифрования, chap используют windows-клиенты
require-mppe-128
proxyarp

Если кто-то из читателей знает описание опций которые здесь не раскрыты, буду признателен если напишите их в комментариях, а я их добавлю в текст
5.В файл /etc/modules.conf советуют добавить строчку:
alias ppp-compress-18 ppp_mppe_mppc

но я ничего не добавлял.
6. Если у кого-то не включен форвардинг необходимо включить
echo 1 > /proc/sys/net/ipv4/ip_forward

и поместить в скрипт, который будет добавлять автоматом при загрузке системы, это я описывать не буду, т.к. я это делал в другом месте, по-моему при настройке iptables. В ссылке выше, автор дает пример, куда можно поместить.
На этом настройка сервера завершена. Перезапускаем ppptpd:
/etc/init.d/pptpd restart


Кому-то возможно придется настраивать firewall, т.к. появится новый интерфейс, скорее всего ppp0

Настройка windows-клиента.
Я опишу это на примере windows 7.
Открываем Центр управления сетями о общим доступом — Настройка нового подключения — Подключение к рабочему месту — подключение с помощью VPN. Вводим ip-адрес(внешний, если подключаетесь через интернет) или DNS-имя компьютера и любое имя для названия подключения. Вводите имя и пароль который указали в конфиге выше(в /etc/ppp/chap-secrets). Ну вот в принципе и все.

P.S. Проблема с которой я столкнулся при подключении windows-клиентом, это что он портит маршруты, которые у вас есть если вы подключаетесь из работающей сети (например с работы) в другую (в удаленный офис). Чтоб старые маршруты остались нетронутыми, а только появился маршрут в новую сеть заходим в свойства VPN-подключения — вкладка сеть — свойства протокола Интернета TCP/IP v.4 — Дополнительно — На вкладке Параметры IP убираем галочку «Использовать основной шлюз в удаленной сети». Отключаем VPN-соединение и подключаем вновь. Все, теперь у Вас нормальные маршруты.
P.P.S. Еще одна проблема при подключении из windows — Иногда не может подключиться с первого раза, приходится несколько раз нажимать «Повторить» (иногда много раз :) )

Настройка linux-клиента. На примере Debian
1. Устанавливаем ppp-клиента.
aptitude install pptp-linux

2. В /etc/ppp/chap-secrets (или mschap-secrets, если используется шифрование mschap/mschap-v2)задаем логин и пароль для авторизации (как на сервере)
# Secrets for authentication using CHAP
# client server secret IP address
user pptp 12345 *

3. Создаем файл /etc/ppp/options.pptp.vpn. Вместо слова vpn может использоваться любое слово, которое вам удобно, это будет имя подключения, оно будет еще использоваться в следующих конфигах. Пишем в него:
lock
noauth
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
require-mppe-128
nobsdcomp              #Не использовать сжатие (почему незнаю)
nodeflate
persist                #Возобновлять подключение при разрыве

4. Создаем файл /etc/ppp/peers/vpn и пишем в него
pty "pptp <имя сервера или ip-адрес> --nolaunchpppd"
name логин             #имя пользователя из файла /etc/ppp/chap-secrets
remotename pptp
file /etc/ppp/options.pptp.vpn
ipparam vpn

5. При первом подключении можно использовать отладку для вывода сообщений. Делаем это следующей командой
pon vpn debug dump logfd 2 nodetach

Если будут ошибки, то подключение прервется, у меня сначала были, я их не понимал, но было видно что ругается на MPPE, после чего я проверил чтоб в конфигах и на сервере и на клиенте была строчка require-mppe-128, после чего все подключилось. Если ошибок нет, то вывод просто остановится. Можно будет запустить второй терминал и проверить командой ifconfig -a что появился сетевой интерфейс ppp0, а также проверить наличие маршрута через ppp0 командой route
Если все нормально то подключаться можно командой
pon vpn

а отключаться
poff vpn

Чтоб не было проблем с маршрутами (как я описывал в примере с windows-клиентом) нужно добавить маршрут вручную в подключенную сеть (у меня это сеть 192.168.0.0)
route add -net 192.168.0.0 netmask 255.255.255.192 dev ppp0

Если после добавления маршрута все работает нормально, машины из удаленной сети видны, то можно добавление этого маршрута автоматизировать. Для этого создайте файл /etc/ppp/ip-up.d/vpn со следующим содержимым
#!/bin/sh
route add -net 192.168.0.0 netmask 255.255.255.192 dev ppp0
exit 0

сделайте его исполняемым
chmod 755 /etc/ppp/ip-up.d/vpn


Все, теперь при запуске VPN'а у вас будет правильный маршрут. Ну вот на данный момент и все…

Бонус :) Описание опций файлов /etc/pptpd.conf и /etc/ppp/options.pptpd в моей следующей статье.
  • +10
  • Lehik
  • 02 сентября 2010, 11:05

Комментарии (10)

pptp плохой выбор. Непонятно как работает, нет стабильности, непонятно что с безопасностью. OpenVPN прекрасно работает, что не получилось им реализовать?
Не смог подключиться из windows :(
Детальнее опишите — подскажу. Покажите конфиг сервера и клиента.
Огромное спасибо! Но к сожалению я уже все конфиги погрохал :(. Но если Вы непротив, то я могу к Вам обратиться в следующий раз при какой-нибудь проблеме. Хотя ведь ничего не мешает поднять оба сервера. Можно попробовать еще раз. Может тогда пообщаемся в каком-нибудь более интерактивном режиме?
Интерактивно только за деньги. А так бесплатно и сразу для всех. Такие дела. Хорошая статья по OpenVpn тут. То что там FreeBSD не играет никакой роли. В Debian

apt-get install openvpn

И всё, дальше по статье (easy-rsa вроде идёт в том же пакете). Если конектите 2 сервака, то один просто может быть «клиент», то есть конфиги те же, что и для десктопного клиента. В логах обычно всё пишется, если траблы. В windows клиент может работать как прога в трее (по-умолчанию), так и сервисом (нужно галочки при инсталляции проставить). Разницы никакой, просто юзерам будет меньше надоедать.

Ещё по статье по ссылке указанной выше:
— параметр auth MD5 не указывайте, вытрите его вообще (тогда по дефолту будет работать sha1);
— юзайте стандартный порт (по памяти вроде 1194 udp);
— не забывайте открыть этот порт на фаерволах;
— могут быть ещё какие-то твики, от оригинала в статье, изучайте просто вопрос внимательней, что каждый параметр делает, их там немного;
— не забывайте отзывать сертификаты уволившихся людей ), мало ли.
Хорошо! Спасибо! Попробую.
Шифрование лучше отключать, я наблюдал с ним некоторые проблемы в работе. И да, согласен с kernelx, лучше использовать OpenVPN.
  • avatar
  • Gotik
  • 29 октября 2010, 18:14
  • #
  • 0
Проще настроить через vpnpptp: code.google.com/p/vpnpptp/
Пакет vpnpptp работает и в Debian, и в Ubuntu и много где еще.
Здравствуйте!

Установлен Debian.
На эту команду aptitude install pptpd консоль выдает сообщение:
166 packages upgraded, 213 newly installed, 25 to remove and 676 not upgraded.

Это так и должно быть или нет?
Такое ощущение что ты подключил на старую версию Дебиана репозиторий от нового и при установке он тебе обновит зависимые пакеты, но скорей-всего все сломается.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.