История изменений
Исправление 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