Mullvad
Using Mullvad as plain OpenVPN
To use the VPN service Mullvad on Arch Linux a few small adjustments need to be done. First, install OpenVPN and resolvconf. Download the plain OpenVPN version of Mullvad "here". Next, copy the content of the zip file to /etc/openvpn. Move mullvad_linux.conf into mullvad.conf sudo mv /etc/openvpn/mullvad_linux.conf /etc/openvpn/mullvad.conf
then open it and change the end of the file from
mullvad.conf
ping 10 ca ca.crt cert mullvad.crt key mullvad.key crl-verify crl.pem
to
mullvad.conf
ping 10 ca /etc/openvpn/ca.crt cert /etc/openvpn/mullvad.crt key /etc/openvpn/mullvad.key crl-verify /etc/openvpn/crl.pem
and make it executable by running sudo chmod +x /etc/openvpn/mullvad.conf
.
If lsmod | grep tun
returns a blank line, the tun module isn't getting loaded by default and you'll need to load it manually and tell the system to load it during startup by running sudo modprobe tun
and sudo echo "tun" > /etc/modules-load.d/tun.conf
then create
/etc/openvpn/update-resolv-conf
#!/bin/bash # # Parses DHCP options from openvpn to update resolv.conf # To use set as 'up' and 'down' script in your openvpn *.conf: # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf # # Used snippets of resolvconf script by Thomas Hood <jdthood@yahoo.co.uk> # and Chris Hanson # Licensed under the GNU GPL. See /usr/share/common-licenses/GPL. # # 05/2006 chlauber@bnc.ch # # Example envs set from openvpn: # foreign_option_1='dhcp-option DNS 193.43.27.132' # foreign_option_2='dhcp-option DNS 193.43.27.133' # foreign_option_3='dhcp-option DOMAIN be.bnc.ch' [ -x /usr/sbin/resolvconf ] || exit 0 case $script_type in up) for optionname in ${!foreign_option_*} ; do option="${!optionname}" echo $option part1=$(echo "$option" | cut -d " " -f 1) if [ "$part1" == "dhcp-option" ] ; then part2=$(echo "$option" | cut -d " " -f 2) part3=$(echo "$option" | cut -d " " -f 3) if [ "$part2" == "DNS" ] ; then IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3" fi if [ "$part2" == "DOMAIN" ] ; then IF_DNS_SEARCH="$part3" fi fi done R="" if [ "$IF_DNS_SEARCH" ] ; then R="${R}search $IF_DNS_SEARCH " fi for NS in $IF_DNS_NAMESERVERS ; do R="${R}nameserver $NS " done echo -n "$R" | /usr/sbin/resolvconf -a "${dev}.inet" ;; down) /usr/sbin/resolvconf -d "${dev}.inet" ;; esac
and don't forget to make it executable by running sudo chmod +x /etc/openvpn/update-resolv-conf
Now create the launch script:
/usr/local/bin/mullvad
#!/usr/bin/env bash if [ ! "$UID" = 0 ]; then if [ `type -P gksu` ]; then SUDOAPP="gksu" elif [ `type -P kdesu` ]; then SUDOAPP="kdesu" else SUDOAPP="sudo" fi fi if [ -n "$1" ]; then if [ "$1" = "start" ]; then $SUDOAPP systemctl start openvpn@mullvad elif [ "$1" = "stop" ]; then $SUDOAPP systemctl stop openvpn@mullvad elif [ "$1" = "restart" ]; then $SUDOAPP systemctl restart openvpn@mullvad else echo "Invalid command" exit 1 fi else echo "Run 'start', 'stop' or 'restart' as an argument to start, stop or restart the Mullvad VPN" exit 1 fi
Then make the launch script executable by running sudo chmod a+x /usr/local/bin/mullvad
You can then start Mullvad in the terminal by running mullvad start
. Stop it with mullvad stop
, and restart with mullvad restart
.
To create a menu item we need the logo run: wget https://mullvad.net/static/images/mullvad-circle.svg -O ~/.local/share/icons/mullvad.svg
Then create the .desktop file by running echo -e "[Desktop Entry]\nType=Application\nName=Mullvad\nComment=Start Mullvad VPN service\nIcon=mullvad\nExec=mullvad start\nCategories=Network" > ~/.local/share/applications/mullvad.desktop
If mullvad start
is successful from the command line, the desktop file should appear in your menu and start the service the same way by selecting it.