Porównaj commity

...

15 Commity

Autor SHA1 Wiadomość Data
LRVT 41eec503a4
Update traefik.yml
remove unnecessary swarm default option
2024-01-13 20:24:40 +01:00
LRVT 583bfdcc0a
Update traefik.yml
fix false claims
2024-01-13 20:17:34 +01:00
LRVT fc1643ce84
Update docker-compose.yml
remove env
2024-01-13 20:15:16 +01:00
LRVT 22d03fd440
Update docker-compose.yml
add CF env
2024-01-13 20:14:28 +01:00
LRVT 5bea12c71b
Update traefik.yml
rename certificate resolver
2024-01-13 20:13:35 +01:00
LRVT 2c91f5fcb6
Aktualisieren von README.md 2024-01-12 00:02:06 +01:00
LRVT 22e813c26f
Update docker-compose.yml
add label comments
2024-01-11 23:56:22 +01:00
LRVT 3ef40e52ed
Update docker-compose.yml
uncomment dns definitions
2024-01-11 23:46:18 +01:00
LRVT 69137a3c00
Update docker-compose.yml 2024-01-11 23:45:48 +01:00
LRVT ac4134e0fd fix typo 2024-01-11 23:45:05 +01:00
LRVT 26b65fc5b5 add headscale 2024-01-11 23:44:02 +01:00
LRVT adb9b37282
Update docker-compose.yml
missing char
2024-01-10 12:10:56 +01:00
LRVT 9cb5e0e299
Update docker-compose.yml
separate labels into comment group blocks
2024-01-10 12:03:28 +01:00
LRVT e902158a75
Update docker-compose.yml 2024-01-10 12:02:10 +01:00
LRVT 29046a2f8e
Update README.md
add notes about running multiple instances
2024-01-10 11:37:50 +01:00
8 zmienionych plików z 374 dodań i 14 usunięć

Wyświetl plik

@ -21,7 +21,7 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
- TZ=Europe/Berlin
#networks:
# - proxy
#labels:
@ -29,13 +29,15 @@ services:
# - traefik.docker.network=proxy
# - traefik.http.routers.CHANGEME.rule=Host(`service.example.com`)
# - traefik.http.services.CHANGEME.loadbalancer.server.port=8080
# - traefik.http.services.CHANGEME.loadbalancer.server.scheme=https # optional, but sometines necessary when proxying to https services
# - traefik.http.services.CHANGEME.loadbalancer.serverstransport=insecureTransport@file # optional, but sometines necessary when proxying to https services
# - traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=50000000 # optional, only necessary for file uploads; allow 50MB
# - traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=50000000 # optional, only necessary for file uploads; allow 50MB
# - traefik.http.middlewares.limit.buffering.memRequestBodyBytes=50000000 # optional, only necessary for file uploads; allow 50MB
# - traefik.http.middlewares.limit.buffering.memResponseBodyBytes=50000000 # optional, only necessary for file uploads; allow 50MB
# # Part for optional traefik middlewares
# # Optional part when proxying to services that already provide ssl/tls
# - traefik.http.services.CHANGEME.loadbalancer.server.scheme=https
# - traefik.http.services.CHANGEME.loadbalancer.serverstransport=insecureTransport@file
# # Optional part for file upload max sizes
# - traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=50000000
# - traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=50000000
# - traefik.http.middlewares.limit.buffering.memRequestBodyBytes=50000000
# - traefik.http.middlewares.limit.buffering.memResponseBodyBytes=50000000
# # Optional part for traefik middlewares
# - traefik.http.routers.CHANGEME.middlewares=local-ipwhitelist@file,authelia@docker
#networks:

Wyświetl plik

@ -73,6 +73,7 @@ docker compose up
- [IPSec VPN Server](examples/ipsec-vpn-server) - Docker image to run an IPsec VPN server, with IPsec/L2TP, Cisco IPsec and IKEv2.
- [Firezone](examples/firezone) - Self-hosted secure remote access gateway that supports the WireGuard protocol. It offers a Web GUI, 1-line install script, multi-factor auth (MFA), and SSO.
- ~~[Netbird](https://github.com/netbirdio/netbird)~~ - Quickly connect your computers, servers, cloud instances, and IoT devices into a secure private network. No configuration required.
- [Headscale](examples/headscale) - An open source, self-hosted implementation of the Tailscale control server.
### Domain Name Service (DNS)
- [AdGuard Home](examples/adguard-home) - AdGuard Home is a network-wide software for blocking ads and tracking.

Wyświetl plik

@ -0,0 +1,34 @@
# References
- https://headscale.net/running-headscale-container/
- https://github.com/juanfont/headscale
# Notes
Please adjust the `docker-compose.yml` as well as `config.yaml` and adjust the `example.com` domain name. Also put the provided `config.yaml` into the corresponding config bind volume mount.
Afterwards spawn the container stack with `docker compose up` and visit `https://<your-domain>.<tld>/web`
You must configure an API key in order to access and manage your headscale server.
You can create those using docker exec:
````
# create an api key
docker exec headscale headscale apikeys create
````
Afterwards, your headscale server should be managable.
1. Create a new user account on your headscale web interface
2. Download the official tailscale clients and spawn up tailscale pointing to your custom headscale login server. You'll obtain a unique device key or register url.
3. Browse the device view at your headscale web interface and create a new device. Select your previously created user account and define the previously obtained device key from the tailscale client.
4. If registering the new device was successful, the tailscale client will automatically connect. Enjoy!
Note: You may use preauth keys instead to skip the device registering process. Read the official headscale documentation please.
````
# connect via linux tailscale client
sudo tailscale up --login-server https://headscale.example.com
````

Wyświetl plik

@ -0,0 +1,267 @@
---
# headscale will look for a configuration file named `config.yaml` (or `config.json`) in the following order:
#
# - `/etc/headscale`
# - `~/.headscale`
# - current working directory
# The url clients will connect to.
# Typically this will be a domain like:
#
# https://myheadscale.example.com:443
#
server_url: https://headscale.example.com # change to your domain
# Address to listen to / bind to on the server
#
listen_addr: 0.0.0.0:8080
# Address to listen to /metrics, you may want
# to keep this endpoint private to your internal
# network
#
metrics_listen_addr: 127.0.0.1:9090
# Address to listen for gRPC.
# gRPC is used for controlling a headscale server
# remotely with the CLI
# Note: Remote access _only_ works if you have
# valid certificates.
grpc_listen_addr: 0.0.0.0:50443
# Allow the gRPC admin interface to run in INSECURE
# mode. This is not recommended as the traffic will
# be unencrypted. Only enable if you know what you
# are doing.
grpc_allow_insecure: false
# Private key used encrypt the traffic between headscale
# and Tailscale clients.
# The private key file which will be
# autogenerated if it's missing
private_key_path: /var/lib/headscale/private.key
# The Noise section includes specific configuration for the
# TS2021 Noise protocol
noise:
# The Noise private key is used to encrypt the
# traffic between headscale and Tailscale clients when
# using the new Noise-based protocol.
private_key_path: /var/lib/headscale/noise_private.key
# List of IP prefixes to allocate tailaddresses from.
# Each prefix consists of either an IPv4 or IPv6 address,
# and the associated prefix length, delimited by a slash.
ip_prefixes:
- fd7a:115c:a1e0::/48
- 100.64.0.0/10
# DERP is a relay system that Tailscale uses when a direct
# connection cannot be established.
# https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp
#
# headscale needs a list of DERP servers that can be presented
# to the clients.
derp:
server:
# If enabled, runs the embedded DERP server and merges it into the rest of the DERP config
# The Headscale server_url defined above MUST be using https, DERP requires TLS to be in place
enabled: false
# Region ID to use for the embedded DERP server.
# The local DERP prevails if the region ID collides with other region ID coming from
# the regular DERP config.
region_id: 999
# Region code and name are displayed in the Tailscale UI to identify a DERP region
region_code: "headscale"
region_name: "Headscale Embedded DERP"
# Listens in UDP at the configured address for STUN connections to help on NAT traversal.
# When the embedded DERP server is enabled stun_listen_addr MUST be defined.
#
# For more details on how this works, check this great article: https://tailscale.com/blog/how-tailscale-works/
stun_listen_addr: "0.0.0.0:3478"
# List of externally available DERP maps encoded in JSON
urls:
- https://controlplane.tailscale.com/derpmap/default
# Locally available DERP map files encoded in YAML
#
# This option is mostly interesting for people hosting
# their own DERP servers:
# https://tailscale.com/kb/1118/custom-derp-servers/
#
# paths:
# - /etc/headscale/derp-example.yaml
paths: []
# If enabled, a worker will be set up to periodically
# refresh the given sources and update the derpmap
# will be set up.
auto_update_enabled: true
# How often should we check for DERP updates?
update_frequency: 24h
# Disables the automatic check for headscale updates on startup
disable_check_updates: false
# Time before an inactive ephemeral node is deleted?
ephemeral_node_inactivity_timeout: 30m
# Period to check for node updates in the tailnet. A value too low will severily affect
# CPU consumption of Headscale. A value too high (over 60s) will cause problems
# to the nodes, as they won't get updates or keep alive messages in time.
# In case of doubts, do not touch the default 10s.
node_update_check_interval: 10s
# SQLite config
db_type: sqlite3
db_path: /var/lib/headscale/db.sqlite
# # Postgres config
# If using a Unix socket to connect to Postgres, set the socket path in the 'host' field and leave 'port' blank.
# db_type: postgres
# db_host: localhost
# db_port: 5432
# db_name: headscale
# db_user: foo
# db_pass: bar
# db_ssl: false
### TLS configuration
#
## Let's encrypt / ACME
#
# headscale supports automatically requesting and setting up
# TLS for a domain with Let's Encrypt.
#
# URL to ACME directory
acme_url: https://acme-v02.api.letsencrypt.org/directory
# Email to register with ACME provider
acme_email: ""
# Domain name to request a TLS certificate for:
tls_letsencrypt_hostname: ""
# Client (Tailscale/Browser) authentication mode (mTLS)
# Acceptable values:
# - disabled: client authentication disabled
# - relaxed: client certificate is required but not verified
# - enforced: client certificate is required and verified
tls_client_auth_mode: relaxed
# Path to store certificates and metadata needed by
# letsencrypt
tls_letsencrypt_cache_dir: /var/lib/headscale/cache
# Type of ACME challenge to use, currently supported types:
# HTTP-01 or TLS-ALPN-01
# See [docs/tls.md](docs/tls.md) for more information
tls_letsencrypt_challenge_type: HTTP-01
# When HTTP-01 challenge is chosen, letsencrypt must set up a
# verification endpoint, and it will be listning on:
# :http = port 80
tls_letsencrypt_listen: ":http"
## Use already defined certificates:
tls_cert_path: ""
tls_key_path: ""
log_level: info
# Path to a file containg ACL policies.
# ACLs can be defined as YAML or HUJSON.
# https://tailscale.com/kb/1018/acls/
acl_policy_path: ""
## DNS
#
# headscale supports Tailscale's DNS configuration and MagicDNS.
# Please have a look to their KB to better understand the concepts:
#
# - https://tailscale.com/kb/1054/dns/
# - https://tailscale.com/kb/1081/magicdns/
# - https://tailscale.com/blog/2021-09-private-dns-with-magicdns/
#
dns_config:
# List of DNS servers to expose to clients.
nameservers:
- 1.1.1.1
# Split DNS (see https://tailscale.com/kb/1054/dns/),
# list of search domains and the DNS to query for each one.
#
# restricted_nameservers:
# foo.bar.com:
# - 1.1.1.1
# darp.headscale.net:
# - 1.1.1.1
# - 8.8.8.8
# Search domains to inject.
domains: []
# Whether to use [MagicDNS](https://tailscale.com/kb/1081/magicdns/).
# Only works if there is at least a nameserver defined.
magic_dns: true
# Defines the base domain to create the hostnames for MagicDNS.
# `base_domain` must be a FQDNs, without the trailing dot.
# The FQDN of the hosts will be
# `hostname.namespace.base_domain` (e.g., _myhost.mynamespace.example.com_).
base_domain: example.com
# Unix socket used for the CLI to connect without authentication
# Note: for local development, you probably want to change this to:
# unix_socket: ./headscale.sock
unix_socket: /var/run/headscale.sock
unix_socket_permission: "0770"
#
# headscale supports experimental OpenID connect support,
# it is still being tested and might have some bugs, please
# help us test it.
# OpenID Connect
# oidc:
# issuer: "https://your-oidc.issuer.com/path"
# client_id: "your-oidc-client-id"
# client_secret: "your-oidc-client-secret"
#
# Customize the scopes used in the OIDC flow, defaults to "openid", "profile" and "email" and add custom query
# parameters to the Authorize Endpoint request. Scopes default to "openid", "profile" and "email".
#
# scope: ["openid", "profile", "email", "custom"]
# extra_params:
# domain_hint: example.com
#
# List allowed principal domains and/or users. If an authenticated user's domain is not in this list, the
# authentication request will be rejected.
#
# allowed_domains:
# - example.com
# allowed_users:
# - alice@example.com
#
# If `strip_email_domain` is set to `true`, the domain part of the username email address will be removed.
# This will transform `first-name.last-name@example.com` to the namespace `first-name.last-name`
# If `strip_email_domain` is set to `false` the domain part will NOT be removed resulting to the following
# namespace: `first-name.last-name.example.com`
#
# strip_email_domain: true
# Logtail configuration
# Logtail is Tailscales logging and auditing infrastructure, it allows the control panel
# to instruct tailscale nodes to log their activity to a remote server.
logtail:
# Enable logtail for this headscales clients.
# As there is currently no support for overriding the log server in headscale, this is
# disabled by default. Enabling this will make your clients send logs to Tailscale Inc.
enabled: false
# Enabling this option makes devices prefer a random port for WireGuard traffic over the
# default static port 41641. This option is intended as a workaround for some buggy
# firewall devices. See https://tailscale.com/kb/1181/firewalls/ for more information.
randomize_client_port: false

Wyświetl plik

@ -0,0 +1,52 @@
version: '3.9'
services:
headscale:
image: headscale/headscale:0.22
pull_policy: always
container_name: headscale
restart: unless-stopped
command: headscale serve
expose:
- 8080
networks:
- proxy
volumes:
- ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/headscale/config:/etc/headscale
- ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/headscale/data:/var/lib/headscale/
labels:
- traefik.enable=true
- traefik.http.routers.headscale-rtr.rule=Host(`headscale.example.com`) && PathPrefix(`/`)
- traefik.http.services.headscale-svc.loadbalancer.server.port=8080
# Optional part for file upload max sizes
- traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=50000000 # optional, only necessary for enabled file uploads
- traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=50000000 # optional, only necessary for enabled file uploads
- traefik.http.middlewares.limit.buffering.memRequestBodyBytes=50000000 # optional, only necessary for enabled file uploads
- traefik.http.middlewares.limit.buffering.memResponseBodyBytes=50000000 # optional, only necessary for enabled file uploads
headscale-ui:
image: ghcr.io/gurucomputing/headscale-ui:latest
pull_policy: always
container_name: headscale-ui
networks:
- proxy
restart: unless-stopped
expose:
- 80
#dns:
# - 1.1.1.1
labels:
- traefik.enable=true
- traefik.http.routers.headscale-ui-rtr.rule=Host(`headscale.example.de`) && PathPrefix(`/web`)
- traefik.http.services.headscale-ui-svc.loadbalancer.server.port=80
# Optional part for traefik middlewares; protect the headscale ui interface; access from local lan only
- traefik.http.routers.headscale-ui-rtr.middlewares=local-ipwhitelist@file
# Optional part for file upload max sizes
- traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=50000000 # optional, only necessary for enabled file uploads
- traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=50000000 # optional, only necessary for enabled file uploads
- traefik.http.middlewares.limit.buffering.memRequestBodyBytes=50000000 # optional, only necessary for enabled file uploads
- traefik.http.middlewares.limit.buffering.memResponseBodyBytes=50000000 # optional, only necessary for enabled file uploads
networks:
proxy:
external: true

Wyświetl plik

@ -15,7 +15,7 @@ services:
- proxy
environment:
- TZ=Europe/Berlin
- CF_DNS_API_TOKEN=MyCloudflareApiToken # change this
- CF_DNS_API_TOKEN=MyCloudflareApiToken # change this if you use Cloudflare
labels:
- traefik.enable=true
- traefik.http.routers.api.rule=Host(`traefik.example.com`) # Define the subdomain for the traefik dashboard.

Wyświetl plik

@ -80,7 +80,7 @@ entryPoints:
http:
tls:
# Generate a wildcard domain certificate
certResolver: letsencrypt
certResolver: myresolver
domains:
- main: example.com # change this to your proxy domain
sans:
@ -103,18 +103,17 @@ providers:
network: proxy # Add Your Docker Network Name Here
# Default host rule to containername.domain.example
defaultRule: "Host(`{{ index .Labels \"com.docker.compose.service\"}}.example.com`)" # change 'example.com' to your proxy domain
swarmModeRefreshSeconds: 15s
exposedByDefault: false
# Use letsencrypt to generate ssl certificates
certificatesResolvers:
letsencrypt:
myresolver:
acme:
email: <CF-EMAIL-ADDRESS> # change to your provider account email address. The API token is defined in the docker-compose.yml as environment variable
email: example@example.com # the email address used for ssl certificate registration
storage: /etc/traefik/acme.json
dnsChallenge:
provider: cloudflare
# Used to make sure the dns challenge is propagated to the rights dns servers
# Used to make sure the dns challenge is propagated to the right dns servers
resolvers:
- "1.1.1.1:53"
- "1.0.0.1:53"

Wyświetl plik

@ -1,3 +1,8 @@
# References
- https://github.com/containrrr/watchtower
- https://containrrr.dev/watchtower/
# Notes
Running multiple Watchtower instances is only possible by using scope definitions. Please read [here](https://containrrr.dev/watchtower/running-multiple-instances/). Otherwise, any new Watchtower container will remove and clean up older instances.