LINUX.ORG.RU

История изменений

Исправление fet4, (текущая версия) :

# Вытягиваю новые соединения от клиентов
-A PREROUTING -i vlan10 -m conntrack --ctstate NEW -m set --match-set ip_pools src -j new_conn

# Запускаю на балансировку тех. кого нет не в одном списке аплинков
-A new_conn -m set ! --match-set uplink_list src -j balance

# 50% от всех новых соединений чьих src нет не в одном списке добавляю src в список vlan2000
-A balance -m statistic --mode random --probability 0.50000000000 -j SET --add-set vlan2000 src

# Снова проверю есть ли src есть хоть где-нибудь выхожу из балансировки 
-A balance -m set --match-set uplink_list src -j RETURN

# Кто остался добавляю их src в список vlan2001 
-A balance -m statistic --mode random --probability 1.00000000000 -j SET --add-set vlan2001 src

# Поставим всем соединения чьи src есть в списке vlan2000 марку 1
-A new_conn -m set --match-set vlan2000 src -j CONNMARK --set-xmark 0x1/0xffffffff

# Поставим всем соединения чьи src есть в списке vlan2001 марку 2
-A new_conn -m set --match-set vlan2001 src -j CONNMARK --set-xmark 0x2/0xffffffff

# Т.к. списки аплинков с таймаутом 10мин. нужно для того чтобы хранить в списке только активные ip в динамике, чтобы не чистить, 
поддерживаем src в списке если есть новые соединения обновляя timeout. 
Иначе через 10мин. клиент возможно перескочит на другой канал.
-A new_conn -m set --match-set vlan2000 src -j SET --add-set vlan2000 src --exist
-A new_conn -m set --match-set vlan2001 src -j SET --add-set vlan2001 src --exist

# Переносим маркировку соединений в маркировку пакетов.
-A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Только что взял 10 ip с одного списка и выполнил test в другом, дубликатов не оказалось.

# ipset list vlan2000 | wc -l
243
# ipset list vlan2001 | wc -l
210
-A balance -m statistic --mode random --probability 0.50000000000 -j SET --add-set vlan2000 src
-A balance -m set ! --match-set vlan2000 src -j SET --add-set vlan2001 src

В принципе и так можно если два канала связи. Если более уже неудобно так исключать.

Исправление fet4, :

# Вытягиваю новые соединения от клиентов
-A PREROUTING -i vlan10 -m conntrack --ctstate NEW -m set --match-set ip_pools src -j new_conn

# Запускаю на балансировку тех. кого нет не в одном списке аплинков
-A new_conn -m set ! --match-set uplink_list src -j balance

# 50% от всех новых соединений чьих src нет не в одном списке добавляю src в список vlan2000
-A balance -m statistic --mode random --probability 0.50000000000 -j SET --add-set vlan2000 src

# Снова проверю есть ли src есть хоть где-нибудь выхожу из балансировки 
-A balance -m set --match-set uplink_list src -j RETURN

# Кто остался добавляю их src в список vlan2001 
-A balance -m statistic --mode random --probability 1.00000000000 -j SET --add-set vlan2001 src

# Поставим всем соединения чьи src есть в списке vlan2000 марку 1
-A new_conn -m set --match-set vlan2000 src -j CONNMARK --set-xmark 0x1/0xffffffff

# Поставим всем соединения чьи src есть в списке vlan2001 марку 2
-A new_conn -m set --match-set vlan2001 src -j CONNMARK --set-xmark 0x2/0xffffffff

# Т.к. списки аплинков с таймаутом 10мин. нужно для того чтобы хранить в списке только активные ip в динамике, 
поддерживаем src в списке если есть новые соединения обновляя timeout. 
Иначе через 10мин. клиент возможно перескочит на другой канал.
-A new_conn -m set --match-set vlan2000 src -j SET --add-set vlan2000 src --exist
-A new_conn -m set --match-set vlan2001 src -j SET --add-set vlan2001 src --exist

# Переносим маркировку соединений в маркировку пакетов.
-A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Только что взял 10 ip с одного списка и выполнил test в другом, дубликатов не оказалось.

# ipset list vlan2000 | wc -l
243
# ipset list vlan2001 | wc -l
210
-A balance -m statistic --mode random --probability 0.50000000000 -j SET --add-set vlan2000 src
-A balance -m set ! --match-set vlan2000 src -j SET --add-set vlan2001 src

В принципе и так можно если два канала связи. Если более уже неудобно так исключать.

Исходная версия fet4, :

# Вытягиваю новые соединения от клиентов
-A PREROUTING -i vlan10 -m conntrack --ctstate NEW -m set --match-set ip_pools src -j new_conn

# Запускаю на балансировку тех. кого нет не в одном списке аплинков
-A new_conn -m set ! --match-set uplink_list src -j balance

# 50% от всех новых соединений чьих src нет не в одном списке добавляю src в список vlan2000
-A balance -m statistic --mode random --probability 0.50000000000 -j SET --add-set vlan2000 src

# Снова проверю есть ли src есть хоть где-нибудь выхожу из балансировки 
-A balance -m set --match-set uplink_list src -j RETURN

# Кто остался добавляю их src в список vlan2001 
-A balance -m statistic --mode random --probability 1.00000000000 -j SET --add-set vlan2001 src

# Поставим всем соединения чьи src есть в списке vlan2000 марку 1
-A new_conn -m set --match-set vlan2000 src -j CONNMARK --set-xmark 0x1/0xffffffff

# Поставим всем соединения чьи src есть в списке vlan2001 марку 2
-A new_conn -m set --match-set vlan2001 src -j CONNMARK --set-xmark 0x2/0xffffffff

# Т.к. списки аплинков с таймаутом 10мин. нужно для того чтобы хранить в списке только активные ip в динамике, 
поддерживаем src в списке если есть новые соединения обновляя timeout. 
Иначе через 10мин. клиент возможно перескочит на другой канал.
-A new_conn -m set --match-set vlan2000 src -j SET --add-set vlan2000 src --exist
-A new_conn -m set --match-set vlan2001 src -j SET --add-set vlan2001 src --exist

# Переносим маркировку соединений в маркировку пакетов.
-A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Только что взял 10 ip с одного списка и выполнил test в другом, дубликатов не оказалось.

# ipset list vlan2000 | wc -l
243
# ipset list vlan2001 | wc -l
210