Настройка VPN сервера LINUX PPPD + POPTOP
Материал из BiTel WiKi
Haku-nk (Обсуждение | вклад) (→Этап 2. snmpd - testpass.sh: экибана) |
Haku-nk (Обсуждение | вклад) м (→Этап 1. testpass.sh: экибана) |
||
Строка 133: | Строка 133: | ||
Если у Вас получилась установка с первого раза и всё заработало как надо — можете не читать эту часть статьи. Если же "абонент не сбрасывается с линии", как часто форумчане задают этот вопрос, читаем сей небольшой мануал. | Если у Вас получилась установка с первого раза и всё заработало как надо — можете не читать эту часть статьи. Если же "абонент не сбрасывается с линии", как часто форумчане задают этот вопрос, читаем сей небольшой мануал. | ||
- | === Этап 1. | + | === Этап 1. passtest.sh === |
Для начала тестируем как сам скрипт будет убивать "процесс", а для этого будем его запускать как бы "от лица" snmpd.<br /> | Для начала тестируем как сам скрипт будет убивать "процесс", а для этого будем его запускать как бы "от лица" snmpd.<br /> | ||
- | На машине, где установлен passtest.sh, открываем второй терминал и запускаем на ней "подопытный" процесс, пускай это будет | + | На машине, где установлен passtest.sh, открываем второй терминал и запускаем на ней "подопытный" процесс, пускай это будет ''top'': |
$ top | $ top | ||
Выясняем его пид: | Выясняем его пид: | ||
$ ps -e |grep top | $ ps -e |grep top | ||
- | + | 15190 pts/1 00:00:00 top | |
- | Вот он: 15190 . Теперь запускаем сам скрипт с параметрами: | + | Вот он: '''15190''' . Теперь запускаем сам скрипт с параметрами: |
# passtest.sh -s 11111 integer 15190 | # passtest.sh -s 11111 integer 15190 | ||
- | , где -s — это как бы "set", он же первый параметр ($1), передаваемый скрипту; '''11111''' — это как бы MIB ($2) | + | , где: |
+ | * '''-s''' — это ''как бы'' "set", он же первый параметр ($1), передаваемый скрипту; | ||
+ | * '''11111''' — это ''как бы'' MIB ($2); | ||
+ | * '''integer''' — это как бы тип переменной ($3), которая передаётся скрипту, | ||
+ | * '''15190''' — это пид процесса ($4), так если собственно значение.<br /> | ||
Вообще, для проверки скрипта нужно указать только первый и четвёртый параметры, но остальные должны присутствовать, цифрового или текстового вида.<br /> | Вообще, для проверки скрипта нужно указать только первый и четвёртый параметры, но остальные должны присутствовать, цифрового или текстового вида.<br /> | ||
- | Переходим на второй терминал, команда top в нём должна завершиться. Если работа top не завершилась — смотрим лог и анализируем как работает | + | Переходим на второй терминал, команда ''top'' в нём должна завершиться. Если работа ''top'' не завершилась — смотрим лог скрипта и анализируем как он работает. |
- | + | Когда отладка закончена и любой процесс посредством passtest.sh завершается, переходим на уровень выше — '''snmp'''. | |
=== Этап 2. snmpd - testpass.sh === | === Этап 2. snmpd - testpass.sh === |
Версия 16:03, 24 июня 2011
Содержание |
Установка и настройка
Это работа 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. passtest.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 не завершилась — смотрим лог скрипта и анализируем как он работает.
Когда отладка закончена и любой процесс посредством passtest.sh завершается, переходим на уровень выше — 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