
Un client a approché l’équipe Kegate pour obtenir de l’aide afin d’accéder à ses caméras IP Dalua via Internet, depuis n’importe où dans le monde. Tailscale, un outil puissant pour créer des réseaux privés et sécurisés sur Internet, s’est avéré être la solution parfaite. Lorsqu’il est combiné avec Docker et Nginx, il offre une méthode idéale pour exposer vos sites web ou services locaux, comme une instance Dalua, de manière sécurisée et accessible depuis n’importe quel endroit. Voici comment mettre en place cette configuration.
Étape 1 : Créer la configuration Nginx
Créez un fichier de configuration Nginx pour servir de proxy inversé à votre site web local Dalua. Cette configuration gérera également les connexions WebSocket.
nginx.conf
:
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 6443;
server_name localhost;
location / {
proxy_pass http://192.168.68.112/; # Site web local Dalua
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# En-têtes WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
Enregistrez ce fichier sous le nom nginx.conf
dans un dossier (par exemple, ./cctv-server/
).
Étape 2 : Créer le fichier Docker Compose
Créez un fichier docker-compose.yml
pour définir les services :
Tailscale : agit comme un VPN sécurisé pour exposer le serveur Nginx local.
Nginx : sert de proxy inversé pour votre site web Dalua.
docker-compose.yml
:
services:
ts-cctv-ma:
image: tailscale/tailscale:latest
hostname: cctv-ma
environment:
- TS_AUTHKEY=tskey-client-k8RuW <- add yours here
- TS_EXTRA_ARGS=--advertise-tags=tag:homelab --accept-dns=true --accept-routes=true
- TS_SERVE_CONFIG=/config/serve.json
- TS_STATE_DIR=/var/lib/tailscale
- TS_USERSPACE=false
volumes:
- ./ts/state:/var/lib/tailscale
- ./ts/config:/config
restart: unless-stopped
cap_add:
- net_admin
- sys_module
devices:
- /dev/net/tun
cctv-ma:
image: nginx:latest
network_mode: service:ts-cctv-ma
volumes:
- ./cctv-server/nginx.conf:/etc/nginx/nginx.conf:ro
- ./cctv-server/certs:/etc/nginx/certs:ro
restart: always
command: >
sh -c "rm -f /etc/nginx/conf.d/default.conf &&
nginx -g 'daemon off;'"
Enregistrez ce fichier sous le nom docker-compose.yml
.
Étape 3 : Configurer Tailscale Serve
Créez un fichier serve.json
pour définir comment Tailscale doit transmettre le trafic vers votre serveur Nginx local.
serve.json
:
{
"TCP": {
"443": {
"HTTPS": true
}
},
"Web": {
"${TS_CERT_DOMAIN}:443": {
"Handlers": {
"/": {
"Proxy": "http://127.0.0.1:6443"
}
}
}
}
}
Placez ce fichier dans ./ts/config/
.
Étape 4 : Démarrer les services
Exécutez la commande suivante pour démarrer les services Tailscale et Nginx :
docker-compose up -d
Cela :
Démarrera Tailscale et s’authentifiera avec la clé d’authentification fournie.
Démarrera Nginx et le configurera pour transmettre les requêtes à votre site web Dalua.
Exposera le site web local via Tailscale.
Étape 5 : Vérifier la configuration
Accédez à votre site web via le domaine fourni par Tailscale (par exemple,
https://cctv-ma.<votre-domaine-tailscale>.ts.net
).Utilisez les outils de développement de votre navigateur pour vérifier si les connexions WebSocket (
ws://
ouwss://
) fonctionnent correctement.
Étape 6 : Conseils de débogage
Vérifier les journaux :
Journaux Tailscale :
docker logs ts-cctv-ma
Journaux Nginx :
docker logs cctv-ma
Tester la connectivité :
Depuis le conteneur Nginx :
curl http://192.168.68.112
Depuis le conteneur Tailscale :
curl http://127.0.0.1:6443
Mettre à jour les certificats : Si vous rencontrez des problèmes liés au SSL, utilisez des certificats auto-signés ou configurez Tailscale pour ignorer la validation des certificats.
Conclusion
Avec cette configuration, vous avez exposé avec succès votre site web local Dalua de manière sécurisée en utilisant Tailscale, Docker et Nginx. Cette solution garantit un accès sécurisé sur Internet tout en simplifiant la gestion des connexions WebSocket et du proxy inversé.
N’hésitez pas à personnaliser davantage la configuration pour répondre à vos besoins spécifiques !
