-
-
Save yonderbread/681f1280c8806b2a283e8e3548f44c1e to your computer and use it in GitHub Desktop.
Download all VPN config files for Mullvad VPN
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Set the Mullvad account number. | |
ACCOUNT_NUMBER="1234" | |
# For the home network, make sure the external IP is set here | |
# to prevent local traffic from going through the VPN. | |
HOME_IP="" | |
# Load the config download page to get CSRF tokens. | |
OUTPUT=$(curl "https://mullvad.net/download/config/" --compressed -s -i) | |
CSRF_TOKEN=$(echo ${OUTPUT} | grep -o 'csrftoken=\w*' | cut -d '=' -f 2) | |
CSRF_MIDDLEWARE_TOKEN=$(echo ${OUTPUT} | grep -o 'name=.csrfmiddlewaretoken. value=.\w*.' | head -1 | cut -d ' ' -f 2 | cut -d '=' -f 2 | sed "s/'//g") | |
COOKIE="csrftoken=${CSRF_TOKEN}" | |
# Get the country options from the output. | |
COUNTRIES="$(echo ${OUTPUT} | \ | |
sed -n -E 's/.*<select id="id_country"(.*)<\/select>.*/\1/p' | \ | |
sed -e 's/<option/\\n<option/g' \ | |
)" | |
echo -e "${COUNTRIES}" | sed -n -E 's/.*<option value="([^"]+)">(.*)<\/option>.*/\1 \2/p' | \ | |
while read -r COUNTRY_CODE COUNTRY_NAME; do | |
mkdir -p "zip" "ovpn" "tblk" | |
ZIP_FILE="zip/Mullvad - ${COUNTRY_NAME}.zip" | |
OVPN_FILE="ovpn/Mullvad - ${COUNTRY_NAME}.ovpn" | |
TBLK_FILE="tblk/Mullvad - ${COUNTRY_NAME}.tblk" | |
TBLK_FILE_HOME="tblk/Mullvad - ${COUNTRY_NAME} (home).tblk" | |
printf "Getting ${COUNTRY_NAME} (${COUNTRY_CODE})..." | |
if [ ! -f "${ZIP_FILE}" ]; then | |
curl "https://mullvad.net/download/config/" \ | |
--compressed \ | |
-s \ | |
-o "${ZIP_FILE}" \ | |
-H "Host: mullvad.net" \ | |
-H "Referer: https://mullvad.net/download/config/" \ | |
-H "Cookie: ${COOKIE}" \ | |
-d "csrfmiddlewaretoken=${CSRF_MIDDLEWARE_TOKEN}&type=zip&account_number=${ACCOUNT_NUMBER}&port=1300&country=${COUNTRY_CODE}" | |
fi | |
if [ ! -f "${OVPN_FILE}" ]; then | |
curl "https://mullvad.net/download/config/" \ | |
--compressed \ | |
-s \ | |
-o "${OVPN_FILE}" \ | |
-H "Host: mullvad.net" \ | |
-H "Referer: https://mullvad.net/download/config/" \ | |
-H "Cookie: ${COOKIE}" \ | |
-d "csrfmiddlewaretoken=${CSRF_MIDDLEWARE_TOKEN}&type=ovpn&account_number=${ACCOUNT_NUMBER}&port=1300&country=${COUNTRY_CODE}" | |
fi | |
printf "ok" | |
printf " - unzipping..." | |
unzip -qq -o "${ZIP_FILE}" -d "${COUNTRY_CODE}" | |
printf "ok" | |
printf " - move stuff around..." | |
rm -rf "${TBLK_FILE}" | |
mv -f "${COUNTRY_CODE}/$(ls ${COUNTRY_CODE})/OSX/Mullvad.tblk" "${TBLK_FILE}" | |
rm -rf "${COUNTRY_CODE}" | |
printf "ok" | |
if [ ! -z "${HOME_IP}" ]; then | |
printf " - create home version..." | |
rm -rf "${TBLK_FILE_HOME}" | |
cp -R "${TBLK_FILE}" "${TBLK_FILE_HOME}" | |
echo "route ${HOME_IP} 255.255.255.255 net_gateway" >> "${TBLK_FILE_HOME}/mullvad_osx.conf" | |
printf "ok" | |
fi | |
echo " ...done!" | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment