Como faço para rotear usuários diferentes em diferentes túneis OpenVPN no Linux?

3

A configuração:

Eu tenho várias configurações de cliente / servidor OpenVPN de chave estática, rotuladas como "client1", "client2" e "client3" com IPs de servidor / cliente 10.10.1.1/10.10.1.2, 10.10.2.1/10.10.2.2, e 10.10.3.1/10.10.3.2, respectivamente, hospedados em um servidor Linux e um cliente Linux (com três processos openvpn cada, cada um com uma interface tunX diferente). Eu tenho três usuários na minha máquina cliente Linux, usuário "client1", "client2" e "client3". Eu tenho a configuração do meu servidor para fazer NAT para que o tráfego de entrada do client1 no 10.10.1.2 vá para a Internet (via -j SNAT no iptables) de um IP, client2 no 10.10.2.2 para outro IP, etc.

O problema:

O que eu não tenho é uma maneira da máquina Linux cliente rotear corretamente o tráfego de cada usuário para o IP adequado do servidor OpenVPN através do túnel OpenVPN. Essencialmente, estou querendo que todo o tráfego destinado pela Internet do client1 saia de um IP voltado para a Internet no servidor OpenVPN, o tráfego do client2 para outro, e assim por diante, para quantos usuários eu quiser adicionar . Mas isso tudo deve ser feito a partir de uma máquina que hospeda todos os diferentes usuários do cliente. Estou ciente de uma funcionalidade do iptables envolvendo pacotes de marcação por ID de usuário e, em seguida, configurando o roteamento IP com base nessas marcas, mas não sei como realmente alcançá-lo.

Existe algum guru do iptables / netfilter / etc que possa me ajudar nesse assunto?

    
por Brandon Edward 26.04.2013 / 11:35

1 resposta

1

Você pode marcar pacotes via iptables com base no UID do processo de criação. Pode utilizar esta marca do Netfilter tanto para o encaminhamento (avançado) ( ip rule : man ip ou man ip-rule ; palavra-chave "fwmark") como para a DNAT. Não tenho certeza qual é mais fácil / melhor.

Editar 1 Para cada usuário:

iptables -t mangle -A PREROUTING -m owner --uid-owner $user -j MARK --set-mark $usermark
# one line in /etc/iproute2/rt_tables (numbers don't matter)
ip route add default via $user_gw_ip dev $user_if src $user_if_local_ip table $user_table
ip rule add type unicast fwmark $usermark priority 100 table $user_table
    
por 26.04.2013 / 12:08