Настройка VPN сервера LINUX PPPD + POPTOP

Материал из BiTel WiKi

Перейти к: навигация, поиск

Содержание

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

Это работа Vladisson a, текст приведен полностью с сохранением авторской стилистики. Только исправлены некоторые частности про настройку SNMP, изменившиеся к 3.0.

Качаем откуда нить ppp-2.4.2 или более старшую. Я использую ppp-2.4.2b3 далее

./configure

после

/make

Если возникли ошибки при компиляции связанные с радиусклиентом то находим в Makefile в каталоге pppd-2.4.2/pppd/plugins/radius/radiusclient код

cd $(top_srcdir) && $(AUTOHEADER)

И делаем просто

cd $(top_srcdir)

После ./make для пакета.

Должно скомпилиться дальше

./make install

Далее находим "poptop-1.1.4" (он поднимает VPN тунель) собираем

./configure

Компилим

./make

Инсталим

./make install

Потом качаем net-snmp-5.1.2 (найти легко), собираем компилим инсталим как и предыдущие

Привожу мои конфиги для pppd они у меня лежат в /etc/ppp

Файл options lock

Файл options.pptpd

ipparam PoPToP 
   lock 
   mtu 1490 
   mru 1490 
   ms-dns 195.151.116.2 # ТУТ должен быть указан ваш DNS сервер
   lcp-echo-interval 30
   lcp-echo-failure 5
   proxyarp 
   auth 
   -pap 
   +chap 
   ipcp-accept-local 
   ipcp-accept-remote 
   deflate 0 
   plugin radius.so  

теперь конфиги для радиусклиента т.к он кенектится к радиус серверу билинга конфиги лежат у меня в /etc/radiusclient файл servers

#Server Name or Client/Server pair Key
   #---------------- --------------- 
   #portmaster.elemental.net hardlyasecret 
   #portmaster2.elemental.net donttellanyone 

127.0.0.1 123456 # это пароль для подключения к радиус серверу, он был описан выше 

файл radiusclient.conf

auth_order radius
   login_tries 4
   login_timeout 60
   nologin /etc/nologin
   authserver 127.0.0.1
   acctserver 127.0.0.1
   servers /etc/radiusclient/servers
   dictionary /etc/radiusclient/dictionary
   seqfile /var/run/radius.seq
   mapfile /etc/radiusclient/port-id-map
   default_realm
   radius_timeout 10
   radius_retries 3

теперь конфигурация pptpd у меня лежит в /etc файл pptpd.conf

speed 115200
   option /etc/ppp/options.pptpd
   pidfile /var/run/pptpd.pid
   debug
   localip 192.168.3.500
   remoteip 192.168.3.501-250

ипы поменяете на свои и на последок конфиги snmp у меня лежат в /etc/snmp

com2sec billing X.X.X.X secret
com2sec local localhost public

group groupbill v2c billing
group groupbill v2c local

view all included .1.3.6.1.4.1.2021.255 ff.f0

# context sec.model sec.level prefix read   write notify
access groupbill ""      v2c       noauth    prefix      all    all   none

pass .1.3.6.1.4.1.2021.255 /bin/sh /local/utils/passtest.sh

Расположение и настройки в конфигах были сделаны применительно к моей системе возможно кому то потребуется дополнительная правка. И не забудьте создать /local/utils/passtest.sh, вы можете взять его здесь: Медиа:pppd_passtest.zip

В скрипте отредактируйте название файла вашего pppd. Для сброса клиента с линии и проверки по SNMP используется код приходящий в старт пакет радиуса Acct-Session-Id=00005AB3, здесь 00005AB3 - шестнадцатиричный код pppd процесса на Unix'e.

Усе!!!! Если возникнут какие нит вопросы обращайтесь к разработчикам и ко мне мой мыл "vladisson@rbcmail.ru icq 96029701" и смотрите топик "Проблема с SNMP" и другие и не стесняйтесь задавать вопросы

Тестирование "сброса с линии"

Если у Вас получилась установка с первого раза и всё заработало как надо — можете не читать эту часть статьи. Если же "абонент не сбрасывается с линии", как часто форумчане задают этот вопрос, читаем сей небольшой мануал.

Этап 1. testpass.sh

Для начала тестируем как сам скрипт будет убивать "процесс", а для этого будем его запускать как бы "от лица" snmpd.
На машине, где установлен passtest.sh, открываем второй терминал и запускаем на ней "подопытный" процесс, пускай это будет top:

$ top

Выясняем его пид:

$ ps -e |grep top
15190 pts/1    00:00:00 top

Вот он: 15190 . Теперь запускаем сам скрипт с параметрами:

# passtest.sh -s 11111 integer 15190

, где -s — это как бы "set", он же первый параметр ($1), передаваемый скрипту; 11111 — это как бы MIB ($2), integer — это как бы тип переменной ($3), которая передаётся скрипту, 15190 — это пид процесса ($4), так если собственно значение.
Вообще, для проверки скрипта нужно указать только первый и четвёртый параметры, но остальные должны присутствовать, цифрового или текстового вида.
Переходим на второй терминал, команда top в нём должна завершиться. Если работа top не завершилась — смотрим лог и анализируем как работает скрипт.

Теперь переходим на уровень выше - snmp.

Этап 2. snmpd - testpass.sh

Для теста на этом этапе нужно чтобы:

  • демон snmpd был сконфигурирован и работал от имени root`а (иначе не закроет процесс top, запущенный от имени root`а) ,
  • bgradius_dialup должен быть отключён, дабы не мешался.

Открываем второй терминал, запускаем всё тот же top, выясняем его пид:

$ ps -e |grep top
  18011 pts/1    00:00:00 top

В первом терминале запускаем запрос "как бы" от имени bgradius_dialup:

# snmpset -v2c -c secret 127.0.0.1 .1.3.6.1.4.1.2021.255.1 i 18011
  UCD-SNMP-MIB::ucdavis.255.1 = INTEGER: 15379

здесь:

  • -v2c — версия по которой взаимодействуем по snmp;
  • secret — секрет, используемый для доступа к ресурсу snmp (в конфиге выше это — "secret" он присутствует в первой строке snmpd.conf);
  • 127.0.0.1 — адрес, где работает snmpd;
  • .1.3.6.1.4.1.2021.255.1 — MIB;
  • i — даёт понять демону, что параметр типа integer (целый, число),
  • 18011 — собственно параметр и он же — пид процесса который надо завершить.

Вторая строка — ответ snmpd. Если всё сконфигурировано правильно, процессс top во втором терминале должен завершиться.

Возможен вариант, что в процессе выполнения, в логе snmpd и в стандартном выводе будет много строк типа:

...
Cannot find module (SNMPv2-TC): At line 15 in /usr/share/mibs/netsnmp/UCD-DISKIO-MIB
Cannot find module (SNMPv2-SMI): At line 34 in /usr/share/mibs/netsnmp/UCD-SNMP-MI
Undefined identifier:...

это означает, что в пакете net-snmp нет нужных MIB`ов. Для решения данной проблемы, читаем статью "Проблема с прохождением update пакетов и сброса сессий в Debian и Ubuntu дистрибутивах".

Когда взаимодействие по snmp отлажено, можно запустить сервис bgradius_dialup, проверить локальную или общую конфигурацию NAS`а на предмет правильности установки параметров для соединения с snmpd:

#SNMP порт и пароль (не нужны для PoD инспектора)
nas.inspector.snmp.port=161
nas.inspector.snmp.community=secret
#входящий буфер в мегабайтах
nas.inspector.snmp.buffer.in=4
#исходящий буфер в мегабайтах
nas.inspector.snmp.buffer.out=4
#
# Конфигурация непосредственно для PPPD DialUp Linux
snmp.version=2
#возможные значения 2.4.2 и 2.4.3, для 2.4.4 указывается версия 2.4.3
pppd.version=2.4.2
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorPPPD
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.2021.255.1
nas.inspector.snmp.check.oid=1.3.6.1.4.1.2021.255

, и перейти к проверке работы связки bgradius_dialup --> snmpd --> passtest.sh

Этап 3. bgradius_dialup - snmpd - testpass.sh

Если параметры для соединения с NAS`ом (вендор\адрес\секрет) правильны и в мониторе отображается активность пользователя, пробуем это соединение "сбросить" через диалог в мониторе NAS`а, одновременно контролируя закрытие процесса pppd.

Диалог управления сессией

Если соединение не сбрасывается, смотрим и анализируем логи bgradius_dialup, затем логи snmpd и лог passtest.sh

Полезное

  • Не забывайте, что для завершения процесса pppd, нужны права root`а, а так как запускать passtest.sh будет snmpd, то и последний должен быть запущен от имени root`а. Теоретически можно настроить и sudo.
  • Для отладки может помочь запуск snmpd в debug-режиме (пути к файлам поставьте свои):
# /usr/local/sbin/snmpd -V -a -f -q -d -c /usr/local/etc/snmp/snmpd.conf
  • Также для отладки иногда полезно "прослушать" интерфейс на предмет пакетов с\на 161-й порт:

для случая, если взаимодействие bgradius_dialup <--> snmpd происходит через локальный интерфейс:

# tcpdump -i lo -n port 161 

для варианта когда bgradius_dialup и snmpd функционируют на разных машинах (имя_интерфейса — интерфейс(ы) через которые идёт обмен snmp между машинами):

# tcpdump -i имя_интерфейса -n port 161
Личные инструменты