Цитата Trinux:
Не совсем понял, бред написал я или по поводу opendpi ??? »
|
Прошу прощения за то, что неточно сформулировал свою мысль. Задача, которую Вам требуется решить, достаточно тривиальна.
Она обычно решается при помощи комбинации команд iptables с использованием цели MARK (каждому пакету присваивается тэг, по значению которого будет потом происходить маршрутизация) и команд ip rule (ip - это утилита из пакета iproute2) с помощью которых создаются дополнительные таблицы маршрутизации.
То есть, пакеты с указанным тэгом маршрутизируются с использованием набора правил для конкретной таблицы, а те, у которых тэга нет, маршруизируются с использованием обычной таблицы маршрутизации.
Команда "route" работает только с этой "обычной" таблицей, поэтому её недостаточно для дифференциации трафика по установленному целью MARK тэгу.
То есть, если бы Вам нужно было направить весь трафик через одного провайдера, а, скажем, интернет-серфинг осуществлять через другого, можно было бы использовать набор команд:
iptables -t mangle -A OUTPUT -p tcp --destination-port 80 -j MARK --set-mark 80
ip route add default via <ip шлюза> table http
ip rule add fwmark 80 table http
(в данном случае цель MARK находится в цепочке OUTPUT, поэтому правило действовало бы только на пакеты, отправителем которых был бы сам хост на котором установлен этот набор правил.
Транзитные пакеты, то есть пакеты, которые маршрутизировались бы через этот хост, не попали бы в цепочку OUTPUT и, следовательно, не могли бы получить тэг.
Вернемся к Вашей задаче. Вам нужно пометить тэгом все исходящие пакеты относящиеся к протоколу bittorrent, а потом использовать дополнительную таблицу маршрутизации для того, чтобы установить шлюз для пакетов с этим тэгом.
Остается единственный вопрос: каким образом отличить пакеты отправленные торрент-клиентом от всех остальных?
Правильный способ дифференциаци трафика основан на использовании DPI - deep packet inspection.
В этом случае, пакеты получат тэг даже при использовании нестандартных портов или после трансляции адресов (NAT).
В моем примере, я предложил использовать модуль opendpi, который я знал, потому что пару лет назад им пользовался.
К сожалению, когда я решил освежить свои воспоминания и залез в поисковую систему, выяснилось, что этот проект был закрыт несколько месяцев назад.
В сети я прочитал, что от него было сделано ответвление (fork) получившее название nDPI, ссылку на сайт которого я привел в предыдущем сообщении.
Но, opendpi больше не существует, поэтому предложенный мной метод в таком виде работать не будет.
Я расстроился, обозвал своё предложение бредом и честно признаюсь, что больше ничем не могу Вам помочь.
Уж извините. Единственное, на что я хотел обратить Ваше внимание - это на то, что задача, которую Вам требуется решить не только выполнима, но даже достаточно тривиальна.
Просто тривиальное решение с дифференциацией трафика по диапазону портов мне лично не нравится, потому что я считаю его некрасивым.