Como o servidor OpenVPN atribui endereços IP do cliente em caso de configuração de múltiplos clientes?

2

Para uma configuração OpenVPN com vários clientes, como podemos encontrar na documentação relevante ( server.conf comments),

Configure server mode and supply a VPN subnet for OpenVPN to draw client addresses from. The server will take 10.8.0.1 for itself, the rest will be made available to clients. Each client will be able to reach the server on 10.8.0.1.

server 10.8.0.0 255.255.255.0

Então, como entendemos, na verdade estamos atribuindo um conjunto de 256 endereços, sendo o primeiro endereço utilizável 10.8.0.1 e o último utilizável 10.8.0.254. Entre estes, o primeiro dos endereços (10.8.0.1) será atribuído ao servidor, como já explicitado no texto acima.

Além disso, no arquivo de configuração do cliente, encontramos algo como

The hostname/IP and port of the server. You can have multiple remote entries to load balance between the servers.

remote my-server-1 1194

Onde, a última linha, como eu deduzo, deve ser escrita como,

remote 10.8.0.1 1194

para corresponder ao endereço do servidor.

(Esta afirmação não está correta, veja esta resposta .)

Agora, minha pergunta é: qual algoritmo o servidor segue para atribuir endereços ao cliente a partir do pool de endereços disponíveis (10.8.0.2-10.8.0.254)?

É algo como o primeiro cliente a receber o endereço .2, o próximo .3 endereço? Ou será que os endereços são atribuídos aleatoriamente? Ou é outra coisa, se é .5, 9., por que é assim?

    
por Masroor 02.05.2015 / 11:30

1 resposta

2

O OpenVPN não documenta o algoritmo exato usado para encontrar endereços livres no pool porque é um detalhe de implementação e realmente não importa, desde que seja um endereço gratuito. No entanto, você pode ver qual algoritmo ele usa observando a função ifconfig_pool_find in pool.c :

  • Se no modo duplicate_cn , pegue o primeiro endereço gratuito.
  • Se o endereço IP usado anteriormente pelo mesmo cliente ainda estiver livre, selecione-o.
  • Caso contrário, escolha o endereço livre menos recentemente usado do pool.

Quanto à sua outra pergunta:

remote 10.8.0.1 1194

Não, você definitivamente não deve usar isso como o endereço remote . Como você tenta acessar o servidor de encapsulamento através do próprio túnel e o túnel não está configurado ainda neste momento (durante a inicialização), não é possível contatar o servidor. Se de alguma forma você pudesse estabelecer o túnel, você teria um loop de roteamento.

Para estabelecer o túnel, você precisa ter um endereço IP no qual possa entrar em contato com o outro ponto final do túnel sem o benefício do túnel. Isso normalmente seria um endereço público da Internet acessível para esse terminal. Isso é o que você tem que dar para remote .

    
por 02.05.2015 / 14:26

Tags