Построение VPN на базе Mandriva Linux 2007 и PoPToP

Пример построения виртуальной частной сети (VPN) с сервером PoPToP на базе Mandriva Linux 2007.



    Сервер – Mandriva Linux 2007, ядро 2.6.17.  Имеет две сетевых карты, одна – подключение к Интернет (eth1, IP=85.140.0.1), вторая – к локальной сети (eth0, IP=192.168.0.158).  

 Локальная сеть  192.168.0.0/24,  DNS сервер IP=192.168.0.9, WINS сервер IP=192.168.0.9

Для организации VPN, в данном случае, применяется туннельный протокол точка-точка (PPTP),  использующий методы проверки подлинности на уровне пользователей протокола Point-to-Point Protocol (PPP) и методы шифрования данных Microsoft Point-to-Point Encryption (MPPE).
Для аутентификации используется протокол MS-CHAP V2 (Microsoft Challenge Handshake Authentication Protocol версии 2).
Клиентские рабочие станции  на базе  ОС Win2k/XP
Клиентам VPN выдаются адреса из диапазона 192.168.0.220-192.168.0.230.

Схема VPN

  В ядро версии 2.6.17 Linux Mandriva 2007 уже включена поддержка протоколов Microsoft MPPE и MPPC – поэтому никаких патчей не требуется .
Чтобы убедиться, что модуль mppe присутствует, воспользуемся командой:
modprobe –l | grep mppe

где
modprobe -l - выдаст список всех возможных подгружаемых модулей к ядру
| - передаст вывод предыдущей команды на вход следующей команде.
grep mppe - выберет из вывода предыдущей команды строки, содержащие mppe:

В результате, если все нормально, увидим:

/lib/modules/2.6.17-5mdv/kernel/drivers/net/ppp_mppe.ko.gz

 Для того, чтобы клиенты VPN могли получить доступ к локальной сети за VPN-сервером, включаем перенаправление IPv4-пакетов между сетевыми интерфейсами. Это проще всего сделать добавив в файл /etc/sysconfig/network строку:
FORWARD_IPV4=yes
И, кстати, заодно и строку  (если вы не используете протокол IP версии 6):
NETWORKING_IPV6=no
 Содержимое этого файла задает параметры скрипту запуска сети /etc/rc.d/init.d/network .  
Если по каким-либо причинам вам не подходит такой вариант перенаправления, воспользуйтесь

echo 1 >; /proc/sys/net/ipv4/ip_forward

Установка и настройка сервера.

    Для установки VPN сервера нам понадобятся пакеты ppp и pptpd.
Первый (ppp-2.4.3) входит в дистрибутив Mandriva Linux и может быть установлен с помощью rpmdrake.
Второй в дистрибутив не входит и может быть взят по ссылке с сайта poptop.org. На январь 2007 г. там имеются ссылки на :
текущую версию – 1.3.0 (current stable version), и экспериментальную версию - 1.3.2
Какую из них выбрать – решайте сами. Я экспериментальную версию испытывать не стал.


    Следующим шагом выполняем установку PoPToP – сервера:
Распакуем пакет pptpd-1.3.0.tar.gz
tar zxvf  pptpd-1.3.0.tar.gz

Переходим в полученный каталог :
cd pptpd-1.3.0
Конфигурируем под свои нужды
./configure –with-bcrelay
Параметр –with-bcrelay позволяет сконфигурировать сервер с использованием перенаправления broadcast – пакетов из локальной сети  к VPN-клиенту, что позволяет получить полноценную сеть, но увеличивает трафик.  По возможности, попробуйте обойтись без него. В моем случае, из-за наличия у клиента какой-то тупой программы, пришлось включить в конфигурацию bcrelay.
Далее, как обычно выполняем:
make
make install

   Теперь остается только подправить конфигурационные файлы etc/pptpd.conf и /etc/ppp/options.pptpd, а также файлы с именами и паролями пользователей VPN - /etc/ppp/chap-secrets
--------------------pptpd.conf-----------------------
###############################################################################
# $Id: pptpd.conf,v 1.8 2004/04/28 11:36:07 quozl Exp $
# # Sample Poptop configuration file /etc/pptpd.conf
# # Changes are effective when pptpd is restarted.
###############################################################################
# Указываем, где искать файл options.pppd
option /etc/ppp/options.pptpd
# TAG: debug
#
#debug
#
# TAG: stimeout
#     Таймаут в секундах на установление соединения. По умолчанию - 10
#
# stimeout 10
#
# TAG: noipparam
#       Параметры IP мы определяем сами
#      
#
#noipparam

# TAG: logwtmp
#Можно использовать для регистрации подключений и отключений клиентов в журнале
#/var/log/wtmp. Если используется, то нужно скопировать модуль pptpd-logwtmp.so из
#каталога /pptpd-1.3.0/plugins в каталог /var/lib/pptpd
# Для вывода данных журнала можно использовать
# utmpdump /var/log/wtmp | grep ppp
#logwtmp
#

# TAG: bcrelay < if >;
#     Перенаправление бродкастов с интерфейса LAN в туннель
#
bcrelay eth0

# TAG: localip
# TAG: remoteip
#     Определяет диапазон IP адресов на каждом конце туннеля.
#
#     Можно использовать единичные IP, разделенные запятой или диапазоны через “-“
#     или их комбинации
#
#           192.168.0.234,192.168.0.245-249,192.168.0.254
#
#     Нельзя:
#
#     1. использовать пробелы между запятыми и тире.
#     2. отсекать цифры в диапазонах , 234-8 –это неверно, должно быть 234-238
#     
# каждому клиенту желательно выделить свой IP.  Число подключений не может быть больше, чем
# число адресов в выделенном диапазоне IP.
#localip при подключении будет присваиваться ppp и может быть одним и тем же для всех #клиентов
#     
#
# В нашем случае:
localip     192.168.0.159
remoteip    192.168.0.220-253
# по умолчанию сервер слушает 1723/TCP порт на всех интерфейсах. Можно указать конкретный.
# В нашем случае - внешний
listen      85.140.0.1

-------------------------------------------------------конец pptpd.conf---------------------------------------




Файл /etc/ppp/options.pptpd:

###############################################################################
# $Id: options.pptpd,v 1.11 2005/12/29 01:21:09 quozl Exp $
#
# Sample Poptop PPP options file /etc/ppp/options.pptpd
# Options used by PPP when a connection arrives from a client.
# This file is pointed to by /etc/pptpd.conf option keyword.
# Changes are effective on the next connection. See "man pppd";.
#
# You are expected to change this file to suit your system.  As
# packaged, it requires PPP 2.4.2 and the kernel MPPE module.
###############################################################################


# Authentication

# Имя локальной системы (используется как второй элемент каждой записи
# пользователя в  /etc/ppp/chap-secrets  по умолчанию - pptpd
name myvpn

# включение данной функции позволяет отсечь имя домена при регистрации.
#
#chapms-strip-domain
#
# Протоколы аутентификации и шифрования
#Не используем PAP, CHAP, MSCHAP
refuse-pap
refuse-chap
refuse-mschap
# И спользуем MSCHAP v2
require-mschap-v2

# Используем MPPE 128 бит
mppe required,stateless,no40,no56
# Сетевые настройки
# использовать DNS сервер локальной сети на стороне клиента
# можно указать 2 IP
ms-dns 192.168.0.9
#ms-dns 10.0.0.2
# использовать WINS сервер локальной сети на стороне клиента
# можно указать 2 IP

ms-wins 192.168.0.9
#ms-wins 10.0.0.4

#Позволяет добавлять ARP-записи, связанные с IP клиента  
# и MAC- адресом локальной сетевой карты.
proxyarp

# Создавать lock-файл
lock

# Не использовать BSD-Compress compression
nobsdcomp

# Disable Van Jacobson compression
# (needed on some networks with Windows 9x/ME/XP clients, see posting to
# poptop-server on 14th April 2005 by Pawel Pokrywka and followups,
# http://marc.theaimsgroup.com/?t=111343175400006&r=1&w=2 )
novj
novjccomp

# turn off logging to stderr, since this may be redirected to pptpd,
# which may trigger a loopback
#nologfd

# put plugins here
# (putting them higher up may cause them to sent messages to the pty)


-------------------Конец файла-------------------------------



На начальном этапе проверки и настройки VPN-сервера удобно использовать запуск демона pptpd вручную, с использованием ключа –f:
pptpd –f
что позволит видеть на экране сообщения об ошибках.
Более подробную информацию можно получить из системного журнала  /var/log/messages.
tail -n 20 /var/log/messages – посмотреть последние 20 строк

Когда все заработает, можно будет создать скрипт  для автоматического запуска pptpd при загрузке системы.

Не забываем подгрузить модуль ядра ppp_mppe:
modprobe ppp_mppe
Проверить, загружен ли модуль можно с помощью команды lsmod (отобразить список загруженных модулей):
lsmod | grep ppp
Поскольку VPN сервер использует TCP порт 1723 и протокол GRE (протокол 47), нужно разрешить их прохождение через iptables:
iptables -A INPUT --protocol tcp --match tcp  --destination-port 1723 --jump ACCEPT
iptables -A INPUT --protocol 47 --jump ACCEPT

Если все нормально запускаем pptpd:
pptpd –f

И удаленные клиенты VPN должны без проблем подключаться к локальной сети.
    Для быстрой проверки возможности подключения к вашему VPN-серверу со стороны клиента можно воспользоваться командой telnet на порт 1723:
telnet 1723
Для примера - на компьютере клиента выдаем:
telnet 85.140.0.1 1723
Если вы правильно сконфигурировали ваш VPN-сервер и не ошиблись с правилами iptables, то должны подключиться к нему и увидеть пустой экран. Если же увидите сообщение о сбое подключения - проверьте, слушает ли сервер порт 1723, и разрешены ли подключения на него. Тем не менее, установление TCP-соединения между клиентом и сервером - это еще не все. Могут возникнуть проблемы с протоколом IP 47 (GRE), причиной которых может быть неправильная настройка брандмауэров, фильтры в сети провайдера, и даже неправильная настройка соединения на стороне клиента.



Создание VPN-подключения в Windows XP.

На стороне клиента используется стандартное программное обеспечение Windows.

    Пуск – Настройка – Панель управления – Сеть и подключение к Интернету – Сетевые подключения.
Откроется окно «Сетевые подключения».
В левой части окна выберите пункт «Создание нового подключения», после чего запустится «Мастер новых подключений»

Жмем «Далее». Выбираем «Подключить к сети на рабочем месте»

Создание VPN-подключения

Жмем «Далее». Выбираем «Подключение к виртуальной частной сети»:
Создание VPN-подключения
Жмем «Далее» и задаем имя подключения - MyVPN
Жмем «Далее» и указываем имя или IP VPN-сервера: 85.140.0.1


После завершения работы мастера, система выведет окно созданного подключения.
Прежде, чем вводить имя пользователя, пароль, и подключаться к MyVPN
ОБЯЗАТЕЛЬНО нажмите «Свойства»
Откроется окно свойств подключения, выбираем вкладку «Сеть»
Подсвечиваем  «Протокол Интернета (TCP/IP) и нажимаем кнопку «Свойства»
Свойства TCP/IP для VPN-подключения
Жмем кнопку «Дополнительно» и в открывшемся окне убираем  галочку поля «Использовать основной шлюз в удаленной сети»


Не использовать шлюз в удаленной сети


    В процессе использования сервера PoPToP для подключения удаленных клиентов Windows к виртуальной частной сети было замечено несколько непонятных проблем, связанных с подключением клиентов из сетей разных провайдеров. Один и тот же клиент мог прекрасно работать с сетью через одного провайдера, и не мог подключиться к ней через другого. При чем, это сопровождалось сообщением об ошибках с различными кодами, чаще всего - 619 и 734. Подключение с использованием telnet на порт 1723 сервера выполнялось, в журнале сервера были следующие записи:

Connect: ppp0 <--> /dev/pts/0
tcflush failed: Bad file descriptor
tcsetattr: Invalid argument (line 1025)
Exit.
GRE: read(fd=7,buffer=8058640,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
CTRL: PTY read or GRE write failed (pty,gre)=(7,8)

Иногда в журнале появлялось и такое:

LCP: timeout sending Config-Requests
Connection terminated.

Судя по всему, причина - невозможность согласования параметров обмена между клиентом и сервером с использованием Link Control Protocol (LCP). Предположить, что причина в плохом качестве канала передачи данных, конечно можно, но данные из статистики и журналов модемов этого не подтверждали, технология QoS, вроде бы, провайдером не использовалась, ошибок при приеме/передаче пакетов нет. Попытки общения с техподдержкой провайдера успехом не увенчались, поэтому пришлось разбираться с проблемой почти вслепую. Для начала, попробовали уменьшить значения MTU и MRU. К кардинальному изменению ситуации это не привело. Положительный эффект наблюдался только в случае изменения настроек подключения в Windows





Январь 2007г.

В начало страницы       |       На главную страницу


Hosted by uCoz