Разбейте проблему на 2 части.1. Пусть решение о маршрутизации принимается в зависимости от src addr отправляемого пакета. Для этого можно воспользоваться механизмом Policy Based Routing, что, в принципе, полезно в общем случае наличя сетевых интерфейсов в разных сетях.
Это во многих местах описанно, есть разные методы, зависит от конкретной конфигурации и предпочтений. Например:
https://serverfault.com/questions/524054/simple-multihomed-l...
https://www.linuxjournal.com/article/7291
И вообще, Policy Based Routing и его понимание вещи полезные, не только для приминения но и просто чтобы знать чего ожидать в разных ситуациях.
https://en.wikipedia.org/wiki/Policy-based_routing
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-t.../
https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simp...
https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.mult...
2. Пусть ваш сервер применяет првильную таблицу маршрутизации в каждом случае. Есть разные варианты, например:
- Непосредственно из клиентского софта указать, с какого локального адреса отправлять пакеты, тогда правило "ip rule src ..." из предыдущей части просто сработает. Некоторые программы так умеют, некоторые нет.
- Через команду "ip rule", указать напрямую какую таблицу надо использовать, если известен адрес получателя (фильтр to), или порт (фильтры ipproto, sport, dport).
- Промаркировать пакет из netfilter (там выше вам примеры давали), например на основе uid-owner, и указать таблицу с помощю "ip rule" по фильтру fwmark.
Много документации уже написанно, как сделать то или другое, посмотрите.
Удачи.