Post

☄️Nebula V2

☄️Nebula V2

Nebula est un outil de réseau superposé évolutif axé sur les performances, la simplicité et la sécurité. Il vous permet de connecter de manière transparente des ordinateurs partout dans le monde. Nebula est portable et fonctionne sous Linux, OSX, Windows, iOS et Android. Nebula intègre un certain nombre de concepts existants tels que le chiffrement, les groupes de sécurité, les certificats, et le tunnel.

Nebula V2

Consultez la page releases pour les téléchargements ou consultez la section Distribution Packages.

  • Linux - 64 (nebula-linux-amd64.tar.gz) and 32 bit, arm, and others
  • Windows
  • MacOS
  • Freebsd

Serveur cwwk

Se connecter sur le serveur cwwk Création d’un dossier nebula-v2

1
2
mkdir -p /sharenfs/nebula-v2
cd /sharenfs/nebula-v2

Téléchargement et extraction des binaires nebula : https://github.com/slackhq/nebula/releases/latest

1
2
3
wget https://github.com/slackhq/nebula/releases/download/v1.10.3/nebula-linux-amd64.tar.gz
tar xzvf nebula-linux-amd64.tar.gz
rm nebula-linux-amd64.tar.gz

Autorité Certification (ca.crt)

1
2
# durée 3 ans exprimés en hms (3x365x24) -> -duration 26280h00m00s
./nebula-cert ca -name "Yann Nebula CA V2" -encrypt -duration 26280h00m00s

Vérification

1
./nebula-cert print -json -path ca.crt | jq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[
  {
    "curve": "CURVE25519",
    "details": {
      "groups": null,
      "isCa": true,
      "issuer": "",
      "name": "Yann Nebula CA V2",
      "networks": null,
      "notAfter": "2029-02-08T18:56:50+01:00",
      "notBefore": "2026-02-09T18:56:50+01:00",
      "unsafeNetworks": null
    },
    "fingerprint": "68dce...........................................5433557005",
    "publicKey": "5b8............................................................32d",
    "signature": "c3be4410183c788217e4.................................................2a8a0e",
    "version": 2
  }
]

Adresse IPV6

RFC4193 IPv6 Generator Lorsque vous configurez IPv6, vous devrez peut-être configurer votre propre adresse IP locale et non routable Adresses sur votre réseau - similaires aux anciens blocs RFC1918. Adresses RFC-4193 (pas de jeu de mots prévu) ce numéro. Votre bloc d’adresse IP attribué doit être généré aléatoirement à partir du fc00::/7 bloc. Comme l’IETF n’a pas officialisé fc00::/8, les adresses doivent être attribuées de fd00::/8. Cela signifie que votre réseau IPv6 résultant ressemblera à: fdxx:xxx:xxx: et vous aurez fdxx:xxx:xxx:xxx:0:/64 à travers fdxx:xxxx:xxxx:ffff:/64 comme blocs routables dans votre /48 privé. Les 40 octets du /48 (xx:xxxx:xxxx) sont censés être générés de manière aléatoire par l’une des nombreuses méthodes suggérées.

Cette page utilise la première méthode suggérée par l’IETF en utilisant l’horodatage actuel plus l’adresse mac, sha1 haché, et les 40 bits inférieurs pour générer votre ULA aléatoire. Par conséquent, si deux organisations ont touché cette page dans la même deuxième, avec la même adresse mac pour générer un ULA, ils pourraient avoir des ULA identiques.

Clés et certificats ​(hôtes+lighthouse)

Vous pouvez nommer les hôtes comme vous le souhaitez, y compris FQDN. Vous devrez également choisir l’adresse IP nebula pour chaque hôte lors de la génération de son certificat. Dans cet exemple, nous créons un réseau nebula qui utilise le sous-réseau 10.139.110.x/24 et attribuera des adresses IP à chaque hôte depuis ce sous-réseau. Cet exemple démontre également les groupes de nébuleuses, qui peuvent ensuite être utilisés pour définir les règles de circulation dans un réseau de nébuleuses. Votre réseau IPv6 privé est fda3:4291:71b9::/48 vous donnant accès aux /64s suivants fda3:4291:71b9:0::/64 à travers la fda3:4291:71b9:ffff::/64

Ajouter IPv6 tout en gardant IPv4 (double stack)

1
./nebula-cert sign -ca-crt ca.crt -ca-key ca.key -duration 26232h00m00s -name "vps-5351f610-lighthouse" -networks "10.139.110.1/24,fda3:4291:71b9:2f0a::1/64"

info: Sans passer un -duration XXhXXmXXsdrapeau, les certificats seront valables jusqu’à une seconde avant leur signature CA Expire.

Générateur de certificats clients

1
2
3
4
5
6
7
8
9
10
11
12
# durée 3 ans - 2 jours exprimés en hms (3x365x24)-48 -> -duration 26232h00m00s
# Dans le dossier contenant ca.crt, ca.key et nebula-cert
# Pour désigner ca si nécessaire: sign -ca-crt ca.crt -ca-key ca.key
./nebula-cert sign -duration 26232h00m00s -name "vps-5351f610-lighthouse" -networks "10.139.110.1/24,fda3:4291:71b9:2f0a::1/64"
./nebula-cert sign -duration 26232h00m00s -name "cwwk-nebula" -networks "10.139.110.2/24,fda3:4291:71b9:2f0a::2/64" -groups "servers"
./nebula-cert sign -duration 26232h00m00s -name "vps-1780de45-nebula" -networks "10.139.110.3/24,fda3:4291:71b9:2f0a::3/64" -groups "servers"
./nebula-cert sign -duration 26232h00m00s -name "yannir-nebula" -networks "10.139.110.4/24,fda3:4291:71b9:2f0a::4/64" -groups "servers"
./nebula-cert sign -duration 26232h00m00s -name "iceyan-nebula" -networks "10.139.110.5/24,fda3:4291:71b9:2f0a::5/64" -groups "servers"
./nebula-cert sign -duration 26232h00m00s -name "ouestyan-nebula" -networks "10.139.110.6/24,fda3:4291:71b9:2f0a::6/64" -groups "servers"
./nebula-cert sign -duration 26232h00m00s -name "e6230-nebula" -networks "10.139.110.7/24,fda3:4291:71b9:2f0a::7/64" -groups "laptops"
./nebula-cert sign -duration 26232h00m00s -name "pc1-nebula" -networks "10.139.110.8/24,fda3:4291:71b9:2f0a::8/64" -groups "homes"
./nebula-cert sign -duration 26232h00m00s -name "a528s-nebula" -networks "10.139.110.9/24,fda3:4291:71b9:2f0a::9/64" -groups "mobiles"

Droits en exécution

1
chmod +x gener-certificat-client.sh 

Exécution (saisie phrase de passe à chaque certificat)

1
./gener-certificat-client.sh 

Vérification certificat

1
./nebula-cert print -path cwwk-nebula.crt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
	"curve": "CURVE25519",
	"details": {
		"groups": [
			"servers"
		],
		"isCa": false,
		"issuer": "68dc.....................................7005",
		"name": "cwwk-nebula",
		"networks": [
			"10.139.110.2/24",
			"fda3:4291:71b9:2f0a::2/64"
		],
		"notAfter": "2029-02-07T14:24:47+01:00",
		"notBefore": "2026-02-10T14:24:47+01:00",
		"unsafeNetworks": null
	},
	"fingerprint": "743............................................................e17",
	"publicKey": "127.............................................................851",
	"signature": "50305.............................................................................f09",
	"version": 2
}

Configurer Nebula​

Remarque: Pour les exemples suivants, nous utilisons l’adresse 198.51.100.1 comme ip routable pour un phare fictif. Vous Allez Vous devez remplacer l’adresse IP routable de votre propre phare lors de la création de vos fichiers de configuration Nebula.

Fichiers de configuration ​
Télécharger un Exemple de configuration. Faire deux copies distinctes de l’exemple de fichier de configuration, un pour votre phare nommé config-lighthouse.yaml, et un que pour chaque hôte non-lighthouse, appelé config.yaml.

1
2
3
curl -o config.yml https://raw.githubusercontent.com/slackhq/nebula/master/examples/config.yml
cp config.yml config-lighthouse.yaml
cp config.yml config.yaml

Nebula pare-feu ​
Le fichier de configuration d’exemple permet tout le trafic sortant, mais ne permet que des connexions spécifiques à chaque hôte nebula. Vous devez modifier ces paramètres pour autoriser le trafic vers/depuis les hôtes de votre réseau.

1
2
3
4
5
6
7
8
9
10
11
12
13
firewall:
  outbound:
    # Allow all outbound traffic from this node
    - port: any
      proto: any
      host: any

  inbound:
    # Allow icmp between any nebula hosts
    # proto: any
    - port: any
      proto: icmp
      host: any

Nebula lighthouse

Fichier: config-lighthouse.yaml

Sur l’hôte du phare, vous devrez vous assurer am_lighthouse: trueest fixé. Par défaut le port est 4242 , remplacé par 54254

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Dual-stack configuration (both IPv4 and IPv6 overlay addresses)
static_host_map:
  '10.139.110.1': ['xoyaz.xyz:54254']
  'fda3:4291:71b9:2f0a::1': ['xoyaz.xyz:54254']
lighthouse:
  am_lighthouse: true

listen:
  # To listen on only ipv4, use "0.0.0.0"
  host: "::"
  port: 54254

# Désactiver hosts su le phare lighthouse
  # hosts is a list of lighthouse hosts this node should report to and query from
  # IMPORTANT: THIS SHOULD BE EMPTY ON LIGHTHOUSE NODES
  # IMPORTANT2: THIS SHOULD BE LIGHTHOUSES' NEBULA IPs, NOT LIGHTHOUSES' REAL ROUTABLE IPs
  # hosts:
  #  - "192.168.100.1"

Nebula hôtes

Fichier: config.yaml

Sur les hôtes individuels, assurez-vous que le phare est défini correctement dans le static_host_mapsection, et est ajouté à la phare hostssection.

1
2
3
4
5
6
7
8
static_host_map:
  '10.139.110.1': ['xoyaz.xyz:54254']
lighthouse:
  am_lighthouse: false
  interval: 60
  hosts:
    - '10.139.110.1' # IPv4 lighthouse
    - 'fda3:4291:71b9:2f0a::1' # IPv6 lighthouse

Nebula Android

Téléchargez l’application android Nebula


Installer et ouvrir l’application


Cliquez sur « + » pour ajouter une nouvelle configuration, donner un nom “a528s-nebula” (1) et cliquer sur “Certificate” (2), puis envoyer la clé publique de l’appareil sur votre ordinateur qui contient ca.key en cliquant sur “Share Public Key”, “Nextcloud “

Téléverser le fichier “device.pub” dans un dossier dans la machine qui héberge l’autorité de certification (certificat et clé)

Signez la clé en utilisant ca.key:

1
2
3
4
./nebula-cert sign -duration 26122h00m00s -in-pub device.pub \
   -name "a528s-nebula" \
   -networks "10.139.110.9/24,fda3:4291:71b9:2f0a::9/64"
# Entrer la passphrase

Cela devrait produire a528s-nebula.crt
Envoyer a528s-nebula.crt et ca.crt sur votre téléphone.

Choose file et Choose a file pour récupérer le certificat a528s-nebula.crt , puis “save”

Changer le name et cliquer sur CA pour récupérer le certificat ca.crt , puis “File”, “Choose file” et save

Clique sur « Hosts », “Add a new entry” définissez l’adresse IP de votre phare (lighthouse), ainsi que son adresse IP publique et son port. Activez l’option « Lighthouse ».

Cliquer 2 fois sur “Save” puis sur “Disconnected” pour activer

Vous pouvez ensuite utiliser l’application Nebula ou les paramètres VPN pour activer Nebula. La connexion prendra quelques secondes, puis vous pourrez accéder à tous les appareils connectés à votre VPN.

Annexe

Génération hôte Nebula

Création d’un bash gener-nebula-v2.sh pour générer les fichiers de configurations Nebula des groupes homes, laptops, servers, lighthouse et mobile

Etendre Réduire...
#!/bin/bash
#
CURRENT=$pwd
DOWNLOAD=""
CSV_FILE="nebula-v2.csv"

function usage {
       printf "#------------------------------------------------------------------------------------------------\n"
       printf "$0 Version 1.0\n"
       printf "Utilisation: $0 [-d <durée format 1450h10m05s> -n <Nom client Nebula>] [-i <Adresse IP>] [-g <Groupe>]\n"
       printf "Nom client Nebula sans espace ni caractères spéciaux\n"
       printf "Adresse IPV4 10.139.110.0/24  IPV6 fda3:4291:71b9::/48\n"
       printf "Groupes: lighthouse, homes, laptops, servers et mobile\n"
       printf "Exemples:\n"
       printf "$0 -d 26100h00m00s -n vps-5351f610-lighthouse -i 10.139.110.1/24,fda3:4291:71b9:2f0a::1/64 -g lighthouse\n"
       printf "$0 -d 26100h00m00s -n cwwk-nebula -i 10.139.110.2/24,fda3:4291:71b9:2f0a::2/64 -g servers \n"
       printf "Lecture fichier '$CSV_FILE': \n"
       printf "  $0 -f \n"
       printf "  column -s';' -t < $CSV_FILE  \n"
       printf "#------------------------------------------------------------------------------------------------\n"
       exit 0
}

n=""
i=""
g=""

while getopts "d:n:i:g:hf" option; do
    case "${option}" in
        d)
            d=${OPTARG}
            ;;
        n)
            n=${OPTARG}
            ;;
        i)
            i=${OPTARG}
            ;;
        g)
            g=${OPTARG}
            ;;
        h)
            usage
            ;;
        f)
        if [ -f "$CSV_FILE" ]; then
	  column -s';' -t < $CSV_FILE	
          exit
        fi
          ;;
    esac
done
shift $((OPTIND-1))

if [ -z "$n" ] || [ -z "$i" ] || [ -z "$g" ]; then
 echo "Pas d'arguments"
 usage
fi

# Variables
nebula_duree=${d}
nebula_host=${n}
nebula_ip=${i}
nebula_group=${g}

case "$nebula_group" in
  homes | laptops | servers | mobile )
   nebula_cfg="config-server-nfs.yaml"
   ;;
  lighthouse)
   nebula_cfg="config-lighthouse.yaml"
   ;;
esac

echo "nebula_cfg: $nebula_cfg"
echo "nebula_duree: $nebula_duree"
echo "nebula_host: $nebula_host"
echo "nebula_ip: $nebula_ip"
echo "nebula_group: $nebula_group"

# Générer les certificats 
#-------------------------------------
# si le certificat est présent , on  efface le .crt et le .key
if [ -f "$nebula_host.crt" ]; then
 echo "effacement certificat "
 rm $nebula_host.crt
 rm $nebula_host.key
fi

echo "Générer les certificats $nebula_host"
echo "Saisie de la phrase mot de passe pendant exécution commande suivante"
echo "nebula-cert sign -duration $nebula_duree -name $nebula_host -networks $nebula_ip -groups $nebula_group"
nebula-cert sign -duration $nebula_duree -name $nebula_host -networks $nebula_ip -groups $nebula_group

# Générer la procédure d'installation
cat > $nebula_host.sh << EOF
#!/bin/sh

# exécutable nebula amd64
#
sudo mv -f nebula /usr/local/bin/
sudo chmod +x /usr/local/bin/nebula
#
# Répertoire, configuration et certificats nebula
#
echo "sudo mkdir -p /etc/nebula"
sudo mkdir -p /etc/nebula
echo "sudo mv -f *.yaml /etc/nebula/config.yaml"
sudo mv -f *.yaml /etc/nebula/config.yaml
echo "sudo mv -f ca.crt /etc/nebula/ca.crt"
sudo mv -f ca.crt /etc/nebula/ca.crt
echo "sudo mv -f *.key /etc/nebula/host.key"
sudo mv -f *.key /etc/nebula/host.key
echo "sudo mv -f *.crt /etc/nebula/host.crt"
sudo mv -f *.crt /etc/nebula/host.crt
#
# Créer le service nebula
#
echo "Création service systemd nebula"
sudo mv -f nebula.service /etc/systemd/system/nebula.service
# Recharge de la configuration systemd
sudo systemctl daemon-reload
# Démarrage et activation du service nebula
echo "Démarrage et activation du service nebula"
sudo systemctl enable nebula --now
echo "Status service nebula"
sudo systemctl status nebula
EOF

# lighthouse
case "$nebula_group" in
  lighthouse)
cat >> $nebula_host.sh << EOF
#
# si parefeu ufw
#
if [ -f "/usr/sbin/ufw" ]; then
 echo "UFW allow 54254/udp"
 sudo ufw allow 54254/udp
 sudo ufw reload
fi
EOF
   ;;
esac

# Rendre ex&cutable le script
chmod +x $nebula_host.sh

# Créer une archive tar.gz
echo "tar czvf $nebula_host.tar.gz nebula ca.crt $nebula_host.key $nebula_host.crt nebula.service $nebula_cfg $nebula_host.sh"
tar czvf $nebula_host.tar.gz nebula ca.crt $nebula_host.key $nebula_host.crt nebula.service $nebula_cfg $nebula_host.sh
# Déplacer le fichier compressé
echo "sudo mv -f $nebula_host.tar.gz /srv/media/statique/files/$nebula_host.tar.gz"
sudo mv -f $nebula_host.tar.gz /srv/media/statique/files/$nebula_host.tar.gz
echo ""
echo ""
echo "# Client Nebula, télécharger le gz"
echo "wget https://chirpy.rnmkcy.eu/files/$nebula_host.tar.gz"
echo "# Extraire dans le répertoire courant"
echo "tar -xvf $nebula_host.tar.gz"
echo "# Supprimer le fichier tar.gz"
echo "rm $nebula_host.tar.gz"
echo "# Lancer l'installation:" 
echo "./$nebula_host.sh"

Créer un alias

1
alias nebulaclient='cd $HOME/sharenfs/nebula-v2/; ./client-nebula-v2.sh'
Cet article est sous licence CC BY 4.0 par l'auteur.