
To access the VPN, I use TunnelBlick, which runs as a menu bar application. Launch the app, activate its menu bar item, choose your VPN connection profile from the list, enter your password, and you're connected. But doing this several times a day gets annoying quite quickly. Thankfully, TunnelBlick includes AppleScript support. Using that support and Keyboard Maestro, I wrote a few macros to simplify connecting to and disconnecting from our VPN, as well as changing the DNS address depending on whether I'm connected to the VPN or not.

Technically, the DNS address shouldn't have to be switched-I have the VPN and Tunnelblick configured to automatically switch on connect, but for whatever reason, it's just not happening. So I included DNS address switching in my macros. I wound up with a set of four macros: Connect, Disconnect, Display DNS, and Toggle DNS. I use this with Keyboard Maestro's Execute Action Until Conditions Met command to repeatedly check whether the VPN is active (or inactive, for disconnect) here's how that step looks in the Connect macro: They also set the DNS address, based on whether the VPN is active or not.īut how can I tell when the VPN is active? Tunnelblick includes an AppleScript command to get the state of the connection: The Connect and Disconnect macros use Tunnelblick's AppleScript support to, well, connect to and disconnect from the VPN. I execute the AppleScript once every second, and check what it returns. Networksetup -setdnsservers Wi-Fi 1.2.3.4 Once the state returns CONNECTED, I can then switch the DNS address, using the UNIX side of macOS:

Replace 1.2.3.4 with the address of the DNS you want to use. You can also see the current DNS address with networksetup -getdnsservers Wi-Fi, which is how I display the current DNS address. Note: If you're using a server-provided DNS address, then you can't get its address with this command. I always manually set the DNS address on my laptop, though. Note that if you don't use wifi, you'll need to replace Wi-Fi with the name of the network service you do use the command networksetup -listallnetworkservices will display the names of your installed network services. The Display DNS macro puts the current DNS address onscreen, but also includes some logic to test whether it's set correctly or not. If everything is right, then I see one of these two messages:īut if the DNS address is set to that of my home network, but the VPN isn't active, I'll see a message alerting me to the mismatch. The Toggle DNS macro is only used if something goes wrong with the switching in the connect and disconnect macros, or if something else goes wrong, like an unexpected VPN disconnect. In those cases, I use this macro to flip between the two DNS addresses (on VPN and off VPN). I assigned all four macros to one keyboard shortcut, so they pop up the palette (as seen above) when invoked. From there, I press 1 to connect, 2 to disconnect, etc. If you'd like to use these macros, you're more than welcome to, but you'll need to customize them a bit to make them work for you.
Tunnelblick music download#
Tunnelblick music download#įirst, download the macro group, import it to Keyboard Maestro, and activate the macro group.

Here are the changes you'll need to make for these macros to work for you…Ĭhange the yourVPN bit in the connect. Line in the AppleScript step to reflect the name of your VPN. You can see the name in the TunnelBlick menu bar menu. In the final shell script step, replace 192.168.2.1 with the IP address of the DNS you want to use when connected to your VPN.
