MerLink
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)
-
Authentication/Authorization
- 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
-
Platforms
- 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.
Installing Merlink
Executables
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
python3 merlink.py
Contributing
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
Versioning
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.
Branching
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.
Addenda
Reference Material
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
Environment
General Documentation
Style Guide
Style Guide
Building
-
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
Linting
-
coala:
- On ubuntu, be sure to install these libraries as well:
sudo apt install libxml2-utils libxml2-dev libxslt-dev libxml2
License
This project is licensed under the Apache License 2.0 - see the
LICENSE.md file for details.
Authors
- Ross Jacobs - Initial work - pocc
See also the list of
contributors who participated
in this project.
Acknowledgments
Praise be Stack Overflow!