LINUX.ORG.RU
решено ФорумAdmin

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

 , ,


4

2

Добрый день! Есть 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 (всего исправлений: 6)

Вам нужен ″-m recent″. И два маркера. По ″-m string″ выставляете маркер 100, потом по марекеру 100 заноситие адрес в список ″-m recent″, потом проверяете все пакеты по этому списку и ставите им маркер 101. И уже по маркеру 101 маршрутизируете.

mky ★★★★★
()
Ответ на: комментарий от mky

т.е. это выглядит примерно так:

#установили марку 100
iptables  -t mangle -A PREROUTING -m string --string "find_node" --algo bm -j MARK --set-mark 100
iptables  -t mangle -A PREROUTING -m ndpi --bittorrent -j MARK --set-mark 100

#заносим src адресс пакета с маркой 100 в список 
iptables -t mangle -A PREROUTING -m mark --mark 100 -m recent --name reroute --set
#ставим марку 101 всем пакетам, src адреса которых есть в списке
iptables -t mangle -A PREROUTING -m recent --name reroute --rcheck --seconds 300 -j MARK --set-mark 101

DW0
() автор топика
Ответ на: комментарий от DW0

В общем да, но я бы добавил что-нибудь, чтобы в reroute попадали только адреса из вашей сети, а не вобще все. Либо чтобы эти правила срабатывали только для src-адресов из вашей сети, либо, чтобы для входящих в вашу сеть пакетов в список заносился dst-адрес (опция --rdest).

mky ★★★★★
()
Ответ на: комментарий от mky

А можно еще по tc вопрос?

Хочу HTB прикрутить.

iptables -t mangle  -A POSTROUTING   -m ndpi --skype -j MARK --set-mark 5
iptables -t mangle  -A POSTROUTING   -m ndpi --rtp -j MARK --set-mark 5
iptables -t mangle  -A POSTROUTING   -m ndpi --sip -j MARK --set-mark 5
iptables -t mangle  -A POSTROUTING   -m ndpi --http -j MARK --set-mark 6

tc qdisc add dev tap_vpn root handle 1: htb default 12
tc class add dev tap_vpn parent 1: classid 1:1 htb rate 9000kbit

/sbin/tc class add dev tap_vpn parent 1:1 classid 1:10 htb rate 128kbit ceil 512kbit prio 0
/sbin/tc class add dev tap_vpn parent 1:1 classid 1:11 htb rate 128kbit ceil 256kbit prio 1
/sbin/tc class add dev tap_vpn parent 1:1 classid 1:12 htb rate 128kbit ceil 128kbit prio 2

/sbin/tc filter add dev tap_vpn parent 1:0 protocol ip prio 1 handle 5 fw classid 1:10
/sbin/tc filter add dev tap_vpn parent 1:0 protocol ip prio 2 handle 6 fw classid 1:11
/sbin/tc filter add dev tap_vpn parent 1:0 protocol ip prio 3 handle 7 fw classid 1:12

/sbin/tc qdisc add dev tap_vpn parent 1:10 handle 100: sfq perturb 5
/sbin/tc qdisc add dev tap_vpn parent 1:11 handle 110: sfq perturb 5
/sbin/tc qdisc add dev tap_vpn parent 1:12 handle 120: sfq perturb 5

Может ли при этом строка

/sbin/tc qdisc add dev tap_vpn parent 1:10 handle 100: sfq perturb 5
как-то влиять на мои промаркированые маркой 100 пакеты в iptables?

DW0
() автор топика
Ответ на: комментарий от DW0

Напрямую, вроде, влиять не должно, но, возможно, что косвенно как-то влияет, если что-то ошибочно определяется (ndpi).

P.S. В iptables есть -j CLASSIFY, может оно вам будет удобнее, чем MARK.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.