OpenVPN por regras de usuário sem roteamento de tráfego da Internet

2

EDITAR : Eu sei que learn-address é o que eu precisaria usar para chamar um script (como especificado no projeto openvpn-netfilter ) para definir o firewall regras. Acho que minha pergunta está mais relacionada ao script config.ovpn . Como você configura os arquivos client.ovpn para aprender simultaneamente quais rotas para o usuário precisa, ao mesmo tempo em que mantém o tráfego da Internet no ISP do usuário?

Eu tenho uma pergunta sobre como fazer as regras de firewall por usuário, enquanto também não direciona o tráfego da Internet através de um servidor OpenVPN. Estou tentando configurar um servidor VPN para um grupo de amigos e eu enquanto trabalhamos em um projeto. Eu implementarei algo como este projeto do Github: link . Isso permitirá que o servidor VPN pesquise ACLs para um usuário e implemente-as usando iptables no lado do servidor. Todo o outro tráfego seria descartado.

Para minha própria VPN pessoal, sei que posso usar o seguinte na minha client.ovpn config para não direcionar o tráfego da Internet pela VPN:

route-nopull
route 192.168.1.0 255.255.255.0

Onde 192.168.1.0/24 é minha sub-rede doméstica e 10.8.0.0/24 (não mostrado) é o intervalo de IP do DHCP do adaptador tun . Eu sei que colocar isso na configuração do cliente substitui a configuração do servidor push "redirect-gateway def1 bypass-dhcp" .

Aqui é onde eu me confundo: eu já sei que minha sub-rede é 192.168.1.0/24 , então posso facilmente colocar isso no arquivo client.ovpn . Mas se eu não tenho conhecimento das sub-redes / IPs às quais tenho acesso (como a maioria dos usuários não tem), como o OpenVPN dinamicamente envia por usuário as regras VPN para o cliente?

Em outras palavras, se user1 tiver acesso a 10.0.0.2 e 10.0.2.10 e user2 tiver acesso a 10.0.2.10 e 10.0.3.4 , como o OpenVPN saberá para direcionar as rotas certas para cada usuário, enquanto usando a mesma configuração genérica de client.ovpn ?

    
por Scott Crooks 25.04.2016 / 04:48

2 respostas

2

Você pode enviar diretivas openvpn individuais para seus clientes usando arquivos de configuração específicos do cliente no diretório client-config.

No arquivo de configuração do servidor, inclua a diretiva:

client-config-dir ccd

e crie este diretório caso ainda não exista em seu caminho openvpn, por exemplo:

/etc/openvpn/ccd

Agora crie um arquivo de configuração por cliente no diretório ccd com o mesmo nome do nome comum X509 do cliente. As opções a seguir são legais em um contexto específico do cliente: push , push-reset , iroute , ifconfig-push e config .

Por exemplo, para enviar rotas para um cliente com CN user1 em seu certificado:

echo 'push "route 10.0.0.2 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1
echo 'push "route 10.0.2.10 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1

Para que isso funcione, você precisa extrair diretivas de configuração em seus clientes do servidor usando a diretiva pull .

Você pode ter a diretiva client em seu client-config, que é uma diretiva auxiliar e se expande da seguinte forma:

pull
tls-client

Não use route-nopull em combinação, pois isso interromperia as rotas de acesso do cliente. Se você precisar de redirect-gateway em determinados clientes para rotear todo o tráfego pela sub-rede da VPN, poderá colocar essa diretiva apenas nesses arquivos de configuração do cliente e não no arquivo de configuração do servidor para todos os clientes. A diretiva redirect-gateway executa automaticamente os comandos de roteamento para fazer com que todo o tráfego IP de saída seja redirecionado pela VPN. Veja a página man .

    
por 25.04.2016 / 12:45
1

Para quem quiser saber uma resposta alternativa, o seguinte também deve ser útil. Quando você usa o script client-connect , o OpenVPN passa um argumento para o seu script: o caminho para um arquivo temporário em que você pode adicionar push "route 192.168.10.0 255.255.255.0" como instruções. Isso serve como um arquivo dinâmico semelhante ao CCD, sem a necessidade de gerar arquivos CCD estáticos.

    
por 29.04.2016 / 04:53