Skip to main content

Create an on demand VPN Server running with OpenVPN using AWS EC2

Project description

~~Python

Platform Supported

Generic badge

Repo Stats

GitHub GitHub repo size GitHub code size

Deployments

pages-build-deployment pypi

Pypi-format Pypi-status sourcerank

VPN Server

  • You need a VPN but don't want to pay for it?
  • OpenVPN is the solution, but configuring it manually can be a lengthy process.
  • Once configured, keeping the instance up all the time costs $$.
  • Scaling up/down a VPN server on demand can make that lengthy process an absolute nightmare.
  • This module allows you to create your own on demand VPN server in under 2 minutes.
  • The solution is fully automated and runs with OpenVPN using AWS EC2.

How it works

  • Create an AWS EC2 instance using a pre-built OpenVPN AMI.
  • Create a security group with the necessary ports allowed.
  • Configure the vpn server using SSH.
  • Download the OpenVPN client and connect using the public DNS of the ec2 instance.
  • All set! Now the internet traffic will be routed through the VPN. Verify it using an IP Lookup

To take it a step further, if you have a registered domain in AWS, vpn-server can be accessed with an alias record in route53 pointing to the public IP of the ec2 instance.

  • All the above steps are performed automatically when creating a new VPN server.
  • This module can also be used to clean up all the AWS resources spun up for creating a vpn server.

ENV Variables

Environment variables are loaded from any env file if present.

More on Environment variables
  • VPN_USERNAME - Username to access OpenVPN Connect client.

  • VPN_PASSWORD - Password to access OpenVPN Connect client.

  • VPN_PORT - Port number for web interfaces. Defaults to 943

  • IMAGE_ID - AMI ID to be used. Defaults to a pre-built AMI from SSM parameter for OpenVPN Access Server AMI Alias

  • INSTANCE_TYPE - Instance type to use for the VPN server. Defaults to t2.micro (minimum memory requirement is 1 GiB)

  • KEY_PAIR - Name of the key pair file to connect to ec2. Defaults to OpenVPN

  • SECURITY_GROUP - Name of the security group. Defaults to OpenVPN Access Server

  • VPN_INFO - Name of the JSON file to dump the server information. Defaults to vpn_info.json

  • HOSTED_ZONE - Domain name for the hosted zone.

  • SUBDOMAIN - Alias record name using which the VPN server has to be accessed.

Optionally env vars for AWS config (AWS_PROFILE_NAME, AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_REGION_NAME) can be setup.

Install

python -m pip install vpn-server

Usage

import vpn

# Instantiates the object
vpn_server = vpn.VPNServer()

# Create a VPN Server
vpn_server.create_vpn_server()

# Test an existing VPN Server
# vpn_server.test_vpn()

# Deletes the VPN Server
vpn_server.delete_vpn_server()

:bulb:   Please refer to the wiki page for more usage instructions.

Coding Standards

Docstring format: Google
Styling conventions: PEP 8
Clean code with pre-commit hooks: flake8 and isort

Release Notes

Requirement

python -m pip install gitverse

Usage

gitverse-release reverse -f release_notes.rst -t 'Release Notes'

Linting

PreCommit will ensure linting, and the doc creation are run on every commit.

Requirement

pip install sphinx==5.1.1 pre-commit recommonmark

Usage

pre-commit run --all-files

Links

Wiki

Repository

Runbook

Package

License & copyright

© Vignesh Rao

Licensed under the MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

vpn_server-1.4a0-py3-none-any.whl (20.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page