| .. | ||
| LICENSE | ||
| mullvad_vpn_check.sh.sh | ||
| README.md | ||
Mullvad VPN Check
Overview
This Bash script monitors the status of a Mullvad VPN connection. It checks if the system is connected to the Mullvad VPN, logs the connection status, and sends alerts via Discord if the VPN status changes.
Features
- Checks the current VPN connection status using the Mullvad API.
- Logs the VPN status to a temporary file.
- Sends an alert to a Discord webhook when the VPN connection is lost.
- Sends a recovery alert when the VPN connection is restored.
Requirements
- A system running Bash (Linux/macOS)
- curl and jq installed
- A valid Discord webhook URL
Installation
- Clone this repository or download the script.
2_ Ensure you have curl and jq installed:
sudo apt install curl jq # For Debian-based systems
sudo dnf install curl jq # For Fedora-based systems
-
Set up a Discord webhook and replace DISCORD_WEBHOOK_URL in the script with your webhook URL.
-
Make the script executable:
chmod +x mullvad_vpn_check.sh
Usage
Run the script manually:
./mullvad_vpn_check.sh
To automate the script, add it to a cron job:
crontab -e
Add the following line to check every 5 minutes:
*/5 * * * * /path/to/mullvad_vpn_check.sh
How It Works
The script fetches JSON data from Mullvad's API.
It extracts the IP and ISP information.
It checks if the current IP is a Mullvad exit node.
If the VPN is disconnected, an alert is sent to the configured Discord webhook.
If the VPN is restored, a recovery alert is sent.
The connection status is logged to a temporary file for comparison.
Example Alerts
VPN Down Alert:
"[hostname] is not going through a Mullvad VPN connection."
Includes ISP, IP, and timestamp.
VPN Restored Alert:
"[hostname] is now going through a Mullvad VPN connection."
Includes ISP, IP, and timestamp.
License
This project is licensed under the MIT License.
Contributions
Contributions are welcome! Feel free to submit a pull request or open an issue.
Disclaimer
This script is provided as-is without any guarantees. Use at your own risk.