Skip to content
This repository has been archived by the owner on Jun 6, 2022. It is now read-only.
/ merlink Public archive

This program will connect desktop clients to Meraki firewalls

License

Notifications You must be signed in to change notification settings

pocc/merlink

Repository files navigation

Build Status Build status BCH compliance

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!