Skip to content

Commit

Permalink
added more comments
Browse files Browse the repository at this point in the history
  • Loading branch information
PandaRyshan committed May 11, 2024
1 parent ade0949 commit 2d54083
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 14 deletions.
14 changes: 10 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@

## Description

This repo combines [ocserv](https://ocserv.gitlab.io/www/recipes.html) VPN server and [certbot](https://eff-certbot.readthedocs.io/en/stable/using.html#) in one image, allowing users to use secure VPN service and request or renew cert automatically. The certbot-dns-cloudflare plugin is installed by default.
This repo combines [ocserv](https://ocserv.openconnect-vpn.net/) VPN server and [certbot](https://certbot.eff.org/) in one image, allowing users to use secure VPN service and request or renew cert automatically. The certbot-dns-cloudflare plugin is installed by default.

This image provided a default config in `/etc/ocserv/ocserv.conf`. If you don't mount a conf file, it will generate a new one. And [ENV file](https://github.com/PandaRyshan/ocserv/blob/main/.env) is used to request a Letsencrypt certificate and create a default username. If no ENV is provided, the ocserv service will be started with a locally generated certificate.
This image provided a default config in `/etc/ocserv/ocserv.conf`. If you don't mount a conf file, it will generate a new one. And [ENV file](https://github.com/PandaRyshan/ocserv/blob/main/.env) is used to request a Let's Encrypt certificate and create a default username. If no ENV is provided, the ocserv service will generate a self-signed certificate.

The default ocserv config I provided is designed to offer a basic, out-of-box VPN environment. It doesn't include additional config for internal resources access control, user authentication, user management, auditing, etc. And camouflage feature default is disabled in the config, you can enable it and set a secret string for it if you need. For more features and settings, please refer to the [offical documention](https://ocserv.openconnect-vpn.net/ocserv.8.html).

The latest version is 1.3.0, and dockerhub page is [here](https://ocserv.gitlab.io/www/download.html).

Expand Down Expand Up @@ -103,12 +105,16 @@ Maybe you will see the error when you connect to the server with your Cisco Secu
18.111.222.333 vpn.example.com
```
### Certificate application error
If you see an error when you are applying for certificates in an IPv6 only network, and you have provided an email address to subscribe the mail notification, there will be an network connection error after the certificates generated. This is because the [Let's Encrypt email subscription service](https://supporters.eff.org/subscribe/certbot) dose not support IPv6 access.
---
## References
* [Recipes for Openconnect VPN - Official](https://ocserv.gitlab.io/www/recipes.html)
* [Openconnect VPN Manual - Official](https://ocserv.gitlab.io/www/manual.html)
* [Openconnect VPN Manual - Official](https://ocserv.openconnect-vpn.net/ocserv.8.html)
* [Recipes for Openconnect VPN - Official](https://docs.openconnect-vpn.net/recipes/)
* [Ocserv Advanced](https://www.linuxbabe.com/linux-server/ocserv-openconnect-vpn-advanced)
* [Block Visitors by Country Using Firewall](https://www.ip2location.com/free/visitor-blocker)
* [ocserv changelog](https://ocserv.gitlab.io/www/changelog.html)
Expand Down
37 changes: 27 additions & 10 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ if [[ ! -f "/etc/ocserv/ocserv.conf" ]]; then
dtls-legacy = false
cisco-client-compat = false
# tun device name
device = vpns
# Prior to leasing any IP from the pool ping it to verify that
Expand Down Expand Up @@ -97,23 +98,39 @@ if [[ ! -f "/etc/ocserv/ocserv.conf" ]]; then
# Uncomment if you are using haproxy
# listen-proxy-proto = true
# Uncomment to enable compression negotiation (LZS, LZ4)
# And set minimum under a packet will not be compressed.
# Compression is designed to save bandwidth, but it can be
# bring a little latency. The default size is 256 bytes,
# to avoid latency for VoIP packets. Modify it if the clients
# typically use compression as well of VoIP with codecs that
# exceed the default value.
# Uncomment to enable compression negotiation (LZS, LZ4) and set minimum
# under a packet will not be compressed.
# Compression is designed to save bandwidth, but it can be bring a little latency.
# The default size is 256 bytes, to avoid latency for VoIP packets.
# Modify it if the clients typically use compression as well of VoIP with codecs
# that exceed the default value.
# compression = true
# no-compress-limit = 256
# Enable camouflage feature that make vpn service look like a web server.
# Connection to the vpn can be established only if the client provided a specific secret string,
# other wise the server will return HTTP error for all requests.
camouflage = false
# The URL prefix that should be set on the client (after '?' sign) to pass through the camouflage check,
# e.g. in case of 'mysecretkey', the server URL on the client should be like "https://example.com/?mysecretkey".
camouflage_secret = "thegreatwall"
# Defines the realm (browser prompt) for HTTP authentication.
# If no realm is set, the server will return 404 Not found error instead of 401 Unauthorized.
# Better change it from the default value to avoid fingerprinting.
camouflage_realm = "Restricted Content"
# enable occtl tool
use-occtl = true
# default 0/2 info leavel, 1 basic, 3 debug, 4 http, 8 sensitive, 9 tls
log-level = 1
EOCONF

fi

# Create certs if no local or letsencrypt certs
# Create certs if no certs are provided
if [[ ! -f "/etc/ocserv/server.cert" ]] && [[ ! -f "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" ]]; then

IPV4=$(timeout 3 curl -s https://ipinfo.io/ip || echo "")
Expand Down Expand Up @@ -202,7 +219,7 @@ if [[ ! -f "/etc/ocserv/server.cert" ]] && [[ ! -f "/etc/letsencrypt/live/$DOMAI

fi

# Create init user for PAM authentication
# Create random initial user if no PAM user file is provided
if [[ ! -f "/etc/ocserv/ocpasswd" ]]; then

if [[ -z $USERNAME ]] && [[ -z $PASSWORD ]]; then
Expand All @@ -223,7 +240,7 @@ fi

# Enable NAT forwarding
# if you want to specific translate ip, uncomment the following line, -j MASQUERADE is dynamic way
# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source $(hostname -I)
# iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -j SNAT --to-source $(hostname -I)
iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -s 2001:db8:2::/64 -j MASQUERADE
iptables -I FORWARD -s 172.20.0.0/24 -j ACCEPT
Expand Down

0 comments on commit 2d54083

Please sign in to comment.