A tabela de roteamento é uma coisa do sistema, e não específica do usuário. Então, não é realmente simples.
Os passos são os seguintes:
1: crie as várias tabelas de roteamento com o uso extensivo dos comandos ip route
e ip rule
.
2: Configure o iptables para marcar os pacotes de saída com base no UID do processo do remetente.
3: Configure suas tabelas de roteamento com base nas marcas (que os pacotes de saída receberam do iptables).
A solução será que todos os processos pertencentes a um usuário usarão a tabela de roteamento alternativa.
Extensão # 1: Infelizmente, o ip route
e o ip rule
não estão realmente bem documentados. Mas você pode criar várias tabelas de roteamento com suas diferentes regras. Cuidado: eles são tabelas de roteamento, uma coisa totalmente diferente como o iptables! E o truque é que você pode "marcar" pacotes no iptables, o que essencialmente significa que você pode dar a eles um único valor inteiro. E finalmente, você pode configurar as regras do iptables para rotear outras formas (com outras tabelas de roteamento) dos pacotes marcados. Ele é limpo e funciona bem, mas não é bem documentado.
Extensão # 2: AFAIK ip rule
é o comando para manipular as múltiplas entidades da tabela de roteamento. Com ip route
, você também pode definir em qual tabela de roteamento deseja inserir (modificar) uma determinada rota.
Extensão # 3: Alterar as tabelas de roteamento dos pacotes de saída pelo iptables não é trivial, este post faz o que também por mim funcionou.