Altere o endereço IP de origem com base no usuário do sistema

3

Gostaria de fazer com que um determinado usuário tenha um endereço IP de origem específico. Para isso, adicionei um endereço IP secundário à interface de rede e tentei impor o IP de origem usando ip6tables e roteamento de políticas. Resumo:

  • Todo o tráfego IPv6 é roteado por meio de uma interface IPv4 OpenVPN (tap0), o gateway é 2001:db8::1 .
  • Se o usuário for someuser , o endereço de origem deverá ser 2001:db8::3
  • Caso contrário, o endereço de origem é 2001:db8::2 .

As rotas e os endereços padrão são configurados da seguinte forma:

ip -6 addr add 2001:db8::2/112 dev tap0
ip -6 route add default via 2001:db8::1 src 2001:db8::2 dev tap0

Para o roteador someuser , marquei todos os pacotes de saída e tente rotear esses pacotes com um endereço de origem diferente usando uma tabela de roteamento separada. Estes são configurados com:

ip6tables -t mangle -A OUTPUT -m owner --uid-owner someuser -j MARK --set-mark 123
ip -6 rule add fwmark 123 table 1002
ip -6 addr add 2001:db8::3/112 dev tap0
ip -6 route add default via 2001:db8::1 src 2001:db8::3 dev tap0 table 1002

Por algum motivo, todo o tráfego ainda tem o endereço de origem 2001:db8::2 . Eu posso ver que a regra ip6tables é atingida, mas o IP de origem ainda está errado. Verificado com o alvo NFLOG + Wireshark e com curl ip.appspot.com .

Alguma idéia do que eu fiz de errado?

    
por Lekensteyn 15.10.2014 / 14:24

1 resposta

2

Editar: entendeu mal o seu post no começo, reescreveu a resposta.

Quando você faz o roteamento, você não altera o conteúdo do pacote, basta escolher a interface certa para a mudança. Portanto, isso não alterará o endereço IP de origem que você recebeu. Ele irá para a tabela de roteamento correta e a interface certa, mas isso é tudo. Para fazer isso, você precisa de NAT .

Então você precisa se mascarar em POSTROUTING, por exemplo com:

/sbin/ip6tables -A POSTROUTING -t nat -m mark --mark 123 -j SNAT --to-source 2001:db8::3
    
por 15.10.2014 / 14:40