This program will connect desktop devices to Meraki firewalls via an L2TP/IPSEC connection. This program uses a Meraki dashboard admin's credentials to pull the data required for a Client VPN connection, create the connection with OS built-ins, and then connect.
Current Feature Set (targeting v1.0.0)
- Dashboard admins/Guest users supported with Meraki Auth
- TFA prompt supported
- Only networks/organizations that that user has access to are shown
VPN Connection (Windows-only)
- Split Tunnel
- Remember Credential
- Windows 7/8/10
- macOS 10.7-13
- linux (requires network-manager)
CI/CD on tagged commits
- Windows 10
- macOS 10.13
- Ubuntu 14.04
- Ubuntu 16.04
Troubleshooting tests on connection failure
- Is the MX online?
- Can the client ping the firewall's public IP?
- Is the user behind the firewall?
- Is Client VPN enabled?
- Is authentication type Meraki Auth?
- Are UDP ports 500/4500 port forwarded through firewall?
The goals for future major versions can be found in the Project list.
Download the executables here.
Building from Source
1. Clone the repository:
git clone https://github.com/pocc/merlink
2. Download the required libraries with pip3
pip3 install requirements.txt
3. Execute the file
Please read contributing.md for the process for submitting pull requests.
Setting up your environment
To set up your Windows environment, please read pycharm_setup.md
SemVer is used for versioning:
- MAJOR version: Incompatible UI from previous version from a user's perspective
- MINOR version: Functionality is added to UI from a user's persective
- PATCH version: Minor enhancements and bug fixes
For the versions available, see the tags on this repository.
Adapting Git Branching for this projcet
- iss#-X.Y: Branch from dev-X.Y and reintegrate to dev-X.Y. Should be tied to an issue tagged with 'bug', 'feature', or 'enchancement' on repo.
- dev-X.Y: Development branch. When it's ready for a release, branch into a release.
- rel-X.Y: Release candidate targeting version X.Y. When it is ready, it should be merged into master tagged with version X.Y.
- master: Master branch.
Language and Libraries
- Python 3 - Base language
- Qt5 - Comprehensive Qt reference made by the Qt company. It is made for C++, but will supply the information you need about classes and functions.
- PyQt5 - Documentation for PyQt5. This is a copypaste of the Qt docs applied to Python, and generally contains less useful information
- Mechanical Soup - Web scraper for Python 3
- PyCharm - IDE used
- Powershell VPN Client docs - Collection of manpages for VPN Client-specific powershell functions.
PyInstaller - Python bundler used as part of this project
- Make sure you install the latest PyIntstaller directly:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
NSIS - Windows program installer system
FPM - A way to package to targets deb, rpm, pacman, and osxpkg libxml2-utils
- On ubuntu, be sure to install these libraries as well:
sudo apt install libxml2-utils libxml2-dev libxslt-dev libxml2
This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.
- Ross Jacobs - Initial work - pocc
See also the list of contributors who participated in this project.
Praise be Stack Overflow!