Запуск Ubuntu 12.10 на amd64.
Я пытаюсь настроить различные правила маршрутизации для конкретного пользователя. Я понимаю, что правильный способ сделать это - создать правило брандмауэра, которое помечает пакеты для этого пользователя, и добавить правило маршрутизации для этой метки. Чтобы начать тестирование, я добавил правило, которое отбрасывает все пакеты как недостижимые:
# ip rule
0: from all lookup local
32765: from all fwmark 0x1 unreachable
32766: from all lookup main
32767: from all lookup default
С этим правилом и всеми цепочками брандмауэров во всех таблицах и политикой ПРИНЯТЬ я все еще могу пинговать удаленные хосты так же хорошо, как и любого пользователя.
Если я затем добавлю правило, чтобы пометить все пакеты и попытаться пропинговать Google, он потерпит неудачу, как ожидалось
# 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
Если я ограничу это правило для пользователя VPN, оно, похоже, не даст никакого эффекта.
# 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
Но похоже, что отметка установлена, потому что, если я добавлю правило для удаления этих пакетов в брандмауэре, это сработает:
# iptables -t mangle -A OUTPUT -j DROP -m mark --mark 0x01
# sudo -u vpn ping www.google.com
ping: unknown host www.google.com
Что мне не хватает? Спасибо!