Obtendo a VPN para se reconectar automaticamente no ponto de conexão


13

Eu uso a VPN embutida no Mac OS X 10.7.3. É IPSec, FWIW. De tempos em tempos, ele se desconecta (provavelmente um problema no meu servidor corporativo). Existe uma maneira de fazê-lo se reconectar automaticamente? Às vezes eu não percebo por um tempo, o que é meio irritante.

Respostas:


9

Você pode usar o seguinte AppleScript , salvá-lo como um aplicativo e defini-lo como um agente (sem ícone de encaixe).

Este script configurará uma conexão VPN quando não houver nenhuma. Portanto, ele também deve se reconectar logo após a queda da conexão. Você pode alterar o intervalo para verificar sua conexão VPN, são 120 segundos no script.

on idle
    tell application "System Events"
        tell current location of network preferences
            set myConnection to the service "VPN University"
            if myConnection is not null then
                if current configuration of myConnection is not connected then
                    connect myConnection
                end if
            end if
        end tell
        return 120
    end tell
end idle

Eu expliquei como configurar isso nesta resposta .


Can’t get «class svce» "MyVPN" of «class locc» of «class netp» of application "System Events". System Events got an error: Can’t get service "MyVPN" of current location of network preferences. (-1728)
phil Pirozhkov

Isso não funcionará com VPNs IKEv2. Veja como você pode fazer isso: matt.coneybeare.me/... -serviço-on-your-mac /
Coneybeare

8

Fiz algumas alterações na resposta fornecida, porque se vale a pena fazer algo, vale a pena fazer no chão. Eu queria reconectar se a VPN foi eliminada, mas NÃO reconectar se a VPN foi desconectada intencionalmente. A solução que eu encontrei foi eficaz e deselegante.

Primeiro, adicionei ganchos à inicialização e desligamento do pppd para acompanhar o estado VPN desejado. Esses arquivos devem pertencer à raiz e ter permissões de leitura / execução mundiais ( sudo chmod 755 /etc/ppp/ip-*).

/ etc / ppp / ip-up:

#!/bin/sh
echo true > /var/run/reconnect_vpn
chmod 644 /var/run/reconnect_vpn

/ etc / ppp / ip-down: para OS X 10.9.5 e inferior

#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi

/ etc / ppp / ip-down: para OS X 10.10 e superior

#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi

Então, modificando o AppleScript acima, pude verificar a variável de status '/ var / run / reconnect_vpn' para determinar se a VPN deve ser novamente restaurada:

on idle
    tell application "System Events"
        tell current location of network preferences
            set myConnection to the service "VPN"
            set startOnLogin to true
            local doReconnect
            try
                set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
            on error errMsg
                set doReconnect to startOnLogin
            end try
            if myConnection is not null and doReconnect then
                if current configuration of myConnection is not connected then
                    connect myConnection
                end if
            end if
        end tell
        return 120
    end tell
end idle

Como antes, altere a linha set myConnection to the service "VPN"para o que for chamado na sua VPN. Além disso, na inicialização, o arquivo 'reconnect_vpn' não existe, então adicionei um booleano (startOnLogin) para servir como padrão quando o arquivo não pôde ser encontrado. Eu gosto de começar imediatamente, mas se você não mudar, mude para false.

Tenho a sensação de que, se você é o tipo de pessoa interessada no comportamento da VPN, também é o tipo de pessoa que gosta de se mexer até encontrar uma solução e, portanto, essa resposta não tem público. Mas por precaução, aqui está. Espero que ajude alguém.


Isso não funcionará com VPNs IKEv2. Veja como você pode fazer isso: matt.coneybeare.me/... -serviço-on-your-mac /
Coneybeare

4

Existe um aplicativo chamado VPN Auto-Connect (link da Mac App Store). É $ 0,99.

Uma vez iniciado, ele fica na sua barra de menus; quando você o usa para ativar a VPN, ele monitora um perfil de conexão VPN configurado no painel de preferências de rede do OS X e garante que você permaneça sempre conectado a ele. O ícone da barra de menus do VPN Auto-Connect fornece uma lista de todas as conexões VPN que você definiu e permite escolher qual delas sempre se conectar.


Bem-vindo ao perguntar diferente! Obrigado pela sua resposta, John! Você pode adicionar mais informações sobre o aplicativo ao qual você vinculou? Como ele responde à pergunta? Quais recursos específicos o tornam o aplicativo que o OP precisa?
Daviesgeek

O VPN Auto-Connect funciona com VPNs IKEv2. Veja como você pode fazer isso: matt.coneybeare.me/... -serviço-on-your-mac /
Coneybeare

0

Uma nova opção é o Monitor VPN disponível na AppStore. Permite mais personalização, como login automático, alternar entre conexões VPN, etc. É necessário pelo menos o OS X 10.9 Mavericks.


0

O script reconecta automaticamente qualquer serviço VPN descartado.

Eu estava usando a solução do rjarvis2010 , mas não estava muito feliz com isso.

Eu tenho muitos serviços VPN diferentes aos quais me conecto, então queria um script que reconectasse automaticamente qualquer VPN à qual eu estivesse conectado.

on idle
    tell application "System Events"
        tell location "Uni" of network preferences
            -- keep checking for VPN name until a VPN is connected
            set empty to true
            repeat until empty is false
                try
                    -- set variable "myVPN" to the name of the service that is connected and is a VPN
                    set myVPN to get name of first service whose (kind is greater than 11 and kind is less than 17) and connected of current configuration is true
                    set empty to false
                on error
                    set empty to true
                    delay 15
                end try
            end repeat

            -- doReconnect is a file that reads from the ppp.log and contains "true" by default, "false" if the vpn service was manually disconnected recently
            local doReconnect
            set doReconnect to (do shell script "cat /var/run/reconnect_vpn")

            repeat while doReconnect contains "true"
                set ConfProp to get current configuration of service myVPN
                if connected of ConfProp is false then
                    delay 1
                    set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
                    if doReconnect contains "true" then
                        try
                            connect service myVPN
                        on error errorMessage
                        end try
                    else
                        exit repeat
                    end if
                end if
                delay 5
            end repeat
        end tell
    end tell
    return 1
end idle

Para fazê-lo funcionar, você precisa substituir

  • Uni com o nome da sua localização

Quando terminar, salve-o como um aplicativo e coloque-o nos itens de logon e pronto.

Além disso, e isto é importante, você precisa configurar os ganchos PPP, conforme descrito no rjarvis2010 's solução

Além disso, eu recomendo que você não tente conectar várias VPNs simultaneamente. Para interromper esse script, pode ser necessário forçá-lo a sair através do monitor de atividades (como os loops de repetição não permitem que ele receba entrada externa às vezes).


0

Estou usando uma abordagem diferente para manter minha conexão VPN ativa. Isso envolve a launchdexecução de um daemon muito simples que permite manter a conexão VPN sem que o usuário esteja conectado (isso também evita pop-ups de desconexão da VPN ao sair do modo de suspensão).

crie um launchdarquivo plist a partir do terminal:

sudo nano /Library/LaunchDaemons/my.vpn.connector.plist

e insira o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>
    <key>Label</key>
    <string>my.vpn.connector</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>(test $(networksetup -showpppoestatus MyVPN) = 'disconnected' &&  ping -o my.vpn.server.url && networksetup -connectpppoeservice MyVPN) ; sleep 10</string>
    </array>
</dict>
</plist>

Você pode usar o seguinte comando para iniciar seu daemon e testar:

launchctl load /Library/LaunchDaemons/my.vpn.connector.plist

Dessa forma, você tem um daemon em execução para todos os usuários, tentativa de conexão apenas quando a conexão com a Internet está disponível. Além disso, a VPN é reconectada automaticamente quando a conexão à Internet está de volta…

Editar:

Acho esse método o mais robusto, pois permite que uma conexão VPN seja feita automaticamente, antes que um usuário efetue login (útil para servidores).

Atualizações para Yosemite (OSX 10.10)

    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>

É depreciado em Yosemite. Você pode usar o seguinte

    <key>KeepAlive</key>
    <true/>

Além disso

networksetup -connectpppoeservice MyVPN

Não funciona mais em Yosemite. Você pode usar isso

scutil --nc start MyVPN

scutil --nc listnão lista minha conexão VPN, que é vista e conectável através das configurações de rede.
phil Pirozhkov

@philpirozhkov Isso não funciona com VPNs IKEv2. Veja como você pode fazer isso: matt.coneybeare.me/... -serviço-on-your-mac /
Coneybeare

0

Vi que aqui existem algumas respostas que usam ganchos de login, que foram descontinuadas nas versões mais recentes do OS X em favor do Launch Agent e do Launch Daemons.

Eu criei um script e um agente de inicialização. O agente chama um script de shell a cada 30 segundos e tenta executar ping em um endereço IP estático na rede VPN. Se ele não puder executar ping nesse IP, habilitará sua conexão VPN.

Se você fez isso por meio de um aplicativo Apple Script, o ícone do aplicativo estará sempre no seu encaixe. Eu prefiro ter isso sendo executado automaticamente em segundo plano.

Clone o projeto abaixo e siga as instruções no leia-me. O resultado final é um pacote instalador que colocará um arquivo plist do agente de inicialização em / Library / LaunchAgents / e um script de shell em / Library / Application Support / melonsmasher /.

Certifique-se de editar o shell script (auto-vpn) com o nome da sua conexão VPN e um endereço IP que esteja na rede VPN. Você pode alterar o intervalo de execução no arquivo plist (com.melonsmasher.autovpn.plist).

https://github.com/MelonSmasher/OSX-AutoVPN


-2

A beleza dos AppleScripts é que você pode fazer quase tudo com ele e é gratuito, o lado negativo é que eles geralmente não são muito responsivos (pesquisa em um intervalo de tempo fixo) e carecem de recursos que apenas os aplicativos MAC OS X nativos podem ter. Um bom e novo aplicativo de reconexão automática da VPN é "VPN Monitor" na loja de aplicativos, reconecta instantaneamente no momento em que uma conexão VPN cai, é capaz de se reconectar a um serviço VPN diferente se o serviço preferencial estiver inativo, se conecta na inicialização, controla seu tempo de inatividade e usa um mínimo de recursos do sistema para executar em segundo plano como um aplicativo da barra de status. Monitor de VPN


2
Por favor, dê uma olhada no FAQ, especialmente a parte sobre a auto-promoção
nohillside
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.