Централизованное решение это по определению управление в одной точке, то есть на сервере. Значит, решать маршрутизацию на сервере. Но чтобы подействовало на всех клиентов одинаково они должны весь свой трафик отдавать серверу.
Ну если не хочется так, решение, просто использовать два телефона (один для – всех приложений, которые по вашему мнению 100% не содержат в себе каких-либо шпионской телеметрии, способные каким-либо косвенным образом спровоцировать появления exit IP сервера в логах, доступным шпионам; другой – для всего остального; а лучше – один только для всего заблокированного; второй – для всего остального), тут много ума не надо.
Я раньше просто запускал Xray сокет на 1080 порту и использовал Zero Omega чтобы всё заблокированное по белым спискам вручную добавлять. Но это не “минимальные телодвижения”. Если вы один браузер в TUN делаете, другой – direct на физ. интерфейс, помните – любое приложение в Android может просто так открыть любой браузер с шпионской ссылкой в нём.
TL;DR: без минимальных телодвижений не получится, цензоры бьют именно в это. Либо грамотная инфраструктура (и это не “в лоб”, а просто плюс архитектуры), либо патчить всё подряд, ломая модель безопасности Android (которая итак, впрочем, сломана).