Пример построения виртуальной частной сети (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.
В ядро версии 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
###############################################################################
# $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
На стороне клиента используется стандартное программное обеспечение Windows.
Пуск – Настройка – Панель управления – Сеть и подключение к Интернету – Сетевые подключения.
Откроется окно «Сетевые подключения».
В левой части окна выберите пункт «Создание нового подключения», после чего запустится «Мастер новых подключений»
Жмем «Далее». Выбираем «Подключить к сети на рабочем месте»
Жмем «Далее». Выбираем «Подключение к виртуальной частной сети»:
Жмем «Далее» и задаем имя подключения — MyVPN
Жмем «Далее» и указываем имя или IP VPN-сервера: 85.140.0.1
После завершения работы мастера, система выведет окно созданного подключения.
Прежде, чем вводить имя пользователя, пароль, и подключаться к MyVPN
ОБЯЗАТЕЛЬНО нажмите «Свойства»
Откроется окно свойств подключения, выбираем вкладку «Сеть»
Подсвечиваем «Протокол Интернета (TCP/IP) и нажимаем кнопку «Свойства»
Жмем кнопку «Дополнительно» и в открывшемся окне убираем галочку поля «Использовать основной шлюз в удаленной сети»