Jump to content
Калькуляторы

[MPD5] логгирование внешнего IP-адреса клиента

Есть настроенный сервер на mpd5.5. Всё работает. Но хотелось бы в логах видеть IP с которого подключается клиент. В логах он не пишется почему-то, зато его можно посмотреть через консоль и через web-ку. Пробовал включать debug level 1/2 - но IP адрес всё равно не пишется.

Как решить эту проблему?

Share this post


Link to post
Share on other sites

Стандартными средствами нельзя никак. Вот вариант, предложенный одним человеком:

 

mpd.conf:

...

set iface up-script /usr/local/etc/mpd5/1_up.sh

...

 

 

/usr/local/etc/mpd5/1_up.sh:

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin

 

 

_if=$1;

_if_gw=$4;

_if_user=$5;

_if_ip=$3;

_if_src_ip=$8;

 

/usr/bin/logger "mpd: user $_if_user logged from $_if_src_ip on iface=$_if with iface_ip=$_if_gw"

Share this post


Link to post
Share on other sites

Но хотелось бы в логах видеть IP с которого подключается клиент.

В RADIUS-accounting он пишется

Share this post


Link to post
Share on other sites

У меня некоторое время работало так:

 

#!/usr/local/bin/perl

my %hash;

while (<STDIN>) {
    last if ($_ eq "\n");
    chomp;
    my ($k, $v) = split ':', $_, 2;
    $hash{$k} = $v;
}


($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();

$year+=1900;
$mon+=1;

$LOGLINE=sprintf("%4d.%02d.%02d %02d:%02d:%02d",$year,$mon,$mday,$hour,$min,$sec)."    $hash{ACCT_STATUS_TYPE}    $hash{IFACE}    $hash{FRAMED_IP_ADDRESS}    $hash{USER_NAME}    $hash{PEER_ADDR}    $hash{ACCT_SESSION_TIME}    $hash{ACCT_INPUT_OCTETS}    $hash{ACCT_OUTPUT_OCTETS}    $hash{ACCT_TERMINATE_CAUSE}    $hash{PEER_IDENT}\n";


open LOG, ">> /var/log/acct/$hash{USER_NAME}" or die "\n";
print LOG $LOGLINE;
close LOG;


open LOG, ">> /var/log/acct/".sprintf("%4d.%02d.",$year,$mon)."vpn.log" or die "\n";
print LOG $LOGLINE;
close LOG;


printf "\n";

 

Перед подключением скрипта создайте папку /var/log/acct/

Share this post


Link to post
Share on other sites
А подробнее?

Не понятен вопрос.

В конфиг mpd добавить строчку

set auth extacct-script \путь к скрипту\скрипт.pl

естественно, должен быть установлен perl. Логи читаем в папке /var/log/acct/, по пользователям и общий. Общий создаётся ежемесячно.

 

Подробней логи можна сделать, добавив чтение и запись нужных переменных. Описание переменных есть в мануале.

Share this post


Link to post
Share on other sites

+1 за up-script.

Если без занудства, то в нём достаточно одной строки:

logger -p ppp.info -t mpd-up "$@"

Share this post


Link to post
Share on other sites

Это понятно. Я имел ввиду пост terrible

Edited by skeletor

Share this post


Link to post
Share on other sites

Если MPD является клиентом RADIUS сервера, то при общении MPD и RADIUS они обмениваются вот такими сообщениями аккаунтинга:

Старт сессии:

 

Mon Feb 21 15:54:29 2011
    NAS-Identifier = "mpd"
    NAS-IP-Address = 10.16.33.109
    Acct-Session-Id = "8292971-N-1580"
    NAS-Port = 1580
    NAS-Port-Type = Virtual
    Service-Type = Framed-User
    Framed-Protocol = PPP
    Calling-Station-Id = "192.168.28.10"
    mpd-link = "N-1580"
    Tunnel-Type:0 = PPTP
    Tunnel-Medium-Type:0 = IPv4
    Tunnel-Server-Endpoint:0 = "10.10.89.70"
    Tunnel-Client-Endpoint:0 = "192.168.28.10"
    Acct-Status-Type = Start
    Framed-IP-Address = 172.16.153.90
    User-Name = "brood"
    Acct-Multi-Session-Id = "8292971-N-812"
    mpd-bundle = "N-812"
    mpd-iface = "ng810"
    mpd-iface-index = 848
    Acct-Link-Count = 1
    Acct-Authentic = RADIUS
    Acct-Unique-Session-Id = "130bb29bb056bce6"
    Timestamp = 1298292869
    Request-Authenticator = Verified

 

Завершение сессии:

Mon Feb 21 15:54:31 2011
    NAS-Identifier = "mpd"
    NAS-IP-Address = 10.16.33.109
    Acct-Session-Id = "8292971-N-1580"
    NAS-Port = 1580
    NAS-Port-Type = Virtual
    Service-Type = Framed-User
    Framed-Protocol = PPP
    Calling-Station-Id = "192.168.28.10"
    mpd-link = "N-1580"
    Tunnel-Type:0 = PPTP
    Tunnel-Medium-Type:0 = IPv4
    Tunnel-Server-Endpoint:0 = "10.10.89.70"
    Tunnel-Client-Endpoint:0 = "192.168.28.10"
    Framed-IP-Address = 172.16.153.90
    User-Name = "brood"
    Acct-Multi-Session-Id = "8292971-N-812"
    mpd-bundle = "N-812"
    mpd-iface = "ng810"
    mpd-iface-index = 848
    Acct-Link-Count = 1
    Acct-Authentic = RADIUS
    Acct-Status-Type = Stop
    Acct-Terminate-Cause = User-Request
    Acct-Session-Time = 4
    Acct-Input-Octets = 3631
    Acct-Input-Packets = 14
    Acct-Input-Gigawords = 0
    Acct-Output-Octets = 116
    Acct-Output-Packets = 6
    Acct-Output-Gigawords = 0
    Acct-Unique-Session-Id = "130bb29bb056bce6"
    Timestamp = 1298292871
    Request-Authenticator = Verified

 

Соответственно мы видим, что:

абонент, с адреса 192.168.28.10 дозваливался до VPN сервера на адрес 10.10.89.70 (именно на этот) и получил IP на PPTP тоннель 172.16.153.90

VPN сервер в свою очередь в сторону радиуса смотрит IP адресом 10.16.33.109

Вполне исчерпывающая информация для мониторинга.

 

Вся вышеперечисленная информация вытащена из логов RADIUS сервера.

Edited by terrible

Share this post


Link to post
Share on other sites

Если MPD является клиентом RADIUS сервера

А если нет? :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this