Votre propre VPN
Nanocl facilite votre quotidien avec un Statefile VPN prêt à l’emploi.
Basé sur hwdsl2/docker-ipsec-vpn-server de @Lin Song , il est disponible dans notre registre officiel Nanocl .
nanocl state apply -fs nr.next-hat.com/v0.18/ipsecConsultez le manuel de ce Statefile avec :
nanocl state man -s nr.next-hat.com/v0.18/ipsecPour aller au-delà des possibilités des Statefile Args, téléchargez-le et adaptez-le à vos besoins :
wget nr.next-hat.com/v0.18/ipsecVoici le contenu du Statefile VPN :
ApiVersion: v0.18
Args:
- Name: namespace
Kind: String
- Name: public-ip
Kind: String
- Name: dns
Kind: String
Default: "1.1.1.1"
Namespace: ${{ Args.namespace }}
# See all options:
# https://docs.next-hat.com/references/nanocl/objects/cargo
Cargoes:
- Name: vpn
PortBindings:
500/udp:
- HostPort: "500"
4500/udp:
- HostPort: "4500"
Containers:
- Name: vpn
Image: hwdsl2/ipsec-vpn-server:latest
Env:
- VPN_PUBLIC_IP=${{ Args.public-ip }}
- VPN_DNS_SRV1=$$INTERNAL_GATEWAY
- VPN_DNS_SRV2=${{ Args.dns }}
- VPN_L2TP_NET=192.168.42.0/16
- VPN_L2TP_LOCAL=192.168.42.1
- VPN_L2TP_POOL=192.168.42.10-192.168.42.254
- VPN_XAUTH_NET=192.168.43.0/16
- VPN_XAUTH_POOL=192.168.43.10-192.168.83.254
HostConfig:
Binds:
- /opt/vpn:/etc/ipsec.d
- /lib/modules:/lib/modules
CapAdd:
- NET_ADMIN
Devices:
- PathOnHost: /dev/ppp
PathInContainer: /dev/ppp
CgroupPermissions: rwm
Sysctls:
net.ipv4.ip_forward: "1"
net.ipv4.conf.all.accept_redirects: "0"
net.ipv4.conf.all.send_redirects: "0"
net.ipv4.conf.all.rp_filter: "0"
net.ipv4.conf.default.accept_redirects: "0"
net.ipv4.conf.default.send_redirects: "0"
net.ipv4.conf.default.rp_filter: "0"
net.ipv4.conf.eth0.send_redirects: "0"
net.ipv4.conf.eth0.rp_filter: "0"Utilisez-le ainsi :
nanocl state apply -fs nr.next-hat.com/v0.18/ipsec -- --namespace private --public-ip $(curl -s http://ipinfo.io/ip)Le fichier ci-dessus crée un DNS personnalisé pour notre VPN.
Il permet de créer des domaines ou de remplacer des domaines existants pour les rediriger vers nos Cargoes.
Avant de vous connecter au VPN, récupérez les identifiants avec :
nanocl cargo -n private logs vpnVous devriez voir quelque chose comme ceci :
================================================
IPsec VPN server is now ready for use!
Connect to your new VPN with these details:
Server IP: server-public-ip
IPsec PSK: secret-psk
Username: vpnuser
Password: secret-passwordLa connexion au VPN dépendant de votre système, nous ne la détaillerons pas ici.
Consultez la documentation officielle pour mieux comprendre l’image du conteneur.
Créons maintenant des Cargoes dans les espaces de noms souhaités et rendons-les accessibles depuis le VPN, par exemple :
ApiVersion: v0.18
Namespace: global
# See all options:
# https://docs.next-hat.com/references/nanocl/objects/cargo
Cargoes:
- Name: deploy-example
Containers:
- Name: web
Image: ghcr.io/next-hat/nanocl-get-started:latest
Env:
- APP=GET_STARTED1
# See all options:
# https://docs.next-hat.com/references/nanocl/objects/resource
Resources:
- Name: vpn-dns
Kind: ncdns.io/rule/v0.10
Data:
Entries:
- Name: my-domain.internal
IpAddress: Internal
- Name: my-domain.internal
Kind: ncproxy.io/rule/v0.15
Data:
Rules:
- Domain: my-domain.internal
Network: Internal
Locations:
- Path: /
Target:
Key: global.deploy-example.c
Port: 9000Les nombreuses références private.nsp désignent la passerelle de l’espace de noms private : modifiez-les si vous en utilisez un autre.
Après application, vous devriez accéder à http://my-domain.internal .
