Jump to content

Iptables Per-Connection-Classifier


Recommended Posts

Заметил в микротике прикольную фичу - PCC.

Позволяет разделить трафик на несколько потоков, причем равномерно.

Очень полезно для overload NAT-а кучи сеток через несколько внешних адресов, например

/ip firewall mangle
add action=mark-connection chain=prerouting new-connection-mark=nat-1 passthrough=yes per-connection-classifier=src-address:8/0 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-2 passthrough=yes per-connection-classifier=src-address:8/1 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-3 passthrough=yes per-connection-classifier=src-address:8/2 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-4 passthrough=yes per-connection-classifier=src-address:8/3 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-5 passthrough=yes per-connection-classifier=src-address:8/4 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-6 passthrough=yes per-connection-classifier=src-address:8/5 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-7 passthrough=yes per-connection-classifier=src-address:8/6 \
    src-address=10.100.0.0/16
add action=mark-connection chain=prerouting new-connection-mark=nat-8 passthrough=yes per-connection-classifier=src-address:8/7 \
    src-address=10.100.0.0/16
/ip firewall nat
add action=src-nat chain=srcnat connection-mark=nat-1 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-2 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-3 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-4 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-5 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-6 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-7 out-interface=vlan452 to-addresses=194.44.166.xxx
add action=src-nat chain=srcnat connection-mark=nat-8 out-interface=vlan452 to-addresses=194.44.166.xxx

Есть вопрос - а как реализовать такой же рулсет с помощью iptables?

 

 

Edited by mr.Scamp
Link to post
Share on other sites

В iptables такие костыли вообще не нужны, делайте обычный snat в диапазон адресов с ключиком persistent или как оно там.

Link to post
Share on other sites
$ipt -t nat -A POSTROUTING -s 172.16.0.128/26 -o vlanXXX -j SNAT --to-source Y.Y.Y.195

$ipt -t nat -A POSTROUTING -s 172.16.0.192/26 -o vlanXXX -j SNAT --to-source Y.Y.Y.196

$ipt -t nat -A POSTROUTING -s 172.16.1.0/26 -o vlanXXX -j SNAT --to-source Y.Y.Y.197

У меня так

Link to post
Share on other sites

SNAT в диапазон адресов не катит, соединения одного и того же юзера размываются по всему диапазону.

Ключик --persistent добавляет хэширование src-dst ip при выборе внешнего адреса, но тоже не то немного, насколько я понимаю, один и тот же юзер будет иметь разные исходящие IP при посещении разных ресурсов.

 

Пока что присматриваюсь к DNETMAP, штука интересная, но нужно много внешних адресов, по адресу на каждого активного клиента.

Link to post
Share on other sites

 

У меня так

 

 

Тут недостаток в том, что пользователи получают неизменный внешний адрес, что не всегда есть желательно.

Да и при большом количестве внутренних подсетей таким рулсетом неудобно управлять из-за его громоздкости.

 

Мне вот нравиться решение задачи NAT-а в пул адресов с помощью pf на FreeBSD

nat on vlan210 from 10.200.0.0/16 to any -> 193.106.147.zzz/28 source-hash

Link to post
Share on other sites

Ключик --persistent добавляет хэширование src-dst ip при выборе внешнего адреса, но тоже не то немного, насколько я понимаю, один и тот же юзер будет иметь разные исходящие IP при посещении разных ресурсов.

А не факт что будут разные, проверьте. И даже если будут - что с того? Распределение равномерное работает как и требовалось.
Link to post
Share on other sites

 

 

Тут недостаток

Ну не самый изящный способ. )) Но телега тянет, сети каждый день не добавляются. При большом количестве сетей на баше можно разребать.

Link to post
Share on other sites
А не факт что будут разные, проверьте. И даже если будут - что с того? Распределение равномерное работает как и требовалось.

Могут быть проблемы с сайтами, где фронт и контент находятся за разными IP-адресами, они требуют, чтобы скачивание/стриминг контента было с того же адреса, откуда был загружен плеер.

Обязательно проверю, кстати.

Link to post
Share on other sites

 

А не факт что будут разные, проверьте. И даже если будут - что с того? Распределение равномерное работает как и требовалось.

Могут быть проблемы с сайтами, где фронт и контент находятся за разными IP-адресами, они требуют, чтобы скачивание/стриминг контента было с того же адреса, откуда был загружен плеер.

Обязательно проверю, кстати.

 

Насколько я помню при persistent как раз таки по src ip идет хеширование, и проблем не возникает.
Link to post
Share on other sites

Проверил, действительно хэшируется по src-ip, причем даже после ребута внешний адрес остается тем же.

Как все просто оказалось на самом деле ;-) Спасибо всем за советы.

Link to post
Share on other sites

Кстати может кто знает, как в Debian реализовать Per Connection Classifier, а именно балансировку каналов по src адресу? Разбивать трафик по src допустим так - первый ip пошел через isp1, второй ip пошел через isp2, третий снова по isp1 и так далее.

Link to post
Share on other sites

Кстати может кто знает, как в Debian реализовать Per Connection Classifier, а именно балансировку каналов по src адресу? Разбивать трафик по src допустим так - первый ip пошел через isp1, второй ip пошел через isp2, третий снова по isp1 и так далее.

а два дефолта с одинаковым весом не работают?

Link to post
Share on other sites

 

Кстати может кто знает, как в Debian реализовать Per Connection Classifier, а именно балансировку каналов по src адресу? Разбивать трафик по src допустим так - первый ip пошел через isp1, второй ip пошел через isp2, третий снова по isp1 и так далее.

а два дефолта с одинаковым весом не работают?

 

Не работают. И nexthop тоже не работает корректно. Пример - заходишь в вк, вроде зашло, а музыка не играет, потом во все авторизацию сбрасывает, все потому что последующее соединение идет через другой шлюз.

 

Надо как-то маркировать и направлять в нужные таблицы.

 

Вот если бы к этому привязать как-то src адрес, цены не было б.

iptables -t mangle -N NEW_OUT_CONN

iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1

iptables -t mangle -A NEW_OUT_CONN -m statistic --mode random --probability 0.50 -j RETURN

iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2

Edited by fet4
Link to post
Share on other sites

Кстати может кто знает, как в Debian реализовать Per Connection Classifier, а именно балансировку каналов по src адресу? Разбивать трафик по src допустим так - первый ip пошел через isp1, второй ip пошел через isp2, третий снова по isp1 и так далее.[/size]

Решение классическое, через ip rule.

1) создаете 2 таблицы маршрутизации (t1 и t2 к примеру). Как создавать искать лень, ищите. Добавить строчку в /etc/iproute/rt_tables или где-то рядом.

2) Делаете

ip rule add from 192.168.1.0/24 table t1

ip rule add from 192.168.2.0/24 table t2

Классификаторов в rule много, можно задать любые условия. Например по меткам как вы выше делали, хоть это и не тру вей.

3) В таблицы добавляете нужные default GW

ip route add deafult via xx.xx.xx.xx table t1

ip route add deafult via yy.xx.xx.xx table t2

 

Profit.

Edited by KaYot
Link to post
Share on other sites

Не вы не поняли. То что вы написали все есть и работает бомба.

 

Нужно сбалансировать нагрузку от активных клиентов по двум таблицам допустим 50/50. И не просто сбалансировать, а по src адресу. Чтоб часть ip пошла через первую табличку, вторая часть во вторую. До окончания сесси

Edited by fet4
Link to post
Share on other sites

Создайте 100шт ip rule по 10 адресов в каждом. Поиск там хешируемый, производительность не пострадает.

Link to post
Share on other sites

KaYot, ему хочется динамически от нагрузки разбрасывать.

В таком случае нужно прикрутить скрипт к ip-up (pppoe) или к ДХЦП при выдаче ип маркировать или рулить. Но это опять же не динамически по нагрузке.

Link to post
Share on other sites

KaYot, ему хочется динамически от нагрузки разбрасывать.

Хотя бы по очереди пихать то в одну то в другую табличку.

 

 

 

KaYot, ему хочется динамически от нагрузки разбрасывать.

В таком случае нужно прикрутить скрипт к ip-up (pppoe) или к ДХЦП при выдаче ип маркировать или рулить. Но это опять же не динамически по нагрузке.

 

Думаю так и придется, делать костыль. А как лучше реализовать на bash выборку ip, чтобы чередовать таблицы маршрут.? 

Edited by fet4
Link to post
Share on other sites

ip-down - удление правила из таблички, ip-up - добавление правила в ту табличку, где меньше всего записей...

Так лучше всего. Но, опять же, больше записей не означает бОльшую нагрузку на канал.

ИМХО нормально эту задачу не решить.

 

Если речь об аналоге микротиковских правил, то тут уже ответили. Если о динамически по нагрузке, то нормально никак. Нагрузка сама по себе динамическая.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By ubiquiti2024
      Продам Точку доступа MikroTik RB912R-2nD-LTm&R11e-LTE
      Купив не підійшла.
      Стан новий.
      ціна 4100 грн
    • By x-net
      Продам вживаний світч Mikrotik CSS326-24G-2S+: 24 мідних гігових та 2 SFP+ порти, вуха, коробка, БЖ. 4 тис. грн.
    • By igra
      Привіт. Підскажіть таке питання.  Є два канала.  один по оптиці другий резерв на 4g. канали перелючаються все ок.  на оптиці все парцює в правилах фаєрвола проброс портів указан на sfp інтерфейс. при відключення накалана sfp  не можу зайти с канала 4г. вказую що інтерфейс 4г порти не прокидує. як вказати сразу два інтерфейса
    • By ГрозаИнтернета
      Всем привет. Сеть разбили, продаю оборудование, которое удалось спасти.
      Роутер MikroTik 1036-12G-4S - 16500 грн.
      Сервер Dell R410(Xeon L5640(60Вт), 16 Gb RAM, 2x300 Gb SAS, iDrac, Raid, IPMI) - 4500 грн.
      Коммутатор ZyXEL MES-3528 - 2000 грн.
      Коммутатор HUAWEI S2326 - 1500 грн.
      Коммутатор Dell PowerConnect 6224F(опц.10G) - 5000 грн
      Коммутатор D-Link DGS-3627G (нюанс) - 1000 грн
      OLT BDCom P3310(Пролайн упс) - 9000 грн
      Упс APCSmart-UPS RT 2000 + картаAP9619 + кабель для подключения внешних АКБ - 12500 грн.
      Коммутатор ELTEX MES2324FB AC в коробке - 10000
      OLT EPON E9004-D 10G (Пролайн упс) в коробке - 10000
      Кабель OK-NET S/FTP Cat.6a 500Mhz LSOH AWG 23 4pr 280 метров - 8500
      Куча SFP EPON C+++, SFP SC, сетевые карты, твинакс кабеля.

    • By Інет.укр
      Продам mikrotik rb2011 червоний 1200грн
      MikroTik RB2011UiAS  1400грн
      MikroTik RB3011 новий $85
      MikroTik RB4011iGS+RM  новий 170$ 
      MikroTik RB750UP - 550грн
      MikroTik  RB750P-PB - 800грн
      MikroTik RB960PGS-PB PowerBox Pro  Новий 80$
      RB433, RB600, RB800 ціна договірна.
       
×
×
  • Create New...