Благодаря внешней диагностики соединения можно выполнять различные команды прямо из интерфейса ABillS (на странице клиента возле онлайн сессии добавляется кнопка). В этой статье я приведу несколько примеров.
Например я добавил кнопку PING (на примере от сервера с биллингом клиенту отправляется 15 пакетов ping с интервалом 0.2 секунды и размер пакета 1024 байт, по завершению команды выводится результат выполнения команды, если IP адрес клиента не отвечает на PING, то результат будет пустым):
$conf{INTERNET_EXTERNAL_DIAGNOSTIC}='PING:ping -c 15 -i 0.2 -s 1024 %FRAMED_IP_ADDRESS%';
Пример результата:
Диагностика PING
PING 172.18.11.75 (172.18.11.75) 1024(1052) bytes of data.
1032 bytes from 172.18.11.75: icmp_seq=1 ttl=62 time=0.842 ms
1032 bytes from 172.18.11.75: icmp_seq=2 ttl=62 time=0.695 ms
1032 bytes from 172.18.11.75: icmp_seq=3 ttl=62 time=0.688 ms
1032 bytes from 172.18.11.75: icmp_seq=4 ttl=62 time=0.632 ms
1032 bytes from 172.18.11.75: icmp_seq=5 ttl=62 time=0.610 ms
1032 bytes from 172.18.11.75: icmp_seq=6 ttl=62 time=0.666 ms
1032 bytes from 172.18.11.75: icmp_seq=7 ttl=62 time=0.580 ms
1032 bytes from 172.18.11.75: icmp_seq=8 ttl=62 time=0.706 ms
1032 bytes from 172.18.11.75: icmp_seq=9 ttl=62 time=0.660 ms
1032 bytes from 172.18.11.75: icmp_seq=10 ttl=62 time=0.504 ms
1032 bytes from 172.18.11.75: icmp_seq=11 ttl=62 time=0.554 ms
1032 bytes from 172.18.11.75: icmp_seq=12 ttl=62 time=0.576 ms
1032 bytes from 172.18.11.75: icmp_seq=13 ttl=62 time=0.583 ms
1032 bytes from 172.18.11.75: icmp_seq=14 ttl=62 time=0.741 ms
1032 bytes from 172.18.11.75: icmp_seq=15 ttl=62 time=0.592 ms
— 172.18.11.75 ping statistics —
15 packets transmitted, 15 received, 0% packet loss, time 2801ms
rtt min/avg/max/mdev = 0.504/0.641/0.842/0.089 ms
Аналогичным способом можно добавить другие команды, например arpping:
$conf{INTERNET_EXTERNAL_DIAGNOSTIC}='ARPPING:arping -i eno1 -c 5 %FRAMED_IP_ADDRESS%';
Чтобы arpping запустился от имени пользователя под которым работает веб сервер, нужно добавить в /etc/sudoers:
www-data ALL = NOPASSWD: /usr/sbin/arping
Пример nmap:
NMAP:nmap %FRAMED_IP_ADDRESS% -Pn -p 1-100,137-139,443,554,5060,8080,8291 --host-timeout 5
Можно указать несколько внешних команд, например:
$conf{INTERNET_EXTERNAL_DIAGNOSTIC}='ARPPING:sudo arping -i eno1 -c 5 %FRAMED_IP_ADDRESS%;PING:ping -c 15 -i 0.2 -s 1024 %FRAMED_IP_ADDRESS%';
Список возможных аргументов:
USER_NAME
SESSION_START
ACCT_SESSION_TIME
ACCT_INPUT_OCTETS
ACCT_OUTPUT_OCTETS
EX_INPUT_OCTETS
EX_OUTPUT_OCTETS
CONNECT_TERM_REASON
FRAMED_IP_ADDRESS
LAST_UPDATE
NAS_PORT
NAS_IP_ADDRESS
CALLING_STATION_ID
CONNECT_INFO
ACCT_SESSION_ID
NAS_ID
ACCT_SESSION_STARTED
ACCT_INPUT_GIGAWORDS
ACCT_OUTPUT_GIGAWORDS
FILTER_ID
Пример выполнения tcpdump на локальном сервере и удаленном:
$conf{INTERNET_EXTERNAL_DIAGNOSTIC}='TCPDUMP:/usr/bin/sudo /usr/sbin/tcpdump -c 3 -vv host %FRAMED_IP_ADDRESS%';
$conf{INTERNET_EXTERNAL_DIAGNOSTIC}='TCPDUMP:/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.abills_admin abills_admin@%NAS_IP_ADDRESS% "/usr/bin/sudo /usr/sbin/tcpdump -c 3 -vv host %FRAMED_IP_ADDRESS%"';
Также нужно добавить в /etc/sudoers:
www-data ALL = NOPASSWD: /usr/sbin/tcpdump
Смотрите также мои статьи:
Утилита для захвата и анализа пакетов tcpdump
Подключение к SSH с использованием ключей