Какая Ось?Если Linux, тогда все просто
1. Создаешь 2 таблицы маршрутизации
2. Создаешь правила по которым трафик пришедший на сетевуху, ответ уходит с этой же сетевухи
3. С помощью полиси роутинг заворачиваешь одну часть пользовтелей в одну таблицу раутинга, а других соответсвенно в другу.
4. Натишь внутреннюю локльную сеть на два внешних ип в зависимости от исходящего интефейса
Итого имеем:
ip1 - внешний ип выданный 1 - вым провайдером
net1 - сеть прова 1
net2 - сеть прова 2
ip2 - внешний ип выданный 2 - вым провайдером
gw1 - шлюз на 1 -го провайдера
gw1 - шлюз на 2 -го провайдера
localnet - внутренняя сеть
echo "10 prov1" >> /etc/iproute2/rt_tables
echo "20 prov2" >> /etc/iproute2/rt_tables
ip route add $net1 dev eth0 src $ip1 table prov1
ip roure add default via $gw1 table prov1
ip route add 127.0.0.0/8 dev lo table prov1
ip route add $localnet dev eth3 table prov1
ip route add $net2 dev eth1 src $ip2 table prov2
ip route add default via $gw2 table prov2
ip route add 127.0.0.0/8 dev lo table prov2
ip route add $localnet dev eth3 table prov2
ip rule add from $ip1 table prov1 pref 100
ip rule add from $ip2 table prov2 pref 200
# по отдельности каждого юзера или целыми подсетями
ip rule add from $petya_from_localnet table prov1 pref 300
ip rule add from $vasya_from_localnet table prov2 pref 310
ip route flush cache
iptables -t nat -A POSTROUTING -s $localnet -o eth1 -j SNAT --to-source $ip1
iptables -t nat -A POSTROUTING -s $localnet -o eth2 -j SNAT --to-source $ip2