LINUX.ORG.RU

Избранные сообщения DW0

Рероут пользователей bittorrent при помощи iptables connmark

Форум — Admin

Добрый день! Есть VPN сервер, и требуется всех торрент качеров отправлять на другой гейт. Делать я буду это следующим образом: 1)Добавляем 2 адреса гейтов в таблицу

ip route add default via x.x.x.x table 101
2)Задам пул из 20 DHCP адресов для юзеров

3)Маркирую траффик торрентов

iptables  -t mangle  -A PREROUTING -m string --algo bm --string "peer_id=" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --algo bm --string ".torrent" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --algo bm --string "announce.php?passkey=" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --algo bm --string "torrent" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --algo bm --string "announce" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --algo bm --string "info_hash" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --algo bm --string "tracker" -j MARK --set-mark 101
iptables -t mangle -A  PREROUTING -m string --string "get_peers" --algo bm -j MARK --set-mark 101
iptables  -t mangle -A PREROUTING -m string --string "announce_peer" --algo bm -j MARK --set-mark 101
iptables  -t mangle -A PREROUTING -m string --string "find_node" --algo bm -j MARK --set-mark 101
iptables  -t mangle -A PREROUTING -m ndpi --bittorrent -j MARK --set-mark 101
4)Сохранить такую же марку на все соединения юзера который качает

5)Роутить по метке на адрес выходного тунеля.

ip rule add fwmark 101 table 101

Помогите пожалуйста разобраться, как можно промаркировать все соединения c адресса, который начал качать торрент?

Была идея вместо маркировки соединений кидать их в LOG

 -j LOG --log-prefix "Iptables: torrent detected"
потом парсить лог и маркировать src адресс виновника. После чего кроном очищать правила раз в 10 минут( чтобы если юзер вдруг вырубил торрент - вернуть его на основной канал). Но логи выходят большие, соответственно достаточно много ресурсов машины уйдет только на это
cat  /var/log/iptables.log | awk  '{print $11}' | awk -F '=' '{print $2}'

Думаю можно как-то грамотно сделать --restore-mark, но не могу никак сам додуматься

 , ,

DW0
()