В принципе можно сделать следующую поделку:
Узнаем список сетей "города" (так и тянет сказать AS)
Потом в зависимости от операционки устраиваем так называемый _сорс роутинг_ (тема не раз обговаривалась...)
приблизительно выглядит для FreeBSD (сам такое делал) так:
(оговорка - IP конечно сменены :)
есть машина с 3-мя сетевыми.
ed0 IP: 195.13.42.50 -> смотрит в украину
ed1 IP: 212.111.197.10 -> смотрит в остальную часть сети
ed2 IP: 192.168.0.254 -> смотрит в сеть (можно сказать локальную)
default прописан через ed1 - 212.111.197.9
firewall rulesets (проще написать скрипт для генерации - но это не так наглядно):
---[cut]---
fwcmd="/sbin/ipfw"
router_ukraine="195.13.42.49"
ukraine_AS-1="62.16.0.0/19"
ukraine_AS-2="62.64.64.0/18"
ukraine_AS-3="62.64.116.0/22"
ukraine_AS-4="62.64.120.0/21"
...
local_space="ed2"
---[cut]---
...
---[cut]---
$fwcmd add fwd $router_ukraine all from any to $ukraine_AS-1 in via $local_space
$fwcmd add fwd $router_ukraine all from any to $ukraine_AS-2 in via $local_space
$fwcmd add fwd $router_ukraine all from any to $ukraine_AS-3 in via $local_space
$fwcmd add fwd $router_ukraine all from any to $ukraine_AS-4 in via $local_space
...
---[cut]---
....
если пакет пришедший на интерфейс не подпадает под правила фаервола то он идет по default
если пакет попадает под правило форварда то пакет проходит через маршрутизатор 195.13.42.49 (ed0)...
схема работает только в случае если клиенты сидят за NAT...
кажется просто ... :)