Ejecutando Ubuntu 12.10 en amd64.
Estoy tratando de configurar diferentes reglas de enrutamiento para un usuario en particular. Entiendo que la forma correcta de hacerlo es crear una regla de firewall que marque los paquetes para ese usuario y agregar una regla de enrutamiento para esa marca. Solo para comenzar las pruebas, he agregado una regla que descarta todos los paquetes como inalcanzables:
# ip rule
0: from all lookup local
32765: from all fwmark 0x1 unreachable
32766: from all lookup main
32767: from all lookup default
Con esta regla en su lugar y todas las cadenas de firewall en todas las tablas vacías y la política ACEPTAR, aún puedo hacer ping a los hosts remotos como cualquier usuario.
Si luego agrego una regla para marcar todos los paquetes e intento hacer ping a Google, falla como se esperaba
# 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
Si restringo esta regla al usuario de VPN, parece que no tiene ningún efecto.
# 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
Pero parece que la marca se está configurando, porque si agrego una regla para colocar estos paquetes en el firewall, funciona:
# iptables -t mangle -A OUTPUT -j DROP -m mark --mark 0x01
# sudo -u vpn ping www.google.com
ping: unknown host www.google.com
¿Qué me estoy perdiendo? ¡Gracias!