ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Метки статьи: ‘vpn’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Вступление

Время от времени поднимается вопрос:

«А может ли Cisco выступать в качестве pptp-клиента?»

и, обычно, на него следует ответ: «Нет».

Однако, большинство IOS версий 12.2 или выше поддерживают это, если дана комманда service internal (она скрытая — по «?» не отображается, но работает) . После выполнения этой комманды в разделе vpdn group в секции request-dialin становятся доступны комманды rotary-group и pool-member.

Рабочая конфигурация на примере Cisco 827-V4 :

!
service internal
!

рекомендуется, подробности ниже — в «Ссылках»:
!
no ip gratuitous-arps
!
ip multicast-routing
!

Включаем VPN
!
vpdn enable
!
vpdn-group 1
request-dialin
protocol pptp
rotary-group 0

IP-адреса PPTP серверов:

initiate-to ip 1.1.1.1
initiate-to ip 2.2.2.2
!

Настройки Dialer0:
interface Dialer0

Уменьшение стандартного MTU:
mtu 1450

Получаем IP от PPTP сервера:
ip address negotiated

Источник сетевой активности, для автоустановления соединения, без использования дополнительных маршрутов:
ip pim dense-mode

Выставляем инкапсуляцию:
encapsulation ppp

Продолжаем настройку Dialer0:

dialer in-band
dialer idle-timeout 0
dialer string 123 ! Рекомендуется, но не используется
dialer vpdn
dialer-group 1
no cdp enable
ppp pfc local request
ppp pfc remote apply
ppp encrypt mppe auto
ppp chap hostname ВАШ_ЛОГИН
ppp chap password 0 ВАШ_ПАРОЛЬ
!
dialer-list 1 protocol ip permit

Маршруты до PPTP-серверов:
ip route 1.1.1.1 255.255.255.255 Ethernet0
ip route 2.2.2.2 255.255.255.255 Ethernet0

Маршрут по умолчанию через VPN:
ip route 0.0.0.0 0.0.0.0 Dialer0

После применения данной конфигурации у вас должен сразу подняться туннель:

Router#show ip interface brief
Interface                  IP-Address      OK? Method Status                Protocol
Ethernet0                  192.168.221.106 YES DHCP   up                    up
Dialer0                    10.255.0.1      YES IPCP   up                    up
Virtual-Access1            unassigned      YES unset  up                    up

Подняться default роутинг:

Router#sh ip route
Gateway of last resort is 0.0.0.0 to network 0.0.0.0

     1.1.1.0/32 is subnetted, 1 subnets
S       1.1.1.1 [1/0] via 192.168.221.1
     10.0.0.0/32 is subnetted, 2 subnets
C       10.30.10.1 is directly connected, Dialer0
C       10.255.0.1 is directly connected, Dialer0
C    192.168.221.0/24 is directly connected, Ethernet0
S*   0.0.0.0/0 is directly connected, Dialer0

Ссылки:

P.S. Все команды в вышеприведенной конфигурации являются обязательными.
P.P.S. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

В данной статье рассматривается возможность использование MPD 5-й версии в качестве сервиса PPPoE на серверах FreeBSD.

Введение

Mpd — реализация multi-link PPP протокола для FreeBSD, основанная на netgraph(4). В его основу легли концепции скорости и гибкости настроек. Исходя из этих принципов настройка соединений происходит на пользовательском уровне (user land), в то время как передача данных является функцией ядра (kernel).

Mpd поддерживает множество типов соединений:

  • модем — для соединения различных асинхронных последовательных соединений (asychronous serial connections), включая модем, ISDN адаптеры, и нуль-модемное соединение (null-modem). Mpd включает в себя скриптовый язык обработки данных основанный на событиях (event-driven scripting language) для установки типа модема, утановки соединения, авторизации и т.д.
  • pptp — соединение точка-точка через Internet по протоколу PPTP (Point-to-Point Tunnelling Protocol). Данный протокол поддерживается большинством производителей операционных систем и оборудования.
  • l2tp — соединение через Internet используя протокол 2-го уровня L2TP (Layer Two Tunnelling Protocol). L2TP является дальнейшей реализацией протокола PPTP и также поддерживается современными производителями операционных систем и оборудования.
  • pppoe — соединение поверх Ethernet по протоколу PPP (PPP-over-Ethernet). Данный протокол в основном используется DSL провайдерами.
  • tcp — тунелирование PPP сессии поверх TCP соединения. Кодирование фреймов (Frames) происходит по аналогии с асинхронным соедиениеним (asychronous serial connections).
  • udp — туннелирование PPP сессии поверх UDP соединения. Каждый фрейм инкапсулируется в пакет с UDP датаграммой (UDP datagram packet).
  • ng — соединение различных устройств, поддерживаемых netgraph. Netgraph — система сетевых модулей уровня ядра, поддерживает синхронные последовательные соединения (synchronous serial connections), Cisco HDLC, Frame Relay, и многие другие протоколы.

MPD поддерживает некоторые реализации субпротоколов PPP и их расширений, таких как:

  • Multi-link PPP
  • PAP, CHAP, MS-CHAP и EAP автроризация
  • сжатие трафика (traffic compression (MPPC, Deflate, Predictor-1))
  • криптование трафика (traffic encryption (MPPE, DESE, DESE-bis))
  • IPCP и IPV6CP параметры согласования

В зависимости от конфигурационных правил и параметров соединения, mpd может функционировать как обычный PPP клиент/сервер (client/server) или передавать пакеты без изменения другому хосту, используя поддерживаемый тип соединения, обеспечивая при этом LAC/PAC/TSA функциональность для построения распределенных сетей.

Mpd включает в себя следующие дополнительлные возможности:

  • поддержка IPv4 и IPv6.
  • управление по Telnet и HTTP.
  • различные типы авторизации и методы подсчета трафика (RADIUS, PAM, авторизация по скрипту, авторизация по файлу, …)
  • подсчет трафика по NetFlow
  • Network address translation (NAT)
  • Dial-on-demand с выключением по неактивности (idle timeout)
  • Динамическое управление соединением (Dynamic demand based link management (также известное как «rubber bandwidth»))
  • Функциональный язык написания скриптов для асинхронных последовательных соединений (synchronous serial ports)
  • Готовые скрипты для некоторых основных типов модемов и ISDN адаптеров
  • Интерфейс, независимый от типа устройств
  • Обширные возможности авторизации

Mpd изначально разрабатывался Whistle Communications, Inc. для ипользования во внутренней сети Whistle InterJet. В его основе лежит iij-ppp user-mode PPP код, сильно изменившийся до сего дня. Домашняя страница разработчиков Mpd в настоящее время хостится на сайте sourceforge.net MPD Project Page

Отличия от 4 версии:

  • Изменения структуры:
    • Устранены статические линки (static link) — реализация зависимостей бандла (bundle). Линки выбирает бандл, используя параметры согласования на сетевой стадии (NETWORK phase). Этим достигается простота и полная работоспособность клиента и мультифункциональность сервера. Также это дает возможность реализовать боелее сложные LAC, PAC и TSA настройки, чем было до 5 версии.
    • Внедрены шаблоны, основанные на динамическом создании линках/бандлах. Это позволило значительно сократить конфигурацию для серверов с большим количеством клиентов. Линк может автоматически создаваться входящим запросом (call request) от устройства или DoD/BoD запросом (Dial on Demand/Brake on Demand) из бандла. Бандл может автоматически создаваться при достижении сетевой стадии NETWORK phase.
    • Для упрощения объединена конфигурация физического и канального уровня, разделенных с верии 4.2.
  • Новые возможности:
    • PAM авторизация.
    • Добавлена поддержка динамического пула IP адресов.
    • Добавлена поддержка внешних скриптов авторизации ‘ext-acct’ как альтернатива ‘radius-acct’.
  • Изменения:
    • Значительные изменения в конфигурации комманд. Следует прочитать мануал и примеры.
    • FreeBSD 4.x и старые релизы DragonFly не поддерживаются.

Установка

Перед установкой следует решить для себя, как MPD будет загружать модули netgraph — через ядро или самостоятельно по мере необходимости.

Опции:
# netgraph options
options HZ=1000
options NETGRAPH
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
options NETGRAPH_CISCO
options NETGRAPH_ECHO
options NETGRAPH_FRAME_RELAY
options NETGRAPH_HOLE
options NETGRAPH_KSOCKET
options NETGRAPH_LMI
options NETGRAPH_RFC1490
options NETGRAPH_TTY
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_ETHER
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_L2TP
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_TEE
options NETGRAPH_UI
options NETGRAPH_VJC

Можно включать в конфиг ядра не все подряд, а только то, что нужно вам.
При установке на FreeBSD черед пэкедж или порт, mpd автоматически установится в /usr/local/sbin/mpd5 с компиллированием дефолтового набора поддерживаемых устройств. Для запуска mpd требуются несколько конфигурационных файлов, которые находятся в директории /usr/local/etc/mpd5. В этой директории вы можете найти примеры конфигурационных файлов.

Перед запуском mpd, нужно выполнить настроики следующих файлов:

mpd.conf
Файл описывает одну или более конфигурации. При старте mpd через консоль указывается название конфигурации (которая может состоять из нескольких mpd комманд), которая и загружается. Если название не указывается, загружается конфигурация, описанная в разделе ‘default’. Каждая конфигурация определяет один или несколько бандлов (bundle), линков (link) или репитеров (repeater). Их описание начинаются с комманды create. Последующие комманды в конфигурации описывают различные уровни этих блоков.
mpd.secret
Файл содержит пары логин-пароль. MPD просматривает файл при авторизации. Файл должен быть доступен для чтения только root.
mpd.script
Файл содержит скрипты для модемных устройств.

Прикручиваем логи:

В файл /etc/syslog.conf добавляем:
!mpd
*.* /var/log/mpd.log

Создаем файл /var/log/mpd.log ручками командой:

touch /var/log/mpd.log

Задаем ротацию логов в файле /etc/newsyslog.conf

/var/log/mpd.log 600 7 100 * JC

Файл /etc/rc.conf должен содержать запись:

mpd_enable=»YES»

иначе система не даст запустить процесс mpd.

Старт MPD проходит через загрузчик /usr/local/etc/rc.d/mpd5 с опцией start.

/usr/local/etc/rc.d/mpd5 start

Стандартные опции {start|stop|restart}.

Системные настройки сервера

Есть некоторые моменты, которые следует учесть, если ваш сервер имеет большое количество соединений. Например, можно столкнуться с ситуацией, когда при выводе комманды ngctl list будет выдававаться No buffer space available. Чтобы этого избежать следует добавить в /boot/loader.conf:

kern.ipc.nmbclusters=16384
kern.ipc.maxsockets=16384
net.graph.maxalloc=2048
kern.maxusers=512
kern.ipc.maxpipekva=32000000

в /etc/sysctl.conf:

net.graph.maxdgram=128000
net.graph.recvspace=128000

Более подробную информацию об этих настройках можно найти здесь.

Если MPD работает на вланах (vlan), которые поднимаются из /etc/rc.local, я наблюдал такую картину. Процесс MPD стартует раньше, чем поднимаются вланы на интерфейсах. В итоге получается, что вроде как сервер рабоатет нормально, только никто подключиться не может. Из этой ситуации есть два выхода (напоминает: из любой ситуации всегда есть два выхода). Либо поднимать вланы через /etc/rc.conf, либо в загрузчик MPD /usr/local/etc/rc.d/mpd5 в начало добавляем строчку:

`/bin/sh /etc/rc.local`

Будьте осторожны, возможно через этот файл у вас прописывается маршрутизация или еще что-нибудь.

Убедитесь, что этот способ не затронет другие сервисы в вашей системе.

Файл конфига mpd.conf

В этой главе я постараюсь по подробнее рассмотреть файл своего рабочего конфига. Если вы мигрируете с более ранней версии MPD, конфигурационный файл придется переписывать. Напомню также, что в 5-ой версии отказались от mpd.links. Для начала полный листинг mpd.conf:

startup:
#configure mpd users
 set user admin PASSWORD
#configure the console
 set console self 127.0.0.1 5005
 set console open
#configure the web server
 set web self 0.0.0.0 5006
 set web open
default:
 load def_conf
def_conf:
 create bundle template B
 set iface up-script /usr/local/etc/mpd5/vpn_up_mpd.pl
 set iface down-script /usr/local/etc/mpd5/vpn_down_mpd.pl
 set bundle enable compression
 set bundle enable encryption
 set iface idle 0
 set iface disable proxy-arp
 set iface enable tcpmssfix
 set ipcp yes vjcomp
 set ipcp ranges aaa.bbb.ccc.ddd/32 0.0.0.0/0
 set ipcp dns xxx.yyy.zzz.ddd qqq.www.eee.rrr
 set ccp yes mppc
 set mppc yes e40
 set mppc yes e56
 set mppc yes e128
 set mppc yes stateless
 set ecp disable dese-bis dese-old
 log -echo -ipv6cp -radius -rep
 load common
common:
 create link template PPPoE pppoe
 set link enable no-orig-auth
 set link max-children 300
 set auth max-logins 0
 load pppoe
pppoe:
 set link action bundle B
 set link enable multilink
 set link yes acfcomp protocomp
 set link disable chap pap eap
 set link enable chap chap-msv1 chap-msv2 chap-md5
 set link keep-alive 10 60
#pppoe on bge1 with service name "service_name0"
 create link template bge1_0 PPPoE
 set pppoe iface bge1
 set link enable incoming
 set pppoe service service_name0
#pppoe on bge1 with service name "service_name1"
 create link template bge1_1 PPPoE
 set pppoe iface bge1
 set link enable incoming
 set pppoe service service_name1
#pppoe on bge2 with service name "service_name0"
 create link template bge2_0 PPPoE
 set pppoe iface bge2
 set link enable incoming
 set pppoe service service_name0

Примечание:

Все строки, кроме комментариев и ссылок (строки которые заканчиваются на «:»), в файле mpd.conf должны начинаться с отступа (пробела).


Блок startup:

В этом блоке описываются юзеры для консольного и web интерфейса MPD, а также сами настройки консоли и web сервера. Если вам это не нужно, то конфигурация может начинаться с блока default, а блока startup может вообще не быть.

Блок default:

В сущности здесь описываются дефолтовые действия, в частности загрузить дефолтовый конфиг, который загружается если не указывать называние конфигурации при загрузке, как было описано выше.

Блок def_conf:

С этого блока начинается конфигурация самого сервера. Если в конфиг файле описаны несколько конфигураций, у каждой должно быть свое уникальное имя.

Далее будем описывать построчно:

create bundle template B — создаем бандл «B», он же будет выступать в качестве шаблона
set iface up-script /usr/local/etc/mpd5/vpn_up_mpd.pl
set iface down-script /usr/local/etc/mpd5/vpn_down_mpd.pl
— цепляем
внешние скрипты на события создания и закрытия туннеля ppp.

MPD может передавать данные в качестве аргументов на события подключения и отключения пользователя к серверу:
$ARGV[0] — ngXX — номер тунеля
$ARGV[1] — inet
$ARGV[2] — aaa.bbb.ccc.ddd/32 — IP адрес сервера
$ARGV[3] — IP адрес, выданный пользователю
$ARGV[4] — логин пользователя

Эти аргументы вы можете использовать в perl скриптах vpn_up_mpd.pl и vpn_down_mpd.pl

set bundle enable compression — разрешаем CCP (Compression Control Protocol). Разрешаем только использование протокола, выбор протокола сжатия описан ниже.

set bundle enable encryption — разрешаем ECP (Encryption Control Protocol). Аналогично предыдущему пункту, выбор протокола сжатия описан ниже.

set iface idle 0 — таймаут в секундах неактивности, по истечении которого соединение принудительно разрывается со стороны сервера. «0» — не разрывать (стоит по дефолту).

set iface disable proxy-arp — запрещаем proxy-arp. Этот параметр полезен для имитации единой локалки для удаленных хостов.

set iface enable tcpmssfix — позволяет MPD управлять настройкой входящих и исходящих TCP SYN сегментов таким образом, чтобы не превышать MTU, допустимый на интерфейсе.

set ipcp yes vjcomp — разрешает компрессию заголовков (Van Jacobson TCP).

set ipcp ranges aaa.bbb.ccc.ddd/32 0.0.0.0/0 — пул IP адресов сервера/клиентов

set ipcp dns xxx.yyy.zzz.ddd qqq.www.eee.rrr — dns сервера, отдаваемые клиенту

set ccp yes mppc — включаем MPPC субпротокол сжатия/шифрования

set mppc yes e40 — включаем 40-bit MPPE шифрование

set mppc yes e56 — включаем 56-bit MPPE шифрование

set mppc yes e128 — включаем 128-bit MPPE шифрование

set mppc yes stateless — настройка, полезная при пакетлоссах (потерях)

log -echo -ipv6cp -radius -rep — уровни логгирования

load common — загрузка другого блока с именем common

Переходим к блоку common:

create link template PPPoE pppoe — создаем линк, он же будет выступать в качестве шаблона

set link enable no-orig-auth — Обычно при использовании PAP или CHAP авторизация происходит в начале соединения. Эта опция временно выключает данное требование в случае если наш сервер является единственным в сети, а клиенту вдруг не нравится запрос от сервера на авторизацию.

set link max-children 300 — максимальное количество соединений для этого шаблона

load pppoe — подгружаем следующий блок

set link action bundle B — накладываем на линк настройки бандла

set link enable multilink — опция позволяет создавать множественное подключение PPP. Но в данном случае опция позволяет пропускать большие пакеты (больше MTU) фрагментами. Что-то вроде фрагментации пакетов.

set link yes acfcomp protocomp — сжатие адресного поля, поля заголовков и поля протокола. Для экономии нескольких байтов во фрейме.

set link disable chap pap eap — запрещаем данные протоколы проверки пароля

set link enable chap-msv1 chap-msv2 chap-md5 — разрешаем протоколы проверки пароля (необходимы для возможности включения шифрования (Microsoft)).

set link keep-alive 10 60 — разрешает LCP пакеты. По умолчанию 5 40. Можно отказаться от этой опции, поставив первое значение в «0».

create link template bge1_0 PPPoE — создаем линк bge1_0 и накладываем настройки шаблона PPPoE

set pppoe iface bge1 — задаем интерфейс, где будет поднят наш сервис. Может быть как физическим интерфейсом, так и вланом (vlan).

set link enable incoming — разрешаем входящие соединения

set pppoe service service_name0 — поднимаем сервис-нейм (service-name) на заданном интерфейсе

Если у вас множество интерфейсов, то достаточно дописывать в конец конфига последний видоизмененный блок, как показано в общем листинге.

Заключение

Из плюсов использования MPD в качестве PPPoE сервера хочу отметить меньшую загрузку CPU, особенно в сочетании с использованием поллинга (polling).

Для этого нужно собрать ядро с поддержкой поллинга:

options DEVICE_POLLING
options HZ=1000


После этого можно включить поллинг через /etc/sysctl.conf:

kern.polling.enable=1
kern.polling.user_frac=10

Последнее означает что система будет делить ресурсы CPU в соотношении userland/kernel как 10/90. По умолчанию это значение 50/50.

Конфиг работает на версиях порта mpd-5.0, mpd-5.1. С версией mpd-5.1_1 наблюдались проблемы на серверной стороне. При невыясненных обстоятельствах запускался второй процесс mpd5, который грузил CPU в 100%, а пользователи не могли подключиться. Пришлось откатываться на 5.1.

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Folio
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту