Execução do Ubuntu 12.10 na AMD64.
Estou tentando configurar regras de roteamento diferentes para um usuário específico. Eu entendo que o caminho certo para fazer isso é criar uma regra de firewall que marca os pacotes para esse usuário e adicionar uma regra de roteamento para essa marca. Apenas para continuar os testes, adicionei uma regra que descarta todos os pacotes como inacessíveis:
# ip rule
0: from all lookup local
32765: from all fwmark 0x1 unreachable
32766: from all lookup main
32767: from all lookup default
Com essa regra em vigor e todas as cadeias de firewall em todas as tabelas vazias e com a política ACCEPT, ainda posso fazer ping de hosts remotos muito bem como qualquer usuário.
Se eu adicionar uma regra para marcar todos os pacotes e tentar fazer ping no Google, ela falhará conforme o esperado
# iptables -t mangle -F OUTPUT
# iptables -t mangle -A OUTPUT -j MARK --set-mark 0x01
# ping www.google.com
ping: unknown host www.google.com
Se eu restringir essa regra ao usuário da VPN, parece não ter efeito.
# iptables -t mangle -F OUTPUT
# iptables -t mangle -A OUTPUT -j MARK --set-mark 0x01 -m owner --uid-owner vpn
# sudo -u vpn ping www.google.com
PING www.google.com (173.194.78.103) 56(84) bytes of data.
64 bytes from wg-in-f103.1e100.net (173.194.78.103): icmp_req=1 ttl=50 time=36.6 ms
Mas parece que a marca está sendo configurada, porque se eu adicionar uma regra para descartar esses pacotes no firewall, funcionará:
# iptables -t mangle -A OUTPUT -j DROP -m mark --mark 0x01
# sudo -u vpn ping www.google.com
ping: unknown host www.google.com
O que estou perdendo? Obrigado!