Думаю уже все сталкивались или по крайней мере слышали про виртуальные частный сети, VPN (Virtual Private Network). Под виртуальными частными сетями подразумевается создание логической сети поверх другой, уже существующей. При этом созданная логическая сеть использует в качестве среды передачи данных уже существующие сети. При таком подходе протокол, используемый для создания частных сетей, инкапсулирует, т.е. вставляет, свои пакеты, в пакеты того протокола, который применяется в уже существующих сетях. Немного запутанно, неправда ли? Теперь более понятным языком. В качестве протокола уже существующий сети пусть будет выступать наиболее широко используемый сегодня протокол IP (Internet Protocol – протокол сети Интернет). Тогда схема инкапсуляции будет выглядеть следующим образом:
Для создания виртуальной сети чаще всего используется протокол PPTP (Point-to-Point Tunneling Protocol – туннельный протокол типа точка-точка). В качестве примера возьмём простой случай, когда данные протокола IP, передаются по сети Ethernet. Тогда инкапсуляция будет выглядеть следующим образом:
Но и это ещё не всё. Дело в том, что данные, чаще всего передаются по виртуальнымсетям, опять же по протоколу IP. Получается этакий многослойный пирог:
Именно такая технология чаще всего используется для организации виртуального защищённого канала. Однако такой подход не всегда является оптимальным, и вот почему. Предположим, что нам надо создать виртуальную сеть между устройствами находящимися в одной и той же сети Ethernet, а так к стати говоря, чаще всего и бывает. Тогда, я думаю, вы вполне со мной согласитесь, что развёртывать сеть IP, по верх которой будет работать ещё одна такая же сеть не вполне разумно. Вполне очевидно, что в данном случае, оптимально развёртывать виртуальную сеть сразу по верх сети Ethernet, уменьшив тем самым число инкапсуляций одного протокола в другой. Вот тут нам на помощь и приходит протокол PPPoE (Point-to-Point Protocol over Ethernet) - сетевой протокол передачи кадров PPP через Ethernet. Этот протокол использует в качестве переносчика своей информации сеть Ethernet. Именно на этом уровне будет осуществляться шифрование данных, естественно при условие, что всё оборудование поддерживает требуемые алгоритмы шифровки. Таким образом, из нашего многослойного “пирога”, исчезает один абсолютно не нужный, в данном случае, уровень IP, и картина приобретает следующий вид:
Теперь перейдём от теории к делу, и посмотрим, как настроить PPPoE сервер под управлением Linux. В качестве демонстрационной платформы будет выступать сервер под управлением Fedora Core 8.0, которая является одним из самых распространённых дистрибутивов Linux. Для настройки нам понадобиться последние версии ppp и pppoe. На момент написания это ppp 2.4.4, скачать который можно здесь: ftp://ftp.samba.org/pub/ppp/ , и rp-pppoe 3.8 который можно получить по адресу: http://www.roaringpenguin.com/products/pppoe. Однако перед тем как описывать процесс установки необходимо сделать небольшое отступление. Дело в том, что на момент написания данной статьи на всех системах от компании Red Hat, pppoe отказывался правильно функционировать в режиме демона (по поводу kernel mode ничего сказать не могу, потому как не пробовал). Ошибка кроется в демоне ppp, который при установлении соединения по протоколу pppoe отказывается посылать ответы на запросы LCP Config Request, тем самым приводя к “зависанию” соединения на этапе проверки имени пользователя и пароля. При этом в логах, которые находятся в /var/log/messages можно наблюдать такие ошибки:
Jan 30 03:24:51 Dark-server pppd[1979]: LCP: timeout sending Config-Requests Jan 30 03:24:51 Dark-server pppd[1979]: Connection terminated. Jan 30 03:24:51 Dark-server pppd[1979]: Modem hangup
Для устранения данной ошибки необходимо исправить файл main.c из комплекта pppd. После чего ppp надо заново откомпилировать и установить. Итак приступим. Загружаем ppp 2.4.4 , распаковываем, заходим в поддиректорию pppd, правим файл main.c (формат patch):
Практически во всех дистрибутивах Linux, демон ppp уже собран по умолчанию, и по этому его необходимо заменить исправленной версией. Для этого, выясним где располагается старая версия, дав команду:
which pppd pppd: /usr/sbin/pppd
Мы видим, что старая версия находится в /usr/sbin/ Далее, всё довольно обычно, как и при установке всех программ из исходных текстов. Запускаем скрипт конфигурации ppp, указывая параметр “prefix”,имея в виду, что установка должна выполняться, заменяя предыдущую версию. Компилируем, устанавливаем:
./configure —prefix=/usr make make install
На этом установка новой версии ppp завершена. И можно приступать к установки rp-pppoe. Тут всё довольно тривиально и обычно. Загружаем rp-pppoe, распаковываем, запускаем скрипт установки: ./go Если не будет ни каких ошибок, то на этом установка завершена. Далее необходимо отредактировать файл опций /etc/ppp/pppoe-server-options. Это самый обычный файл конфигурации ppp. Вот пример такого файла, который работает у меня:
Далее необходимо завести учётные записи для устройств, которым будет разрешен доступ к серверу, а правильнее сказать к нашей виртуальной защищённой сети. Учётные записи находятся в файлах: /etc/ppp/pap-secrets и /etc/ppp/chap-secrets. Не вдаваясь в подробности, могу сказать, что эти файлы должны быть одинаковы по содержанию. Приведу пример такого файла:
# Secrets for authentication using CHAP # client server secret IP addresses "testlogin" * "testpass" *
Т.е. именем для доступа в нашу защищённую сеть будет “testlogin” а паролем “testpass”. Ну вот практически и всё, теперь остаётся только запустить сервер, выполнив следующую команду: pppoe-server -I eth0 -L 192.168.0.1 -R 192.168.0.2
Где: eth0 — имя интерфейса на котором запущен сервер, 192.168.0.1- IP адрес сервера, 192.168.0.2 — начальный IP адрес выдаваемый устройствам. Всё, PPPoE сервер запущен и работает. Теперь к нему можно подсоединяться, используя в качестве имени пользователя “testlogin” а пароля “testpass”. Проконтролировать работу сервера, после подключения к нему устройства, можно набрав следующую команду:
Среди запущенных интерфейсов можно увидеть интерфейс ppp0, который и является интерфейсом для устройства только что созданной нами сети VPN. Вот собственно и всё. Желаю успехов. C.Ю. Гулинов 2008 г. Перепечатка без согласия автора запрещена.