Здравствуйте.
У меня стоит сервер на Mandrake Linux 10, MySQL 4.0.18 и netacct-mysql 0.73. Есть 2 интерфейса: eth0(192.168.11.1) - смотрит в локальную сеть, eth1(192.168.246.130) - смотрит на роутер с ip 192.168.246.129, а тот дальше к провайдеру, ну это не столь важно.
Так вот, я использую iptables и SNAT, правило следующее:
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.246.130
Если я хочу разрешить доступ клиентам в Интернет (по умолчанию в iptbales все пакеты в таблице FORWARD - DROP, PREROUTING & POSTROUTING - ACCEPT), то добавляю правило в таблицу FORWARD:
iptables -D FORWARD -p ALL -s 192.168.11.100 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT
iptables -D FORWARD -p ALL -d 192.168.11.100 -j ACCEPT
Если хочу запретить, то просто удаляю эти правила.
Я считаю трафик netacct-mysql 0.73 с полным логинингом. Вот конфиг:
mysql_user acct
mysql_password ********
mysql_host localhost
mysql_database netacct
mysql_table accounting
pidfile /var/run/nacctd.pid
flush 300
fdelay 60
file /var/log/net-acct
dumpfile /var/log/net-acct-dump
notdev eth1
device eth0
iflimit eth0
ignoremask 255.255.255.0
ignorenet 127.0.0.0 255.0.0.0
debug 2
debugfile /tmp/nacctd.debug
headers lo 14 12
headers eth 14 12
hostlimit 192.168.11.100
hostlimit 192.168.11.101
hostlimit 192.168.11.102
hostlimit 192.168.11.103
hostlimit 192.168.11.104
Судя из конфига, я считаю трафик для клиентов указаных в hostlimit на интерфейсе eth0, т.е. на том, который смотрит в локальную сеть.
Вопорс у меня в следующем:
даже если я запрещаю доступ клиентам в инет (см. выше), то все равно при активности клиента (когда он шлет пакеты в Интернет), netacct все равно считает их и пишет в базу. Понятно, что он и должен считать, так как они проходят eth0 интерфейс, но дальше на eth1 не идут, из-за правил в таблице FORWARD.
Если в конфиге netacct я меняю eth0 на eth1, то из-за SNAT, все адреса клиентов меняются на адрес eth1 интерфейса и получается, что я не могу разделить трафик по клиентам.
Как можно сделать так, чтобы трафик считался на eth1 интерфейсе и его можно было разделить по клиентам, т.е. чтобы netacct видел адреса клиентов а не адрес после SNAT.
Или сделать так, чтобы трафик считался на eth0 интерфейсе, но при закрытии доступа в Интернет, не считался netacct-ом трафик. Он конечно не большой (даже лучше сказать маленький), но все равно как-то неправильно получается.
Спасибо за помощь.
P.S. Извеняюсь за столь большое сообщение :-).