A configuração:
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). Tenho três usuários em minha máquina cliente Linux, usuário "client1", "client2" e "client3". Eu tenho meu servidor configurado para fazer NAT para que o tráfego de entrada do cliente1 em 10.10.1.2 saia para a Internet (via -j SNAT em iptables) de um IP, cliente2 em 10.10.2.2 saia de outro IP, etc.
O problema:
O que eu não tenho é uma maneira de a máquina cliente Linux rotear corretamente o tráfego de cada usuário para o IP do servidor OpenVPN adequado através do túnel OpenVPN. Essencialmente, desejo que todo o tráfego destinado à Internet do cliente1 saia de um IP voltado para a Internet no servidor OpenVPN, o tráfego do cliente2 saia de outro e assim por diante para quantos usuários eu gostaria de adicionar . Mas tudo isso deve ser feito em UMA máquina que hospeda todos os diferentes usuários do cliente. Estou ciente de uma funcionalidade do iptables que envolve a marcação de pacotes por ID do usuário e a configuração do roteamento IP com base nessas marcas, mas não sei como realmente conseguir isso.
Existe algum guru de iptables/netfilter/etc que possa me ajudar neste assunto?
Responder1
Você pode marcar pacotes com iptables
base no UID do processo de criação. Você pode usar esta marca Netfilter tanto para roteamento (avançado) ( ip rule
: man ip
ou man ip-rule
; palavra-chave "fwmark") quanto para DNAT. Não tenho certeza de 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