Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Возможно ли пустить торренты через ppp0, а все оставльное через ppp1?  (Прочитано 3700 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
А, извиняюсь... не проснувшись брякнул. Тогда либо виртуалка (если железо позволяет), либо запускать от определённого пользователя торрент и маркировать трафик через iptables.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн nimnul1980

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
ну вобщем картина таже и теже провайдеры.  ppp1=byfly ppp0=internet. живут и друг другу не мешают.но  вот как   клиент трекера заставить сидеть на ppp1 так и не понял. причем тут маркировка. может кто нить отважится отписать для не особо одаренных в виде мануала.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Перепечатка документации - $5/страница.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн nimnul1980

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
торент клиент усердно не хочет ходить по указанным в настройках портах, --pid owner больше не работает. как еще отловить пакеты из клиента я хз. зпускаться из под другого пользователя как минимум не удобно...

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
торент клиент усердно не хочет ходить по указанным в настройках портах, --pid owner больше не работает. как еще отловить пакеты из клиента я хз. зпускаться из под другого пользователя как минимум не удобно...
Настроить запуск демона один раз под нужным пользователем - неудобно? Вы, батенька, нахал...
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн nimnul1980

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
да не нахал, а отсутствие опыта+ночной тупняк..

Оффлайн kobaltd

  • Активист
  • *
  • Сообщений: 273
    • Просмотр профиля
Давайте раз и навсегда разберемся с 2+ провами и прочей фигней - а то куча советов которые вообще не катят.

Условие есть роутер (linux) с 2 и более подключения к интернету - для простоты объяснения возьмем что у нас у каждого подключения фиксированные реальные ip.
Задачу можно разделить на 2 этапа
1) Настроить маршрутизацию для того чтобы "интернет" ходил через двух провайдеров одновременно
2) заворачивать определенный трафик через выбранного провайдера

Для решения первой задачи необходимо настроить маршрутизацию. Немного теории про Defaul Gateway (шлюз по умолчанию) - все что подключается в компьютеру по
TCP/IP имеет как минимум 2 атрибута - это адрес (ip) и маска сети (network mask) в сумме эти два параметра говорят системе какие адреса доступны с данного
подключения (сетевой карты, ppp подключения и т.д.) - и к этим адресам пакету будут "выплюнуты" с данного подключения и как они дальше пойдут задача другово
сетевого оборудования. Но что делать если надо отправить пакет в сеть которая неизвестна данному компьютеру, т.е. нет ни одного подключения которое имело бы данный
адрес в доступных наборах ip+netmask - тогда система смотрит на адрес указанный в параметре Default Gateway (шлюз по умолчанию) и отправляет пакеты на него,
а устройство которое уже имеет этот адрес перенаправит его уже дальше.
Теперь про "маршрутизацию" - вкратце это правило которое указывает куда отправлять пакет до определенного адреса или сети.

теперь приступим к нашей задаче. Мы подключились к двум провайдерам и нам надо сделать доступными их оба одновременно. Но что это значит - а это значит что пакеты допустим
до www.ru должны ходить и через первого провайдера и через второго. Вспоминаем про Defaul Gateway, т.к. мы врядли подключены к сетке где присутствует данный сервер то пакеты
к нему пойдут через наш шлюз по умолчанию, т.е. только через одного из двух провайдеров (сразу скажу без разницы через кого они пришли) – от сюда вывод - нам надо как то сказать
системе что у нас 2 провайдера и два шлюза по умолчанию. Тут нам приходит на помощь iproute2 (может и есть какие то другие решение - "платные допустим", но мы и не рассматриваем)
чем же отличается route от iproute2 (что нам интересно в рамках данной задачи) - тем что iproute2 позволяет держать не одну а много таблиц маршрутизации и правила на основании
которых будет принято решение о том какую таблицу использовать для конкретного случая. Приступим
1) там нужно сделать 2 таблицы (или более если 2+ провайдера) в которые мы поместим информацию об имеющихся у нас сетях и ШЛЮЗАХ ПО УМОЛЧАНИЮ
для это в файле /etc/iproute2/rt_tables добавим наши новые таблицы любым удобным вам способом (это обычный текстовый редактор)
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
101     prov1
201     prov2
номера могут быть любыми и имена тоже, желательно только чтобы номер был младше чем номер у таблицы main
далее надо заполнить эти таблицы (для автоматизации можно использовать любой способ, rc.local или скрипты при поднятии интерфейса баз разницы)
введем конкретику, будем считать что у нас все подключается по езернету
пров1 выдает нам адрес 195.195.195.2 сеть провайдера 195.195.195.0/255.255.255.0 шлюз по умолчанию 195.195.195.1 интерфейс eth0
пров2 выдает нам адрес 196.196.196.2 сеть провайдера 196.196.196.0/255.255.255.0 шлюз по умолчанию 196.196.196.1 интерфейс eth1
локальная сеть адрес нашей машины 192.168.0.2 сеть 192.168.0.0/255.255.255.0 интерфейс eth2

приступим

ip route add 192.168.0/24 dev eth2 table prov1 - добавили в таблицу маршрутизации нашу локальную сеть, для того чтобы когда пакет попадет туда система могла принять решение
его перенаправлении в нашу локальную сеть через интерфейс eth2
ip route add 195.195.195.0/24 dev eth0 table prov1 - добавили сеть провайдера
ip route add 127.0.0.0/8 dev lo table prov1 - добавили наш loopback интерфейс - кто то говорит что надо, кто то говорит что не надо - дело вкуса - я добавляю, хуже от этого
не становиться
ip route add 0.0.0.0/0 via 195.195.195.1 dev eth0 table prov1 - вот он наш шлюз по умолчанию до первого провайдера
все таблицу маршрутизации до первого провайдера заполнили, аналогично заполняем таблицу маршрутизации до второго провайдера меня соответственно значения сетей и интерфейсов
ip route add 192.168.0./24 dev eth2 table prov2
ip route add 196.196.196.0/24 dev eth1 table prov2
ip route add 127.0.0.0/8 dev lo table prov2
ip route add 0.0.0.0/0 via 196.196.196.1 dev eth1 table prov2

таблицы заполнили - теперь нам надо задать правила по которым будут пакеты отправляться в нужную таблицу
тут несколько сложне - есть 2 подхода, явное указание и с помощью меток.

явное указание:
ip rule add from 195.195.195.2 table prov1
ip rule add from 196.196.196.2 table prov2

Здесь мы завели два правела - если пакет будут уходить адресс 195.195.195.2, т.е. со стороны первого провайдера
 то принимать решение о маршрутизации надо на основании таблицы prov1, а там у нас указан шлюз по умолчанию
на первого провайдера - все правильно т.к. нам нужно, если пакет уходит с 196.196.196.2 то обрабатывать
по таблице prov2 - :) замечательно - теперь к нам можно достучаться с интернета по любому адресу и получить ответ
с соответствующего интерфейса.
теперь нам надо определиться, а с какого интерфейса мы будет сами ходить в инет. если посмотреть таблицы маршрутизации
то там есть таблица main в которой будет тоже шлюз по умолчанию. Таблицы main сработает тогда когда пакет не попадает ни под одно из существующих правил
т.е. весь трафик инициированный нашим сервером пойдет через этот шлюз - как можно это решить.
прописать правила для все/нужных нам сетей/адресов через конкретную таблицу
ip rule add to 8.8.8.8 table prov1
ip rule add to 194.87.0.50 prov2
здесь мы сказали что dns сервера от google мы пойдем через первого провайдера, а до www.ru пойдем через второго - пакеты то всех остальных пойдут через шлюз
по умолчанию который указан в таблице main (ip route list - чтобы его посмотреть)
можно принимать решение о маршрутизации с помощью iptables
iptables -t nat -A OUTPUT -p tcp --dport 25 -j SNAT --to-source 196.196.196.2 - здесь мы сказали что все исходящие на 25 порт пойдут от
адреса выданного нам вторым провайдером, т.е. пойдут через таблицу prov2
с локальным инетом разобрались - есть вариант когда можно отправлять пакеты с обоих интерфейсов сразу - балансировка по соединениям
для этого достаточно просто в таблице указать main указать соответствующий маршрут
ip route replace default scope global nexthop via 195.195.195.1 dev eth0 weight 8 nexthop via 196.196.196.1 dev eth1 weight 2 - здесь мы сказали
что устанавливать соединение через обоих провайдеров в пропорции 8 к 2 т.е. из 10 соединений в среднем 8 пойдут через первого а 2 через второго.

Вот немного теории и практики. Теперь осмысливая все выше изложенное нам надо как то разрулить наш торрент клиент
И так задача - сделать так чтобы торренты ходили через выбранного нами провайдера
Решение о том через кого они будут ходить по таблицам маршрутизации может быть принято только с того момента когда мы определимся с кого интерфейса они будут уходить
т.е. торрент это p2p связь - т.е. программа с сайта получает список адресов людей у кого в данный момент есть интересующая нас информация и потом НАПРЯМУЮ цепляется к ним
логично что мы не можем через ip route to прописать их всех т.е. их очень много и мы их всех не знаем. Остается 2 пути
1. заставить программу "слушать" только нужный нам интерфейс
2. самим управлять соединениями, которые устанавливает программа.

итак 1
делаем man deluged и о чудо вычитывем
 -i INTERFACE, --interface=INTERFACE
              Interface daemon will listen for bittorrent connections on, this should be an IP address
вот и собственно все что нам требовалось дальше осталось только добавить параметр в скрипт запуска демона.
разберем второй вариант - вдруг параметр покоцают
сами мы можем принять решение только на основании портов с которых и на которые приходят соединения. Сразу скажу просто закрыть порты на вход со второго провайдера
это не вариант т.к. другие клиенты будут пытаться подсоединиться к нему, но не подключаться, мы получим все таки входящий трафик и если у данной раздачи мало сидеров и пиров
то и получим провал по скорости, т.к. часть из них не сможет к нам подключиться. Т.к. нам надо сделать SNAT для определенных просто через того провайдера который нам нужен
опять смотрим настройки конфигурации core.conf - находиться он по пути /home/<имя пользователя от кого запущен демон>/.config/delige/
в нем есть параметр listen_ports выставляем его в какой нибуть фиксированный порт допустим 6881,6881 и перезапускаемся
если посмотреть tcpdump-ом видим что все соединения у нас идут с использованием нашего порта - ура то что нужно значит просто пишем
iptables -t nat -A OUTPUT -p tcp --sport 6881 -j SNAT --to-source 196.196.196.2
все мы завернули наш deluge через второго прова

Есть разные варианты: через метки, через uid пользователя, через анализ сигнатуры (не всегда подходит) - можно изгаляться по разному - но основа технологий всегда iptables - iproute2. Если интересно пишите - напишу.
З.Ы.За ошибки не ругайте, писал с работы без тестового компа под рукой



Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
iptables -t nat -A OUTPUT -p tcp --sport 6881 -j SNAT --to-source 196.196.196.2
Проверь, этот костыль обречён... Этим должен заниматься iproute2

в нем есть параметр listen_ports выставляем его в какой нибуть фиксированный порт допустим 6881,6881 и перезапускаемся
если посмотреть tcpdump-ом видим что все соединения у нас идут с использованием нашего порта - ура то что нужно значит просто пишем
Не все, а только входящие tcp-соединения. А исходящие tcp-соединения всегда идут с другим, случайным sport... В этом то и главная проблема, которая у тебя не решена, но решается через другие способы, перечисленные тобой  ;)

Оффлайн kobaltd

  • Активист
  • *
  • Сообщений: 273
    • Просмотр профиля
действительно упустил - исправляюсь - в том же конфиче есть параметр outgoing_ports - поидеи то что нужно - задаем диапазон и добавляем соответствующее правило в iptables

Пользователь решил продолжить мысль 08 Ноября 2010, 19:11:47:
iptables -t nat -A OUTPUT -p tcp --sport 6881 -j SNAT --to-source 196.196.196.2
Проверь, этот костыль обречён... Этим должен заниматься iproute2

да костыль - но он работает какая - разнича так или через метки - iproute2(3,4,5) не умеет рулить конектами от конкретного сервиса, не его это задача, поэтому приходиться заниматься такимы костылями. Такими задачами должен заниматься тот сервис который работает с сетью (выбирать или иметь возможность выбора с какого интерфейса ему вещать), но если "не до программеры" это не прудусмотрели то тут только 2 способа или комтыли или самому править исходники, второе сложнее чем первое.
« Последнее редактирование: 08 Ноября 2010, 19:11:47 от kobaltd »

Оффлайн surikan

  • Любитель
  • *
  • Сообщений: 85
    • Просмотр профиля
Поставь Ktprrent, в настройках выбери ppp0


Kubuntu amd64

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
да костыль - но он работает
Он не работает!

Оффлайн kobaltd

  • Активист
  • *
  • Сообщений: 273
    • Просмотр профиля
сори не обратил внимание - OUTPUT - там надо ставить метки - это для способа через метки
ip rule add fwmark 0x2 lookup prov2
iptables -t mangle -A INPUT -i eth1 -j CONNMARK --set-mark 0x2
iptables -t mangle -A OUTPUT  -p tcp  --sport 6881 -j MARK --set-mark 0x2
iptables -t mangle -A FORWARD -i eth1 -j CONNMARK --set-mark 0x2
iptables -t mangle -A FORWARD -o eth1 -j CONNMARK --set-mark 0x2
iptables -t nat -I POSTROUTING -m connmark --mark 0x2 -j SNAT --to-source 196.196.196.2

вроде так если ничего не попутал. Есчо раз звеняюсь за неверную инфу - компа под рукой нет. Писал по памяти
« Последнее редактирование: 08 Ноября 2010, 19:56:55 от kobaltd »

Оффлайн nimnul1980

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
 возник еще вопрос касательно похождений пакетов  по цепочкам iptables. когда локальных процесс посылает пакет, то сначала принимается решение о маршрутизации согласно прописанных таблиц, а затем расставляются метки ,или наоборот. сначала метки затем принятие решений о маршруте следования. с какой целью интересует. нельзя ли весь известный трафик http icq mirc который можно явно идентифицировать, отправить через одно vpn соединение, промаркировав его как нить. а все что идентифицировать не получается направить через соединение по умолчанию, дефолтовый GW.
« Последнее редактирование: 16 Ноября 2010, 12:44:21 от nimnul1980 »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
http://www.docum.org/docum.org/kptd/
Распечатай себе на A0 и повесь на стену.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Vovanys

  • Участник
  • *
  • Сообщений: 188
  • Эээээ.... без коментариев
    • Просмотр профиля
    • vovanys.com
самый тупой вариант, запусти виртуалку, и пробрось ее сетевой интерфейс на халявный интерфейс
винт через NFS подруби и пусть раздается.

 

Страница сгенерирована за 0.037 секунд. Запросов: 23.