Also, VPN is reconnected automatically when internet connection is back… This way, you have a daemon running for all users, connection attempted only when internet connection is available. You can use following command to start your daemon and test: launchctl load /Library/LaunchDaemons/my. (test $(networksetup -showpppoestatus MyVPN) = 'disconnected' & ping -o my. & networksetup -connectpppoeservice MyVPN) sleep 10 This involves getting a very simple launchd daemon running which allows maintaining VPN connection without any user logged in (this also avoid VPN disconnection popups when resuming from sleep mode).Ĭreate a launchd plist file from terminal : sudo nano /Library/LaunchDaemons/my. I'm using different approach to keep my VPN connection alive. To stop this script you might need to force quit it through the activity monitor (as the repeat loops don't allow it to receive external input at times). Once you're done, save it as an application and place it in your Login Items and you're good to go.Īlso, and this is important, you need to set up the PPP hooks as described in rjarvis2010's solutionĪlso, I would recommend you don't try this connecting multiple VPNs simultaneously. Uni with whatever your location's name is.To make it work for you, you need to replace Set ConfProp to get current configuration of service myVPN
doReconnect is a file that reads from the ppp.log and contains "true" by default, "false" if the vpn service was manually disconnected recently 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 variable "myVPN" to the name of the service that is connected and is a VPN keep checking for VPN name until a VPN is connected Tell location "Uni" of network preferences I have many different VPN services I connect to, so I wanted a script that would automatically reconnect any VPN I was connected to. I had been using rjarvis2010's solution but I wasn't quite happy with it. Script auto-reconnect any dropped VPN service. I have a feeling that if you're the kind of person is this particular about VPN behavior, then you're also the kind of person who likes fumbling around until you find a solution and therefore this answer has no audience. I like to start immediately, but if you don't then change it to false. Also, on startup the 'reconnect_vpn' file doesn't exist, so I added a boolean (startOnLogin) to serve as the default when the file could not be found. If current configuration of m圜onnection is not connected thenĪs before, change the line set m圜onnection to the service "VPN" to whatever your VPN is called.
If m圜onnection is not null and doReconnect then Set doReconnect to (do shell script "cat /var/run/reconnect_vpn") Tell current location of network preferences Then by modifying the AppleScript above, I was able to check the '/var/run/reconnect_vpn' status variable to determine whether to bring the VPN back up: on idle etc/ppp/ip-down: for OS X 10.10 and above #!/bin/sh etc/ppp/ip-down: for OS X 10.9.5 and below #!/bin/sh These files should be owned by root, and have world read/execute permissions ( sudo chmod 755 /etc/ppp/ip-*). The solution I came up with was both effective and inelegant.įirst I added hooks to the pppd startup and shutdown to keep track of the desired VPN state. I wanted to reconnect if the VPN was dropped, but NOT reconnect if the VPN was intentionally disconnected. I made some changes to the provided answer, because if something is worth doing it's worth doing into the ground.