Интеренет через двух провайдеров
От: cppguard  
Дата: 23.09.22 22:48
Оценка:
Дано: две квартиры, два разных провайдера, две домашние локальные сети, загрузка обеих сетей неравномерная, между сетями есть мост. Каким образом можно максимизировать траффик наружу, задействовав обе сети? При этом нужно сохранить приоритет траффика каждой сети отдельно. Грубо говоря, хочется сделать так, чтобы можно было загрузить неспользованную пропускную способность второй сети, но никоим образом не мешать собственному траффику этой сети. Почитал про QoS, traffic shaping, но пока непонятно, как сделать так, чтобы пакеты первой сети не терялись, если вторая сеть загружена и не пропускает их.
Re: Интеренет через двух провайдеров
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.09.22 07:03
Оценка: 80 (1) +2
Здравствуйте, cppguard, Вы писали:

В общем виде задача неподъёмно сложная.
Я даже приблизительно боюсь описывать возможные приближения к решению, все они требуют высококвалифицированных админов, специально настроенных раутеров на выходе, динамической маршрутизации внутри... и всё равно будет только очень частичная эффективность.
Коробочного решения не ищите — максимум их умений это из одного раутера перебросить часть трафика по фиксированным критериям, или весь при пропадании аплинка (которое они ещё и далеко не всегда детектят).

Но в общем нужно:
1) Свои раутеры (условно, коробочки с Linux, куда можно заливать свой софт), связанные линком. NAT на каждом для обеих сетей.
2) Свой протокол общения раутеров, который говорит "у меня сейчас есть свободный ресурс на аплинке" (и учти, что "сейчас" не значит, что через полминуты его не будет). Штатного такого не знаю, они все требуют реальных анонсов от таких аплинков.
3) Connection tracking в них для применяемых протоколов (минимум для TCP и UDP), который позволяет делать свои хуки для новых соединений.
4) QoS на выходе согласно источнику пакетов, который собирает статистику загрузок и потерь.
5) Код, решающий для этих новых соединений, куда их отправлять, согласно загрузке сети.
6) Вероятно, код, который по conntrack-таблице рубит чужие соединения при перегрузке (чтобы на следующий заход они пытались вырываться через свой родной раутер). Надо учитывать при этом загрузку не только на аплоад, но и на даунлоад.

Всё вместе тянет на аспирантский диплом или PhD диссер, если мерять эффективность в реальных условиях и сравнивать алгоритмы для (2), (5), (6).
The God is real, unless declared integer.
Re: Интеренет через двух провайдеров
От: fk0 Россия https://fk0.name
Дата: 24.09.22 13:00
Оценка: 6 (1)
Здравствуйте, cppguard, Вы писали:

C>Дано: две квартиры, два разных провайдера, две домашние локальные сети, загрузка обеих сетей неравномерная...


См. https://github.com/lstein/Net-ISP-Balance/

How it Works

The script uses two load balancing techniques. The first is to set up a multipath default routing destination as described at http://lartc.org/howto/lartc.rpdb.multiple-links.html

 ip route add default \
    nexthop via 206.250.80.122  dev ppp0 weight 1 \
    nexthop via 198.5.13.201    dev eth0 weight 1


This balances network sessions originating from the router, but does usually not work for forwarded (NAT-ed) sessions from the LAN. To accomplish the latter, the script uses a combination of ip routing tables for outgoing connections, the firewall mark (fwmark) mechanism to select tables, and the iptables "mangle" chain to randomly select which ISP to use for outgoing connections:

 iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctstate NEW \
          -m statistic --mode random --probability 1 -j MARK-ISP1
 iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctstate NEW \
          -m statistic --mode random --probability 0.5 -j MARK-ISP2


This strategy is described at https://home.regit.org/netfilter-en/links-load-balancing/. The module always gives each ISP equal weight; a future version may support the ability to weight traffic towards one ISP or another.

Короче, можно без чудоюдо скрипта самому также сделать.
Re[2]: Интеренет через двух провайдеров
От: cppguard  
Дата: 26.09.22 05:32
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, cppguard, Вы писали:


N>В общем виде задача неподъёмно сложная.

N>Я даже приблизительно боюсь описывать возможные приближения к решению, все они требуют высококвалифицированных админов, специально настроенных раутеров на выходе, динамической маршрутизации внутри... и всё равно будет только очень частичная эффективность.
N>Коробочного решения не ищите — максимум их умений это из одного раутера перебросить часть трафика по фиксированным критериям, или весь при пропадании аплинка (которое они ещё и далеко не всегда детектят).

N>Но в общем нужно:

N>1) Свои раутеры (условно, коробочки с Linux, куда можно заливать свой софт), связанные линком. NAT на каждом для обеих сетей.
N>2) Свой протокол общения раутеров, который говорит "у меня сейчас есть свободный ресурс на аплинке" (и учти, что "сейчас" не значит, что через полминуты его не будет). Штатного такого не знаю, они все требуют реальных анонсов от таких аплинков.
N>3) Connection tracking в них для применяемых протоколов (минимум для TCP и UDP), который позволяет делать свои хуки для новых соединений.
N>4) QoS на выходе согласно источнику пакетов, который собирает статистику загрузок и потерь.
N>5) Код, решающий для этих новых соединений, куда их отправлять, согласно загрузке сети.
N>6) Вероятно, код, который по conntrack-таблице рубит чужие соединения при перегрузке (чтобы на следующий заход они пытались вырываться через свой родной раутер). Надо учитывать при этом загрузку не только на аплоад, но и на даунлоад.

N>Всё вместе тянет на аспирантский диплом или PhD диссер, если мерять эффективность в реальных условиях и сравнивать алгоритмы для (2), (5), (6).


А если сделать так. Настраиваем обе сети на балансировку трафика с помощью друг друга. Далее в каждой сети настраиваем queueing discipline так, чтобы в первую очередь уходили свои пакеты, а потом уже пакеты соседней сети.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.