Wifi+биллинг

Всем привет.

Возникла задачка, вынужден решать её очень срочно, поэтому если у кого есть опыт - помогите пожалуйста.

Задачка такая: есть удалённое от цивилизации (читай интернета) место и куча оголтелых пользователей с ноутами и вайфаями, которые жаждут интернета. Из оборудования есть комп с гентой, мегафоновский 3g-модем e160g (как ни странно, работающий!) и вайфай-адаптер c драйвером madwifi, работающий в качестве точки доступа (работает и wep, и wpa). Нужно сделать любой, достаточно надёжный биллинг, поскольку 3G интернет нынче не дёшев, чтобы выставлять пользователям счёт за интернет. Какие возможны варианты, куда рыть?

Ну в общем поставил

Ну в общем поставил прозрачный squid, и перенаправляю на него все пакеты. Авторизацию по мак-адресам сетевых карт сделал с помощью встроенного в hostapd радиуса, там можно указать отдельный wpa-ключ для каждого пользователя. Единственная проблема - прозрачный squid не обрабатывает https запросы, но это, как я понял, проблема глобального характера.

Простейший и быстрый биллинг

Простейший и быстрый биллинг - считать с помощью iptables.

А как такое делается? Конечно

А как такое делается? Конечно это гораздо удобнее, чем неповоротливый и привередливый squid

Ы

Satarsa написал(а):
А как такое делается? Конечно это гораздо удобнее, чем неповоротливый и привередливый squid

Ну примерно так.

Суть в том, чтобы пускать форваженный во внутрь трафик по одельной цепочке, а потом раскидать по отдельным цепочкам для каждого IP(юзера).

# Create chains
$IPT -N FWD_TRAFF_IN
#create chains for every IP in our subnet
for i in `seq 1 254`;
        do
        $IPT -N FWD_TRAFF_IN_192.168.0.$i
        done

...
######################### Traffic Counter ###############################

$IPT -A FORWARD -p ALL -i $iface1 -j FWD_TRAFF_IN
for i in `seq 1 254`;
do
$IPT -A FWD_TRAFF_IN -d 192.168.0.$i -j FWD_TRAFF_IN_192.168.0.$i
$IPT -A FWD_TRAFF_IN_192.168.0.$i -j RETURN
done
$IPT -A FWD_TRAFF_IN -j RETURN
##########################
...

Теперь осталось тока считывать занчение трафика для каждого юзера.
Например так:

iptables -L FWD_TRAFF_IN_192.168.0.93 -v -x -n # 93-й для примера, надо пройтись ссотв по каждому.

Потом записываем куда-нить полученое знаечение, и обнуляем счётчик

iptables -Z FWD_TRAFF_IN_192.168.0.93

Вроде всё.

Ну помогло хоть?

Ну помогло хоть?

Пока разбираюсь, но в лоб не

Пока разбираюсь, но в лоб не работает: цепочки оказываются пустыми, не понятно как делать форвардинг. Я делал так:

iptables -I FORWARD -i ${LAN} -d 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i ${LAN} -s 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

Если влепить код с цепочками, то они оказываются пустыми, если убрать последнюю строчку с маскарадингом, то вообще ничего не работает. В общем я не совсем понимаю как тут всё организовать, а углубляться в дебри iptables нет совсем времени. Спасибо, кстати, за разъяснения.

Цепочки оказваются пустыми,

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

1. создание цепочек.

# Create chains
iptables -N FWD_TRAFF_IN
#create chains for every IP in our subnet
for i in `seq 1 254`;
        do
        iptables -N FWD_TRAFF_IN_192.168.1.$i
        done

2. Маскарадинг

iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o ${WAN} -j MASQUERADE

3. Непосредственно подсчёт.

 ######################### Traffic Counter ###############################

iptables -A FORWARD -p ALL -i $iface1 -j FWD_TRAFF_IN
for i in `seq 1 254`;
do
iptables -A FWD_TRAFF_IN -d 192.168.1.$i -j FWD_TRAFF_IN_192.168.1.$i
iptables -A FWD_TRAFF_IN_192.168.1.$i -j RETURN
done
iptables -A FWD_TRAFF_IN -j RETURN
##########################

4. Разрешение форварда cнаружи и во внутрь для установленных соединений.

iptables -A FORWARD -s 192.168.1.0/255.255.255.0 -i ${LAN} -p all -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.1.0/255.255.255.0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Вроде всё.
Также обязательно почитай про iptables, там всё оч хорошо объясняется http://www.opennet.ru/docs/RUS/iptables/

угу

Так действительно работает, спасибо за пример. Байты считаются. А source и destination так и должны быть всегда 0.0.0.0/0?

Ы

Satarsa написал(а):
А source и destination так и должны быть всегда 0.0.0.0/0?

Ога. Во всяком случае у меня тоже так.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".