Looking Glass для BIRD на PHP

Предложения, замечания, ошибки и т.п. по сайту/форуму/блогу.

Looking Glass для BIRD на PHP

Сообщение root » 28 дек 2013, 08:28

Создаю топик о нашем проекте Looking Glass для BIRD на PHP.
Страница проекта: http://bird-lg.subnets.ru/
Для работы LG необходимо:
    установленный и запущенный BIRD
    web сервер (аля apache)
    PHP5: модуль для apache и CLI версия
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Looking Glass для BIRD на PHP

Сообщение dragomir » 02 дек 2014, 00:06

добрый день. скачал вашу последнюю версию bird-lg.v0.4.1.
пытаюсь настроить на двух линухах.
на одном web-server, на втором bird.
у вас в примерах показана настройкана freebsd с tcp-server
помогите настроить на linux, у меня стоит inetd, у самого что-то не хватает ума.
спасибо.
dragomir
новичок
 
Сообщения: 14
Зарегистрирован: 02 дек 2014, 00:02

Re: Looking Glass для BIRD на PHP

Сообщение dragomir » 02 дек 2014, 01:54

вобщем у меня получилось что-то, но работает всё равно как то не корректно.
что я сделал.
добавил в файл /etc/inetd.conf строчку:
Код: Выделить всё
birdclient stream tcp nowait root /usr/sbin/tcpd /usr/bin/php /usr/local/bin/bird.client.php &

добавил в файл /etc/services строчку:
Код: Выделить всё
birdclient 55555/tcp

добавыил в файл /etc/hosts.allow строчку:
Код: Выделить всё
ALL:ALL

в итоге получилось что-то типа:
Код: Выделить всё
# netstat -lnp | grep 55555
tcp        0      0 0.0.0.0:55555           0.0.0.0:*               LISTEN      15842/inetd

открываю страницу в вебе с лукинг глассом пытаюсь сделать запрос он его выполняет и выдает ошибку
Код: Выделить всё
Total routes: 0
[ERROR]: Remote IP is unknown

в логах пишет тоже самое:
Код: Выделить всё
[2014-12-02 05:47:47]: bird.client run as remote
[2014-12-02 05:47:47]: Remote IP is unknown
dragomir
новичок
 
Сообщения: 14
Зарегистрирован: 02 дек 2014, 00:02

Re: Looking Glass для BIRD на PHP

Сообщение dragomir » 02 дек 2014, 02:30

вобщем доковырял конфиги теперь такая ситуация получается:

Код: Выделить всё
PHP Notice: Undefined offset: 1 in /usr/local/bin/bird.client.php on line 187


187-ая строка это
Код: Выделить всё
 $query_type=$tmp[1];

в коде:
Код: Выделить всё
$query_type="";                                                                                                                                                                                             
if (is_array($permitted_commands)){                                                                                                                                                                         
    unset($tmp);                                                                                                                                                                                             
    preg_match("/^(\S+)\s/",$command,$tmp);                                                                                                                                                                 
    $query_type=$tmp[1];                                                                                                                                                                                     
    if (!in_array($tmp[1],$permitted_commands)){                                                                                                                                                             
<------>$error[]=sprintf("%s is prohibited",$query_type);                                                                                                                                                   
    }


вот мои версии утилит на сервер где стоит apache
Код: Выделить всё
# uname -a
Linux www-ns 2.6.32-5-686 #1 SMP Mon Jan 16 16:04:25 UTC 2012 i686 GNU/Linux

# php -v
PHP 5.3.3-7+squeeze19 with Suhosin-Patch (cli) (built: Feb 18 2014 13:59:15)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH


подскажите, что можно подправить
dragomir
новичок
 
Сообщения: 14
Зарегистрирован: 02 дек 2014, 00:02

Re: Looking Glass для BIRD на PHP

Сообщение root » 02 дек 2014, 09:42

Тут у вас 2 проблемы:
1. Передача IPшника, который осуществляет коннект
2. Передача полученных параметров от web-интерфейса в bird.client
О чем и сообщают приведенные вами ошибки. Вторая проблема является следствием первой. Если исправить первую проблему, то и вторая пропадет.

dragomir писал(а):birdclient stream tcp nowait root /usr/sbin/tcpd /usr/bin/php /usr/local/bin/bird.client.php &

В данном случае bird.client получит в кач-ве аргумента &, а это не надо. Уберите "&" в конце строки, т.к. это необходимо только при запуске через ucspi-tcp.

dragomir писал(а):у вас в примерах показана настройкана freebsd с tcp-server

да, уже есть такое дело. мы под фрей сидим

dragomir писал(а):подскажите, что можно подправить

Вариант 1
Исходя из 16.5 Inetd Environment
If a connection is made with a streaming protocol (‘stream’) and if --environment option has been given, inetd will set the following environment variables before starting the program:

PROTO
Always ‘TCP’.
TCPLOCALIP
Local IP address of the interface which accepted the connection.
TCPLOCALPORT
Port number on which the TCP connection was established.
TCPREMOTEIP
IP address of the remote client.

TCPREMOTEPORT
Port number on the client side of the TCP connection.
Additionally, if given the --remote option, inetd sets the following environment variables:

TCPLOCALHOST
DNS name of TCPLOCALIP.
TCPREMOTEHOST
DNS name of TCPREMOTEIP.

Соответственно попробовать указать environment и строку 68 bird.client.php:
Код: Выделить всё
$remote_ip=isset($_SERVER['TCPREMOTEIP']) ? $_SERVER['TCPREMOTEIP'] : "";

заменить на
Код: Выделить всё
$remote_ip=isset($_SERVER['TCPREMOTEIP']) ? $_SERVER['TCPREMOTEIP'] : getenv('TCPREMOTEIP');


Вариант 2
Отключить проверку IP в bird.client.php и отдать эту функцию на откуп inetd (рулить через /etc/hosts.allow (ну или firewall никто не отменял :))) и $remote_ip присвоить IP-адрес разрешенный в конфиге, например если в конфиге в списке разрешенных 127.0.0.1:
Код: Выделить всё
$config['bird_client_remote_permited_ips']=array();
$config['bird_client_remote_permited_ips'][]="127.0.0.1";

то в bird.client.php строка 68 должна быть такой:
Код: Выделить всё
$remote_ip="127.0.0.1";


P.S. А вы не пробовали установить ucspi-tcp ? Судя по install.html и результатам гугления можно сделать вывод что ucspi-tcp будет работать и на Linux`е.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Looking Glass для BIRD на PHP

Сообщение dragomir » 02 дек 2014, 12:01

представляете, у меня стоял openbsd-inetd и я запустил по второму варианту и всё заработало ))
решил попробовать первый вариант и не нашел в нем опции --environment
удалил его. поставил inetutils-inetd
но что-то ни как не могу заставить работать по первому варианту.
я запускаю inetd с опцией --environment
Код: Выделить всё
# ps aux | grep inetd
root     21669  0.0  0.0  12780   780 ?        S    16:24   0:00 /usr/sbin/inetutils-inetd --environment

и добавялю строку
Код: Выделить всё
$remote_ip=isset($_SERVER['TCPREMOTEIP']) ? $_SERVER['TCPREMOTEIP'] : getenv('TCPREMOTEIP');

он мне в логах пишет всё равно
Код: Выделить всё
[2014-12-02 16:26:38]: bird.client run as remote                                                                                                                                                             
[2014-12-02 16:26:38]: Remote connection FORBIDDEN for 91.x.x.x


по второму варианту пишу строку:
Код: Выделить всё
$remote_ip="127.0.0.1";

и он мне в логах пишет что всё ок.
Код: Выделить всё
[2014-12-02 16:31:17]: bird.client run as remote                                                                                                                                                             
[2014-12-02 16:31:17]: Remote connection from 127.0.0.1                                                                                                                                                     
[2014-12-02 16:31:17]: ++++++++++++ got params +++++++++++++++                                                                                                                                               
[2014-12-02 16:31:17]:  -- 0 = -c                                                                                                                                                                           
[2014-12-02 16:31:17]:  -- 1 = ipv4:                                                                                                                                                                         
[2014-12-02 16:31:17]:  -- 2 = show                                                                                                                                                                         
[2014-12-02 16:31:17]:  -- 3 = route                                                                                                                                                                         
[2014-12-02 16:31:17]:  -- 4 = for                                                                                                                                                                           
[2014-12-02 16:31:17]:  -- 5 = 91.X.X.X                                                                                                                                                                 
[2014-12-02 16:31:17]:  -- 6 = all                                                                                                                                                                           
[2014-12-02 16:31:17]: execute command [ipv4: show route for 91.X.X.X all]                                                                                                                             
[2014-12-02 16:31:17]: 91.X.X.X/22     via 91.X.X.6 on eth2 [Telecom Nov25] * (100) [AS197XXi]                                                                                                   
        Type: BGP unicast univ                                                                                                                                                                               
        BGP.origin: IGP                                                                                                                                                                                     
        BGP.as_path: 197XX                                                                                                                                                                                 
        BGP.next_hop: 91.X.X.X                                                                                                                                                                           
        BGP.med: 0                                                                                                                                                                                           
        BGP.local_pref: 100                                                                                                                                                                                 
via 91.X.X.15 on eth2 [Telecom2 Nov25] (100) [AS197XXi]                                                                                                                                             
        Type: BGP unicast univ                                                                                                                                                                               
        BGP.origin: IGP                                                                                                                                                                                     
        BGP.as_path: 197XX 197XX 197XX                                                                                                                                                                   
        BGP.next_hop: 91.X.X.X                                                                                                                                                                           
        BGP.local_pref: 100


что-то я до конца не разобрался с этой --environment ))
Последний раз редактировалось dragomir 02 дек 2014, 13:30, всего редактировалось 1 раз.
dragomir
новичок
 
Сообщения: 14
Зарегистрирован: 02 дек 2014, 00:02

Re: Looking Glass для BIRD на PHP

Сообщение root » 02 дек 2014, 13:08

Да нет, как раз с environment вы разобрались, т.к.:
ранее было:
[2014-12-02 05:47:47]: Remote IP is unknown

а теперь стало:
[2014-12-02 16:26:38]: Remote connection FORBIDDEN for 91.x.x.x

т.е. IP то уже не пуст, а это значит что теперь IP-шник передается в окружение
Это вы с конфигом не разобрались, у вас в нем получается отсутствует строка:
Код: Выделить всё
$config['bird_client_remote_permited_ips'][]="91.x.x.x";

Потому и выдается FORBIDDEN для 91.x.x.x, т.к. коннект запрещается по конфигу.

То что второй вариант поможет я и не сомневался :)

Вы можете написать инструкцию (последовательность ваших действий) по подъему этого дела на linux ? Что нуна ставить/править кроме того что вы уже озвучили выше ?
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Looking Glass для BIRD на PHP

Сообщение dragomir » 02 дек 2014, 13:34

я ведь правильно понимаю что конфига должно быть 2 штуки?
один на сервере с apache другой на сервере с bird?
потому что если это не так тогда я вообще много чего не понимаю )))
как только всё заработает как надо, напишу инструкцию ))

так как строка
Код: Выделить всё
$config['bird_client_remote_permited_ips'][]="91.x.x.x";

мне не помогает.

щас расскажу как у меня работает )
у меня есть конфиг на стороне apache
web-server ip : 91.X.X.35
там в нем такие параметры:
Код: Выделить всё
$config['bird_client_remote']=false;

//First node                                                                                                                                                                                                 
$hin++;                                                                                                                                                                                                     
$config['nodes'][$hin]['host'] = '91.X.X.1';                                                                                                                                                             
$config['nodes'][$hin]['port'] = '55555';                                                                                                                                                                   
$config['nodes'][$hin]['name'] = 'Remote';                                                                                                                                                                   
$config['nodes'][$hin]['description'] = 'BIRD on 91.X.X.1';


и есть конфиг на стороне bird
bird ip: 91.X.X.1
там параметры следующие:
Код: Выделить всё
$config['bird_client_remote']=true;
$config['bird_client_remote_permited_ips']=array();                                                                                                                                                         
$config['bird_client_remote_permited_ips'][]="127.0.0.1";                                                                                                                                                   
$config['bird_client_remote_permited_ips'][]="95.X.X.35";

//First node                                                                                                                                                                                                 
$hin++;                                                                                                                                                                                             
$config['nodes'][$hin]['host'] = 'socket';                                                                                                                                                           
$config['nodes'][$hin]['port'] = '';                                                                                                                                                                 
$config['nodes'][$hin]['name'] = 'Localhost';                                                                                                                                                       
$config['nodes'][$hin]['description'] = 'This server';
Последний раз редактировалось dragomir 02 дек 2014, 13:54, всего редактировалось 1 раз.
dragomir
новичок
 
Сообщения: 14
Зарегистрирован: 02 дек 2014, 00:02

Re: Looking Glass для BIRD на PHP

Сообщение root » 02 дек 2014, 13:53

Да, правильно. Конфигов должно быть два, т.к. конфиг пользуется и web-интерфейсом и bird.client`ом. Без конфига оно и не запустится, т.к. выдаст ошибку.

dragomir писал(а):мне не помогает.

Я надеюсь вы туда не с иксами IP-адрес вписываете ? ;) А действительный IP-адрес.

На сервере где bird и где bird.client в режиме remote вам в конфиге нужно разрешить IPшник, с которого коннектится web-интерфейс. Если он к 95.X.X.1 ходит с IP 95.X.X.35, то соответственно прописывать 95.X.X.35.
Какой именно IP собственно указано в строке с FORBIDDEN дебага bird.client.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Looking Glass для BIRD на PHP

Сообщение dragomir » 02 дек 2014, 14:04

да, конечно без X-ов ))) ну не до такой же степени )))

вот у меня конфиг с сервака где bird и birdc
Код: Выделить всё
$config['bird_client_remote']=true;
$config['bird_client_remote_permited_ips']=array();
$config['bird_client_remote_permited_ips'][]="127.0.0.1";
$config['bird_client_remote_permited_ips'][]="95.X.X.35";

всё прописано как видите, но всё равно пишет
Код: Выделить всё
Total routes: 0
[ERROR]: Remote connection from 91.X.X.35 is forbidden
dragomir
новичок
 
Сообщения: 14
Зарегистрирован: 02 дек 2014, 00:02

След.

Вернуться в Проект Subnets.ru

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3