OpenVPN-Monitor is a simple python program to generate html that displays the status of an OpenVPN server, including all current connections. It uses the OpenVPN management console. It typically runs on the same host as the OpenVPN server, however it does not necessarily need to.
The current source code is available on github:
https://github.com/furlongm/openvpn-monitor
# apt-get install gcc libgeoip-dev python-virtualenv python-dev geoip-database-extra # (debian/ubuntu)
# yum install gcc geoip-devel python-virtualenv python-devel GeoIP-data GeoIP-update # (centos)
mkdir /srv/openvpn-monitor
cd /srv/openvpn-monitor
virtualenv .
. bin/activate
pip install --upgrade pip
pip install openvpn-monitor gunicorn
gunicorn openvpn-monitor -b 0.0.0.0:80
docker run -p 80:80 ruimarinho/openvpn-monitor
Read the docker installation instructions for details on how to generate a dynamic configuration using only environment variables.
raspberryPi follows instructions set out in Debian / Ubuntu below, with the exception of the python-semantic-version. You will need to install this manually from PIP using the below command. When following the Debian / Ubuntu instructions remember to remove the python-semantic-version item from the apt-get command
pip install semantic_version
The below will install and configure the web application, applying relative Alias commands to access local resources
apt-get -y install python-geoip python-ipaddr python-humanize python-bottle python-semantic-version apache2 libapache2-mod-wsgi git wget geoip-database-extra
echo "Alias /images/ /var/www/html/openvpn-monitor/images/" > /etc/apache2/conf-available/openvpn-monitor.conf
echo "WSGIScriptAlias /openvpn-monitor /var/www/html/openvpn-monitor/openvpn-monitor.py" > /etc/apache2/conf-available/openvpn-monitor.conf
a2enconf openvpn-monitor
systemctl restart apache2
yum install -y epel-release
yum install -y python-GeoIP python-ipaddr python-humanize python-bottle python-semantic_version httpd mod_wsgi git wget GeoIP-data GeoIP-update
echo "WSGIScriptAlias /openvpn-monitor /var/www/html/openvpn-monitor/openvpn-monitor.py" > /etc/httpd/conf.d/openvpn-monitor.conf
systemctl restart httpd
cd /var/www/html
git clone https://github.com/furlongm/openvpn-monitor.git
Add the following line to your OpenVPN server configuration to run the management console on 127.0.0.1 port 5555: (This port is arbitary, you may choose any)
management 127.0.0.1 5555
Refer to the OpenVPN documentation for further information on how to secure access to the management interface.
The provided configuration file /var/www/html/openvpn-monitor/openvpn-monitor.conf
should give some indication of how to set site name, add a logo, etc. You can
also set a default location (latitude and longitude) for the embedded maps.
If not set, the default location is New York, USA.
Complete the following by editing /var/www/html/openvpn-monitor/openvpn-monitor.conf
to match your site.
The below should help you quickly configure your vpn monitor with relevant settings
Option | Default | Description |
---|---|---|
site | Example | The name of the monitoring box - Free text, can be anything |
logo | None | Optional logo. This will be displayed in the top right. No default provided |
latitude | -37.8067 | Latitude location for the centre of map and marker icon to be set. Requires longitude or no action is taken. |
longitude | 144.9635 | Longitude location for the centre of map and marker icon to be set. Requires latitude or no action is taken. |
Maps | False | Will the site display the map |
geoip_data | /usr/share/GeoIP/GeoIPCity.dat | GeoLocation data location. Unless you are making locational changes this should not need to be changed. |
datetime_format | %a %b %d %H:%M:%S %Y | DateTime format for server display |
marker | False | Display a marker on the map for the OpenVPN-Monitor Box |
externalip | 0.0.0.0 | External IP of the OpenVPN-Monitor box. If latitude and longitude not specified then this is used to locate the Monitor box |
pervpn_control | False | Display a layer control to turn of element markers per vpn |
itemtype_control | False | Display a layer control to turn off element markers per connection type |
allowFullscreen | False | Allow the map to be displayed in FullScreen mode |
Note: If latitude, longitude and externalip all cannot be validated then Melbourne, Australia becomes the default centre and marker location.
The below should help you quickly configure connections to vpns
Option | Default | Description |
---|---|---|
host | localhost | Specifies the IP or DNS name of the VPN management interface to connect. |
port | 5555 | Specifies the Port of the management internace to connect. |
name | default | Free Text. The name of the VPN Connection |
show_disconnect | False | Show a button to disconnect clients |
externalip | 0.0.0.0 | External IP of the VPN Server. If latitude and longitude not specified then this is used to locate the VPN |
latitude | -35.308065 | Latitude location for the vpn marker icon. Requires longitude or no action is taken. |
longitude | 149.124521 | Longitude location for the vpn marker icon. Requires Latitude or no action is taken. |
marker | False | Display a marker on the map for the VPN Server |
connection_lines | False | Display connection lines between the Server and the Clients. Requires marker to be on for VPN. |
Note: If latitude, longitude and externalip all cannot be validated then Canberra, Australia becomes the default marker location.
You should now be able to navigate to http://myipaddress/openvpn-monitor/
Note the trailing slash, the images may not appear without it.
OpenVPN-Monitor can be run from the command line in order to test if the html generates correctly:
cd /var/www/html/openvpn-monitor
python openvpn-monitor.py
Further debugging can be enabled by specifying the --debug
flag:
cd /var/www/html/openvpn-monitor
python openvpn-monitor.py -d
OpenVPN-Monitor is licensed under the GPLv3, a copy of which can be found in the COPYING file.
Flags are created by Matthias Slovig ([email protected]) and are licensed under Creative Commons License Deed Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0). See http://flags.blogpotato.de/ for more details. Fullscreen control provided by https://github.com/brunob/leaflet.fullscreen Spiderfy (Closeby Marker control) provided by https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet