Graças a um comentário do GAD3R e ao Connman
lista de discussão de desenvolvedores , um amigo descobriu como configurar a conexão VPN. Embora ainda exista um pequeno erro, conseguimos que funcionasse principalmente.
1. Situação inicial
Os seguintes pacotes devem ser instalados em sua máquina cliente de onde você deseja acessar o servidor host:
-
connman
-
connman-vpn
-
cmst
-
openconnect
Além disso, o script csd-wrapper.sh
foi executado em seus clientes /home
-directory e criou o diretório /home/.cisco
com vários arquivos de autenticação de sua máquina.
2. Gerando as informações de autenticação necessárias da VPN, acionando OpenConnect
Em uma segunda etapa, você precisa executar a solicitação de autenticação OpenConnect
para obter o certificado do servidor ( FINGERPRINT
) e um COOKIE
que Connman
usará para se conectar à VPN. Essas informações serão criadas utilizando o pacote OpenConnect
, que exibirá posteriormente um certificado do servidor e um cookie no terminal. Nós geramos essa informação no terminal executando
$ sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user <username> <hostname>
Depois, esse comando exibirá quatro variáveis: POST
, COOKIE
, HOST
e FINGERPRINT
. Por este meio, a impressão digital (começando com sha256:...
) atua como um certificado do servidor enquanto o COOKIE
é o que parece.
3. Criando o arquivo de provisionamento da VPN para Connman
Em contraste com NetworkManager
, o Connman
está usando os chamados arquivos de provisionamento VPN para cada conexão VPN, de onde obtém as informações sobre como se conectar ao host VPN. Portanto, em uma terceira etapa, os dados de autenticação gerados anteriormente devem ser colados nesse arquivo de provisionamento de VPN que o Connman
utilizará para se conectar ao servidor. Para fazer isso, criamos o arquivo /var/lib/connman-vpn/<connection-name>.config
com base na seguinte estrutura:
[global]
Name = VPN name, for example "My Company VPN" (without quotes)
[provider_openconnect]
Type = OpenConnect
Name = VPN Provider name, for example "My Company Cisco VPN" (without quotes)
Host = <VPN host IP address>
Domain = <VPN host domain>
OpenConnect.ServerCert = <paste the output of FINGERPRINT from the previous openconnect command>
OpenConnect.Cookie = <paste the output of COOKIE from the previous openconnect command>
Depois salve e feche o arquivo.
4. Reinicie sua máquina e verifique a conexão VPN
Reinicialize seu sistema e você encontrará a conexão VPN agora criada listada na GUI do% riderVPN
da bandeja do sistema Connman ( CMST
). Marque, clique em "conectar" e depois de alguns segundos, a conexão VPN para o seu host VPN será estabelecida. Agora você pode acessar facilmente o host VPN dentro do gerenciador de arquivos de sua escolha.
5. Eyesore: O cookie gerado é válido apenas por algumas horas
Após algumas horas, sua conexão VPN já funcionando com sucesso não funcionará mais. Ao verificar /var/log/syslog
, a abordagem de conexão irá reclamar da falha na verificação do certificado do servidor:
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 2 ipconfig method 1
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {create} index 23 type 65534 <NONE>
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {update} flags 4240 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {newlink} index 23 address 00:00:00:00:00:00 mtu 1500
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {newlink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {create} index 23 type 65534 <NONE>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {update} flags 4240 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {newlink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 2 ipconfig method 1
Aug 24 00:14:51 <hostname> openconnect[4476]: Connected to <VPN server IP>:443
Aug 24 00:14:51 <hostname> openconnect[4476]: SSL negotiation with <VPN server IP>
Aug 24 00:14:51 <hostname> openconnect[4476]: Server certificate verify failed: signer not found
Aug 24 00:14:51 <hostname> openconnect[4476]: Connected to HTTPS on <VPN server IP>
Aug 24 00:14:51 <hostname> openconnect[4476]: Got inappropriate HTTP CONNECT response: HTTP/1.1 401 Unauthorized
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {dellink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: (null) {remove} index 23
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {dellink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {remove} index 23
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 7 ipconfig method 1
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 6 ipconfig method 1
Por meio desta, a autenticação inicial COOKIE
foi alterada, portanto, o cookie gerado anteriormente não é mais válido. Portanto, você deve repetir o procedimento superior todas as horas para criar um novo COOKIE
e colar esse novo no seu arquivo de provisionamento VPN ( /var/lib/connman-vpn/<yourvpnname>.config
) enquanto sobrescreve o cookie antigo. Depois reinicie Connman
e sua VPN funcionará bem novamente nas próximas horas.
Importante:
Parece que NetworkManager
pode alterar sozinho a recriação do novo COOKIE
, enquanto Connman
precisa ser alimentado com o novo cookie
em seu arquivo de provisionamento VPN. Provavelmente Connman
está faltando algum tipo de interface para iniciar o comando OpenConnect
sozinho.
6. Solução alternativa para tornar a recriação do novo cookie um pouco mais confortável
Você pode usar um script bash para gerar o novo cookie e sobrescrever o antigo. Basta copiar o seguinte texto em um arquivo *.sh
, torná-lo executável e executá-lo. O novo cookie será colocado em /var/lib/connman-vpn/vpnname.config
na posição correta automaticamente. Depois reinicie Connman
e a VPN funcionará bem novamente.
#!/bin/bash
sed -i "s/^OpenConnect.Cookie =.*$/$( echo '<YOUR-VPN-PASSWORD>' | openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user=<USERNAME> --authgroup="<YOURGROUP>" --passwd-on-stdin <VPN-HOST-DOMAIN> | grep 'COOKIE=' | sed "s/COOKIE='//; s/'//g; s/^/OpenConnect.Cookie = /")/" <EXTERNAL-FILENAME>
Este script irá:
- Inicie o OpenConnect e execute a solicitação de autenticação
OpenConnect
para obter o certificado do servidor (FINGERPRINT
) e umCOOKIE
- Insira seu
username
no prompt do usuário - Insira seu
password
no prompt do usuário - Insira o
group
desejado no prompt do usuário - Gere um novo
cookie
- Substitua o antigo
cookie
in/var/lib/connman-vpn/vpnname.config
pelo novocookie
Depois, você pode se reconectar ao seu host VPN sem problemas. Graças a este script, é mais fácil e mais rápido recriar o novo cookies
quando necessário.