var_dump($_SERVER['QUERY_STRING'], $addGet,$config['http_home_url'],$_SERVER['REDIRECT_SCRIPT_URL']);
<?php
function strpos_array($haystack, $needles) {
if ( is_array($needles) ) {
foreach ($needles as $str) {
if ( is_array($str) ) {
$pos = strpos_array($haystack, $str);
} else {
$pos = strpos($haystack, $str);
}
if ($pos !== FALSE) {
return $pos;
}
}
} else {
return strpos($haystack, $needles);
}
}
// Test
echo strpos_array('This is a test', array('test', 'drive')); // Output is 10
101 P1 - Провайдер1
102 P2 - Провайдер2
echo "Чистим таблицы"
ip route flush table P1
ip route flush table P2
echo "Чистим правила в таблицах"
ip rule delete table P1
ip rule delete table P2
echo "Чистим кэш"
ip route flush cache
echo "Заносим gw в таблици"
ip route add default via <шлюз 1-го провайдера> dev <интерфейс 1-го прова> table P1
ip route add default via <шлюз 2-го провайдера> dev <интерфейс 2-го прова> table P2
echo "Добавляем правила в таблици"
ip rule add from <IP 1-го прова> table P1
ip rule add from <IP 2-го прова> table P2
echo "Добавляем правила в таблици по маркировке"
ip rule add fwmark 1 table P1
ip rule add fwmark 2 table P2
echo "Заносим сети провайдера в таблицу 1"
ip route add <Сеть 1-го прова> dev <интерфейс 1-го прова> src <IP 1-го прова> table P1
echo "Заносим сети провайдера в таблицу 2"
ip route add <Сеть 2-го прова> dev <интерфейс 2-го прова> src <IP 2-го прова> table P2
echo "Заносим локальные сети в таблицу 1"
ip route add <локальная сеть> dev <интерфейс локалки> src <IP на интерфейсе локалки> table P1
ip route add 127.0.0.0/8 dev lo table P1
echo "Заносим локальные сети в таблицу 2"
ip route add <локальная сеть> dev <интерфейс локалки> src <IP на интерфейсе локалки> table P2
ip route add 127.0.0.0/8 dev lo table P2
echo "Удаляем маршрут по умолчанию"
ip route del default
echo "Создаем маршрут по умолчанию"
ip route add default scope global nexthop via <шлюз 1-го прова> dev <интерфейс 1-го прова> weight 1 nexthop via <шлюз 2-го прова> dev <интерфейс 2-го прова> weight 1
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:balance - [0:0]
-A PREROUTING -m state --state RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -i <интерф. прова1> -m state --state NEW -j CONNMARK --set-xmark 0x1/0xffffffff
-A PREROUTING -i <интерф. прова2> -m state --state NEW -j CONNMARK --set-xmark 0x2/0xffffffff
-A PREROUTING -d <IP или сеть> -j CONNMARK --set-xmark 0x1/0xffffffff - это принудительный выход через 1-го прова.
-A PREROUTING -d <IP или сеть> -j CONNMARK --set-xmark 0x2/0xffffffff - это принудительный выход через 2-го прова.
-A PREROUTING -i <интерфейс локалки> -m state --state NEW -j balance
-A PREROUTING -m connmark --mark 0x1 -j MARK --set-xmark 0x1/0xffffffff
-A PREROUTING -m connmark --mark 0x2 -j MARK --set-xmark 0x2/0xffffffff
-A PREROUTING -m state --state NEW -m connmark ! --mark 0x0 -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -m state --state RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -m state --state NEW -j balance
-A balance -o lo -j RETURN
-A balance -o <интерфейс локалки> -j RETURN
-A balance -m connmark ! --mark 0x0 -j RETURN
-A balance -m state --state RELATED,ESTABLISHED -j RETURN
-A balance -j CONNMARK --set-xmark 0x2/0xffffffff
-A balance -j RETURN
..........
default
nexthop via <шлюз 1-го прова> dev <интерфейс 1-го прова> weight 1
nexthop via <шлюз 2-го прова> dev <интерфейс 2-го прова> weight 1
...........