Small Rack (Ruby) application serving OpenVPN status file
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depfu[bot] 0b782b7dd3 gems: update rubocop to version 1.25.0 3 days ago
.github/workflows gem: add Ruby 3.1 support 2 weeks ago
docs gem: release 3.2.1 4 days ago
examples gem: support date format used by OpenVPN 2.5 4 days ago
exe gem: adopt frozen string literals 2 years ago
lib gem: release 3.2.1 4 days ago
spec gem: support date format used by OpenVPN 2.5 4 days ago
.editorconfig gem: add editorconfig 1 year ago
.gitignore gem: add solargraph support 2 years ago
.rubocop.yml gems: update rubocop to version 1.23.0 2 months ago
.solargraph.yml gem: add solargraph support 2 years ago
Gemfile gems: revert back to upstream solargraph now with rubocop 1.0 compat 1 year ago
LICENSE Add license 9 years ago ci: drop Travis CI 1 year ago
Rakefile gems: include rubocop-rake and fix linting 1 year ago
openvpn-status-web.gemspec gems: update rubocop to version 1.25.0 3 days ago


ci Depfu


Small (another word for naive in this case, it's simple and serves my needs) Rack application providing the information an OpenVPN server collects in it's status file especially including a list of currently connected clients (common name, remote address, traffic, ...).

It lacks:

  • caching (parses file on each request, page does auto-refresh every minute as OpenVPN updates the status file these often by default)
  • management interface support
  • possibly more...


Install the gem:

gem install openvpn-status-web

Create a configuration file in YAML format somewhere:

# listen address and port
host: ""
port: "8080"
# optional: drop priviliges in case you want to but you should give this user at least read access on the log files
user: "nobody"
group: "nogroup"
# logfile is optional, logs to STDOUT else
logfile: "openvpn-status-web.log"
# hash with each VPNs display name for humans as key and further config as value
  My Small VPN:
    # the status file path and status file format version are required
    version: 1
    status_file: "/var/log/openvpn-status.log"
  My Other VPN:
    version: 3
    status_file: "/var/log/other-openvpn-status.log"

Your OpenVPN configuration should contain something like this:

# ...snip...
status /var/log/openvpn-status.log
status-version 1
# ...snip...

For more information about OpenVPN status file and version, see their man page. openvpn-status-web is able to parse all versions from 1 to 3.

Advanced topics


If the information exposed is important to you serve it via the VPN or use a webserver as a proxy to handle SSL and/or HTTP authentication.


There is a Dockerfile that can be used to build a Docker image for running openvpn-status-web.

The Debian 6 init script assumes that openvpn-status-web is installed into the system ruby (no RVM support) and the config.yaml is at /opt/openvpn-status-web/config.yaml. Modify to your needs.


openvpn-status-web is licensed under the Apache License, Version 2.0. See LICENSE for more information.