Как сбалансировать исходящий трафик с помощью Iptables?

У меня есть сервер centos 7 с 5 IPS, например с 192.168.0.2/29 на 192.168.0.5/29. Я хочу изменить исходящий трафик методом roundrobin, потому что мне нужно использовать все IPS для мой проект. поэтому я пытаюсь настроить iptables с помощью команды

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.1/29 -m statistic --mode nth --every 4 --packet 0 -p tcp --dport 25 -j SNAT --to-source 192.168.0.3
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.1/29 -m statistic --mode nth --every 3 --packet 0 -p tcp --dport 25 -j SNAT --to-source 192.168.0.2

, чтобы она работала правильно. его восходящий порядок приема трафика (192.168.0.3,192.168.0.2) в том же порядке, что и я пытаюсь настроить centos 6, пример его работающего убывающего порядка

(192.168.0.2,192.168.0.3). теперь <я хочу узнать значение - каждых 3 или 4>

3
задан 15 March 2021 в 15:47
1 ответ

Есть два метода. Это действительно статистика. Первый метод (как OP) приводит к следующему:

  • 1/4 ( - каждые 4 ) получает первый выбор
  • 1/3 ( - каждые 3 ) из оставшихся получает 2-й вариант

В вопросе OP только два правила, но можно предположить, что последуют еще два (или еще одно плюс значение по умолчанию):

  • 1/2 оставшихся получает 3-й вариант
  • оставшиеся получают 4-й вариант

Поскольку таблица iptables nat обрабатывает только начальный пакет потока, весь поток будет следовать правилу начального пакета (другие пакеты в том же потоке обрабатываются непосредственно conntrack и не отображается в таблице nat ).

Каждый выбор получил 1/4:

  • 1/4 = 1/4
  • 1/3 * (1 - 1/4) = 1/4

И для оставшейся половины (если правил больше используются):

  • 1/2 * (1-2 * 1/4) = 1/4
  • 1 * (1-3 * 1/4) = 1/4

Другой метод будет иметь было использовать только - каждые 4 в каждом правиле, но изменить модуль с помощью - пакет с правилами, подобными:

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.1/29 -m statistic --mode nth --every 4 --packet 0 -p tcp --dport 25 -j SNAT --to-source 192.168.0.3
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.1/29 -m statistic --mode nth --every 4 --packet 1 -p tcp --dport 25 -j SNAT --to-source 192.168.0.2
[...]
  • 1-е правило получает пакеты, где количество пакетов% 4 = 0 (где% означает «остаток от деления на»): 1/4 из них
  • 2-е правило получает пакеты, в которых количество пакетов% 4 = 1: 1/4 из них

и т. д.

Второй метод может быть проще для понимания, но 1-й метод легче масштабировать: просто добавьте правило со значением для - каждые увеличиваются на единицу, если есть использовать дополнительный круговой алгоритм.

1
ответ дан 23 April 2021 в 23:57

Теги

Похожие вопросы