Post

🛡️ VPN TrustTunnel sxb xoyize.xyz

🛡️ VPN TrustTunnel sxb xoyize.xyz

TrustTunnel est un protocole VPN open source moderne développé à l’origine par AdGuard VPN maintenant disponible pour tout le monde. Il offre des connexions VPN rapides, sécurisées et fiables sans les compromis habituels. Par conception, le trafic TrustTunnel est impossible à distinguer du trafic HTTPS régulier, lui permettant de contourner l’étranglement et l’inspection en profondeur tout en conservant de solides protections de la vie privée.

TrustTunnel

Le projet TrustTunnel inclut le point de terminaison VPN (le dépôt TrustTunnel), library and CLI for the client, et GUI application.

  • Fonctionnalités du serveur
    • Protocole VPN: La bibliothèque implémente le protocole VPN compatible avec HTTP/1.1, HTTP/2 et QUIC. En imitant le trafic réseau régulier, il devient impossible à détecter et à bloquer.
    • Tunnelage de trafic flexible: TrustTunnel peut tunneler TCP, UDP et ICMP trafic à destination et en provenance du client.
    • Compatibilité de la plate-forme: Le serveur est compatible avec Linux et macOS. Le client est disponible pour Android, Apple, Windows et Linux.
  • Caractéristiques du client
    • Tunneling de trafic: La bibliothèque est capable de tunneler TCP, UDP et ICMP trafic du client au point de terminaison et retour.
    • Support multiplateforme: Il prend en charge les plates-formes Linux, macOS et Windows, fournir une expérience cohérente entre différents systèmes d’exploitation.
    • System-Wide Tunnel et SOCKS5 proxy : Il peut être configuré comme un system-wide tunnel, utilisant une interface réseau virtuelle, ainsi qu’un proxy SOCKS5.
    • Split Tunneling : La bibliothèque prend en charge le split tunneling, permettant aux utilisateurs de exclure les connexions à certains domaines ou hôtes du routage via le VPN endpoint, ou vice versa, n’achemine que les connexions vers des domaines ou des hôtes spécifiques à travers le point de terminaison basé sur une liste d’exclusion.
    • DNS personnalisé en amont (Custom DNS Upstream): Les utilisateurs peuvent spécifier un DNS personnalisé en amont, qui est utilisé pour les requêtes DNS acheminées via le point de terminaison VPN.

OVH VPS Debian 13 (vps-56d1c3c5)

OVH Zone DNS domaine xoyize.xyz

1
2
3
4
5
6
7
8
$TTL 3600
@	IN SOA dns106.ovh.net. tech.ovh.net. (2085343710 86400 3600 3600000 60)
        IN NS     dns106.ovh.net.
        IN NS     ns106.ovh.net.
        IN A     164.132.198.38
        IN AAAA     2001:41d0:404:200::7ec4
*        IN A     164.132.198.38
*        IN AAAA     2001:41d0:404:200::7ec4

Certificats Let’s Encrypt

Si vous utilisez Certbot pour gérer les certificats et les renouveler automatiquement, suivez le guide dans CERT_RENEWAL.md.

ACME.sh (systemd timer)

Certificat et clé: /etc/ssl/private/{fullchain.pem, privkey.pem}

Serveur TrustTunnel (endpoint)

OVH VPS xoyize.xyz fera office de serveur VPN

Se connecter sur le VPS ou serveur qui va héberger TrustTunnel

1
ssh usxb@164.132.198.38 -p 55038 -i /home/yann/.ssh/vps-56d1c3c5

Installation endpoint

On se positionne sur le home

1
cd ~

Un script d’installation est disponible qui peut être exécuté avec la commande suivante:

1
curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s -

Le script d’installation téléchargera le paquet préconstruit à partir du dernier GitHub release pour l’architecture système appropriée et décompressez-le sur /opt/trusttunnel. Le répertoire de sortie peut être remplacé par la spécification -o DIR à la fin de la commande ci-dessus.

Si vous souhaitez installer une version spécifique (au lieu des dernières), utilisez -V <version>:
curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s - -V <version>

Résultat suivant commande ci-dessus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Installing TrustTunnel...
Operating system: linux
CPU type: x86_64
TrustTunnel will be installed to '/opt/trusttunnel'
'/opt/trusttunnel' directory does not exist, attempting to create it...
Requesting sudo to create directory '/opt/trusttunnel'
'/opt/trusttunnel' has been created and ownership has been set to 'ouestyan'
Package name: 'trusttunnel-v0.9.125-linux-x86_64.tar.gz'
TrustTunnel will be installed in '/opt/trusttunnel'
Downloading TrustTunnel package: https://github.com/TrustTunnel/TrustTunnel/releases/download/v0.9.125/trusttunnel-v0.9.125-linux-x86_64.tar.gz
TrustTunnel package has been downloaded successfully
Checking downloaded package 'trusttunnel-v0.9.125-linux-x86_64.tar.gz'
Unpacking package from 'trusttunnel-v0.9.125-linux-x86_64.tar.gz' into '/opt/trusttunnel'
Package has been unpacked successfully

============================================================
  TrustTunnel Endpoint was installed to '/opt/trusttunnel'
============================================================

--- Continue setup ---

Run the Setup Wizard to continue the endpoint setup:

    cd /opt/trusttunnel
    sudo ./setup_wizard

--- Configure systemd service ---

The '/opt/trusttunnel/trusttunnel.service.template' template
could be used to run a configured endpoint as a systemd service.

Once the endpoint setup is finished, run the following commands
to configure a systemd service:

    cd /opt/trusttunnel/
    sudo cp trusttunnel.service.template /etc/systemd/system/trusttunnel.service
    sudo systemctl daemon-reload
    sudo systemctl enable --now trusttunnel

Note: Actuellement uniquement les architectures linux-x86_64et linux-aarch64 sont fournies pour les paquets préconstruits.

Exécuter les commandes

1
2
cd /opt/trusttunnel
sudo ./setup_wizard

Répondre aux différentes question qui vont suivre

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Welcome to the setup wizard
Let's build the library settings
✔ The address to listen on (native: 0.0.0.0:443; Docker with 443:8443 mapping: 0.0.0.0:8443) · 0.0.0.0:443
✔ Path to the credentials file · credentials.toml
✔ Username · trustuser
✔ Password · ********
✔ Add one more user? · no
The user credentials are written to the file: credentials.toml
✔ Path to the rules file · rules.toml
Let's create connection filtering rules
✔ Do you want to configure connection filtering rules? (if not, all connections will be allowed) · no
The rules configuration is written to the file: rules.toml
The library settings are successfully built

✔ Path to a file to store the library settings · vpn.toml
Let's build the TLS hosts settings
✔ How would you like to create a certificate? · Provide path to existing certificate
✔ Path to certificate file(s):
  - Single file containing both cert and key: /path/to/combined.pem
  - Separate files: /path/to/cert.pem /path/to/key.pem
 · /etc/ssl/private/fullchain.pem /etc/ssl/private/privkey.pem
✔ Do you want to configure alternative SNIs? · no
The TLS hosts settings are successfully built

✔ Path to a file to store the TLS hosts settings · hosts.toml

═══════════════════════════════════════════════════════════════
                    Setup Complete!
═══════════════════════════════════════════════════════════════

Configuration files created:
  • vpn.toml          - Main endpoint settings
  • hosts.toml    - TLS host configuration
  • credentials.toml  - User credentials
  • /etc/ssl/private/fullchain.pem    - TLS certificate
  • /etc/ssl/private/privkey.pem     - TLS private key

───────────────────────────────────────────────────────────────
                      Next Steps
───────────────────────────────────────────────────────────────

1. Start the endpoint:
   ./trusttunnel_endpoint vpn.toml hosts.toml

2. Export client configuration (replace <username> and <address>):
   ./trusttunnel_endpoint vpn.toml hosts.toml -c <username> -a <address>
   where <address> is ip, ip:port, domain, or domain:port

3. Use the exported config with:
   • TrustTunnel CLI Client - Pass to setup_wizard --endpoint_config
   • TrustTunnel Flutter Client - Enter the config manually

See https://github.com/TrustTunnel/TrustTunnel/blob/master/CONFIGURATION.md for advanced settings.
═══════════════════════════════════════════════════════════════

Structure finale du dossier

1
2
3
4
5
6
7
8
9
10
11
/opt/trusttunnel/
├── credentials.toml
├── hosts.toml
├── LICENSE
├── rules.toml
├── setup_wizard
├── setup_wizard.sig
├── trusttunnel_endpoint
├── trusttunnel_endpoint.sig
├── trusttunnel.service.template
└── vpn.toml

Le service TrustTunnel est démarrer à l’installation, il suffit de le redémarrer

1
2
sudo systemctl restart trusttunnel.service
sudo systemctl status trusttunnel.service --no-pager -l

Status

1
2
3
4
5
6
7
8
9
10
11
12
13
14
● trusttunnel.service - TrustTunnel endpoint
     Loaded: loaded (/etc/systemd/system/trusttunnel.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-07-29 20:15:20 CEST; 3min 2s ago
 Invocation: 6a8882caa08841109c1278333e5d404f
   Main PID: 14276 (trusttunnel_end)
      Tasks: 3 (limit: 4539)
     Memory: 3.1M (peak: 3.6M)
        CPU: 17ms
     CGroup: /system.slice/trusttunnel.service
             └─14276 /opt/trusttunnel/trusttunnel_endpoint vpn.toml hosts.toml

juil. 29 20:15:20 vps-56d1c3c5 systemd[1]: Started trusttunnel.service - TrustTunnel endpoint.
juil. 29 20:15:20 vps-56d1c3c5 trusttunnel_endpoint[14276]: 20:15:20.936902 [ThreadId(1)] [INFO] [trusttunnel::core] Listening to TCP 0.0.0.0:443
juil. 29 20:15:20 vps-56d1c3c5 trusttunnel_endpoint[14276]: 20:15:20.937631 [ThreadId(1)] [INFO] [trusttunnel::core] Listening to UDP 0.0.0.0:443

Création configuration client

Exporter la configuration du client (remplacer <username> et <address>) :

1
 . /trusttunnel_endpoint vpn.toml hosts.toml -c <username> -a <address>

<address> est ip, ip:port, domain ou domain:port

Pour ma structure

1
./trusttunnel_endpoint vpn.toml hosts.toml -c trustuser -a 164.132.198.38

Cette commande génère un tt:// de la forme suivante

1
tt://?wHqmdTw6G8bAeZUWOTIbzLTKlqXVi4rb1p3ZJB7x7I1rEyx1zx2WDu1

TrustTunnel - Client linux

Installer le client Linux

Un script d’installation est disponible:

1
curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnelClient/refs/heads/master/scripts/install.sh | sh -s -

Le script d’installation téléchargera le paquet préconstruit à partir de la dernière version de GitHub pour l’architecture système appropriée et le décompactera sur /opt/trusttunnel_client. Le répertoire de sortie pourrait être remplacé par la spécification -o DIRdrapeau à la fin de la commande ci-dessus.

Note: Installer des architectures de scripts x86_64, aarch64, armv7, mips et mipsel pour linux et bras64 et x86_64 pour les macos.

Résultat exécution script

1
2
3
4
5
6
7
8
9
10
Package has been unpacked successfully

TrustTunnel Client has been installed successfully!

You may want to configure the client first, see 'cd /opt/trusttunnel_client && ./setup_wizard -h'
The client executable is located at '/opt/trusttunnel_client/trusttunnel_client'

To verify the installation, run the following command to import the public key and verify the signature:
    gpg --keyserver 'keys.openpgp.org' --recv-key '28645AC9776EC4C00BCE2AFC0FE641E7235E2EC6'
    gpg --verify /opt/trusttunnel_client/trusttunnel_client.sig /opt/trusttunnel_client/trusttunnel_client

Résultat vérification

1
2
3
4
5
6
7
8
9
10
11
12
gpg: répertoire « /home/aya/.gnupg » créé
gpg: /home/aya/.gnupg/trustdb.gpg : base de confiance créée
gpg: clef 0FE641E7235E2EC6 : clef publique « AdGuard <devteam@adguard.com> » importée
gpg: Quantité totale traitée : 1
gpg:                     importées : 1
gpg: Signature faite le jeu. 09 avril 2026 11:40:33 CEST
gpg:                avec la clef RSA 28645AC9776EC4C00BCE2AFC0FE641E7235E2EC6
gpg:                 émetteur « devteam@adguard.com »
gpg: Bonne signature de « AdGuard <devteam@adguard.com> » [inconnu]
gpg: Attention : l'identifiant utilisateur de cette clef n'est pas certifié avec une signature de confiance !
gpg:             Rien n'indique que la signature appartient à son propriétaire.
Empreinte de clef principale : 2864 5AC9 776E C4C0 0BCE  2AFC 0FE6 41E7 235E 2EC6

Mise à jour du client Linux

Le script d’installation installe toujours la dernière version disponible. Donc, pour mettre à jour votre installation, exécutez à nouveau la commande d’installation:

1
curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnelClient/refs/heads/master/scripts/install.sh | sh -s -

Cela réexécute l’installateur et remplace les binaires dans le répertoire d’installation ( /opt/trusttunnel_clientpar défaut, ou le répertoire que vous avez spécifié avec -o DIR).

Note: N’oubliez pas d’arrêter le client avant la mise à jour (par exemple, en arrêtant le processus en cours d’exécution).

Configuration client

Installation effectuée à partir du fichier de configuration générée de type tt:// par le serveur TrustTunnel

1
2
3
# Exécuter la commande 
cd /opt/trusttunnel_client
./setup_wizard -m non-interactive -d "tt://?wHqmdTw6G8bAeZUWOTIbzLTKlqXVi4rb1p3ZJB7x7I1rEyx1zx2WDu1" --settings trusttunnel_client.toml

N’oublier pas de remplacer tt://?wHqmdTw6G8bAeZUWOTIbzLTKlqXVi4rb1p3ZJB7x7I1rEyx1zx2WDu1

La configuration client active utilise le fichier de configuration /opt/trusttunnel_client/trusttunnel_client.toml

TrustTunnel - Archlinux Tray Agent

Agent de barre d’état TrustTunnel

Préalable

Le client TrustTunnel doit être installé

Arch Linux

Cloner le dépôt

1
2
git clone https://forgejo.rnmkcy.eu/forgeadmin/TrustTunnelClient-Arch.git
cd TrustTunnelClient-Arch/

Installation

1
2
makepkg -si
#yay -U trusttunnel-tray-*.pkg.tar.zst

Cela construit et installe le paquet trusttunnel-tray avec les chemins appropriés:

  • binaire: /usr/bin/trusttunnel-tray
  • Service system: /usr/lib/systemd/system/trusttunnel.service
  • Autostart: /etc/xdg/autostart/trusttunnel-tray.desktop
  • Règle de Polkit: /etc/polkit-1/rules.d/49-trusttunnel.rules

Créer un .desktop “visible” côté utilisateur (pour le lanceur), basé sur le même Exec que l’autostart système.

1
2
mkdir -p ~/.local/share/applications
nano ~/.local/share/applications/trusttunnel-tray.desktop

Contenu

1
2
3
4
5
6
7
8
[Desktop Entry]
Type=Application
Name=TrustTunnel Tray
Comment=System tray agent for TrustTunnel VPN
Exec=/usr/bin/trusttunnel-tray
Icon=network-vpn
Terminal=false
Categories=Network;System;

Enregistrer et recharger

1
2
update-desktop-database ~/.local/share/applications 2>/dev/null
kbuildsycoca6 --noincremental 2>/dev/null || true

La gestion des services utilise la politique de police intégrée de systemd (org.freedesktop.systemd1.manage-units). Le installé trusttunnel.rulesRetours YESpour manage-unitsportée à trusttunnel.servicepour le local actif wheelutilisateurs, de sorte que le plateau peut Activer/Désactiver/Redémarrer et changer de profil sans mot de passe. Si la règle est absente, l’invite de mot de passe de polkit normale est utilisée à la place.

TrustTunnelClient-Arch, via le service trusttunnel, utilise le fichier de configuration /opt/trusttunnel_client/trusttunnel_client.toml

Pour un lancement du VPN au démarrage de la machine, activer le service: sudo systemctl enable trusttunnel

Pour se connecter , lancer

Clic droit sur l’icône TrustTunnel, puis “Activer”

l’icône TrustTunnel avec un point vert ( TrustTunnel: connecté – “default”) est dans la barre des tâches

Menu par clic-droit sur icône

Profils

Les profils VPN trusttunnel_client.toml sont stockés dans /opt/trusttunnel_client/profiles/<name>.toml. La config active /opt/trusttunnel_client/trusttunnel_client.tomlest un lien relatif avec le profil actif, de sorte que le démon lit son chemin inchangé. Lors du premier lancement, le plateau migre toute configuration plate existante dans profiles/default.tomlet repointe le chemin vers un lien symbolique.

Utilisez le sous-menu Profil du plateau pour:

  • Changez le profil actif (repointe le lien symbolique et redémarre le service — sans mot de passe)
  • Créer un nouveau profil ensemencé à partir de l’actuel
  • Modifiez le profil actif dans votre éditeur de texte par défaut (redémarrez à appliquer)

Traduction en français des commentaires du fichier de configuration VPN :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Niveau de journalisation [info, debug, trace]
loglevel = "info"

# Mode VPN.
# Définit la politique de routage des connexions client :
# * general : acheminer toutes les connexions via un point de terminaison VPN, sauf celles dont les destinations figurent dans les exclusions,
# * selective : acheminer uniquement via un point de terminaison VPN les connexions dont les destinations figurent dans les exclusions.
vpn_mode = "general"

# Lorsqu'il est désactivé, toutes les demandes de connexion sont routées directement vers les hôtes cibles
# en cas de perte de connexion au point de terminaison VPN. Cela permet de ne pas interrompre
# une connexion Internet si l'utilisateur a une connectivité médiocre vers un point de terminaison.
# Lorsqu'il est activé, les demandes de connexion entrantes qui devraient être routées via
# un point de terminaison ne seront pas routées directement dans ce cas.
killswitch_enabled = true

# Lorsque le kill switch est activé, sur les plateformes où les connexions entrantes sont bloquées par le
# kill switch, autoriser les connexions entrantes sur ces ports locaux. Un tableau d'entiers.
killswitch_allow_ports = []

# Lorsqu'il est activé, un groupe post-quantique peut être utilisé pour l'échange de clés
# dans les handshakes TLS initiés par le client VPN.
post_quantum_group_enabled = true

# Domaines et adresses qui doivent être routés de manière particulière.
# Syntaxe prise en charge :
#   * nom de domaine
#     * s'il commence par "*.", tout sous-domaine du domaine sera apparié, y compris
#       le sous-domaine www, mais pas le domaine lui-même (par ex., `*.example.com` appariéra
#       `sub.example.com`, `sub.sub.example.com`, `www.example.com`, mais pas `example.com`)
#     * s'il commence par "www." ou s'il s'agit simplement d'un nom de domaine, le domaine lui-même et son
#       sous-domaine www seront appariés (par ex. `example.com` et `www.example.com` appariéront
#       `example.com` `www.example.com`, mais pas `sub.example.com`)
#   * adresse IP
#     * les formats reconnus sont :
#       * [AdresseIPv6]:port
#       * [AdresseIPv6]
#       * AdresseIPv6
#       * AdresseIPv4:port
#       * AdresseIPv4
#     * si le port n'est pas spécifié, tout port sera apparié
#   * plage CIDR
#     * les formats reconnus sont :
#       * AdresseIPv4/masque
#       * AdresseIPv6/masque
exclusions = []

# Paramètres du point de terminaison du serveur VPN
[endpoint]
# Nom d'hôte du point de terminaison, utilisé pour l'établissement de la session TLS
hostname = "xoyize.xyz"
# Adresses du point de terminaison (IP:port ou nom d'hôte:port).
# L'adresse exacte est sélectionnée par le pinger. Les noms d'hôte sont résolus via DNS
# au moment de la connexion.
addresses = ["164.132.198.38:443"]
# Valeur SNI personnalisée pour le handshake TLS.
# Si définie, cette valeur est utilisée comme SNI TLS au lieu du nom d'hôte.
custom_sni = ""
# Indique si le trafic IPv6 peut être routé via le point de terminaison
has_ipv6 = true
# Nom d'utilisateur pour l'autorisation
username = "trustuser"
# Mot de passe pour l'autorisation
password = "xxxxxxxxxxxxxxxxxxxxx"
# Préfixe et masque aléatoires du client TLS (chaîne hexadécimale, format : préfixe[/masque])
client_random = ""
# Ignorer la vérification du certificat du point de terminaison ?
# Autrement dit, tout certificat est accepté lorsque ceci est défini à true.
skip_verification = false
# Certificat du point de terminaison au format PEM.
# S'il n'est pas spécifié, le certificat du point de terminaison est vérifié à l'aide du stockage système.
certificate = ""
# Protocole à utiliser pour communiquer avec le point de terminaison [http2, http3]
upstream_protocol = "http2"
# Les mesures anti-DPI doivent-elles être activées
anti_dpi = false

# Serveurs DNS amont. Par défaut : DNS non filtré d'AdGuard.
# L'un des types suivants :
# * 8.8.8.8:53 -- DNS brut
# * tcp://8.8.8.8:53 -- DNS brut sur TCP
# * tls://1.1.1.1 -- DNS-over-TLS
# * https://dns.adguard.com/dns-query -- DNS-over-HTTPS
# * sdns://... -- empreinte DNS (voir https://dnscrypt.info/stamps-specifications)
# * quic://dns.adguard.com:8853 -- DNS-over-QUIC
dns_upstreams = []


# Définit la manière d'écouter le trafic réseau selon le type de table imbriquée.
# Types possibles :
#   * socks : proxy SOCKS5 avec support UDP,
#   * tun : périphérique TUN.
[listener]

[listener.tun]
# Nom de l'interface utilisée pour les connexions établies par le client VPN.
# Sous Linux, Windows et macOS, elle est détectée automatiquement si non spécifiée.
# Sous Windows, un index d'interface tel qu'affiché par `route print`, écrit sous forme de chaîne, peut être utilisé à la place d'un nom.
bound_if = ""
# Routes en notation CIDR à définir sur l'interface virtuelle
included_routes = ["0.0.0.0/0", "2000::/3"]
# Routes en notation CIDR à exclure du routage via l'interface virtuelle
excluded_routes = ["0.0.0.0/8", "10.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.168.0.0/16", "224.0.0.0/3"]
# Taille MTU sur l'interface
mtu_size = 1280
# Autoriser la modification des serveurs DNS système
change_system_dns = true

# [listener.socks]
# # Adresse IP sur laquelle lier l'écouteur
# address = "127.0.0.1:1080"
# # Nom d'utilisateur pour l'authentification si désiré
# username = ""
# # Mot de passe pour l'authentification si désiré
# password = ""

Quelques remarques techniques sur cette configuration :

  • Mode VPN : Actuellement en mode general, ce qui signifie que tout le trafic passe par le VPN sauf les exclusions. Pour un usage plus restrictif (seules les exclusions passent par le VPN), passez à selective.

  • Kill switch : Activé (true), ce qui coupe Internet si la connexion VPN tombe — utile pour la confidentialité mais peut être gênant avec une connexion instable.

  • Routes : La configuration TUN inclut toutes les routes IPv4 et IPv6 (0.0.0.0/0 et 2000::/3) mais exclut les plages privées classiques (RFC 1918, link-local, etc.).

  • DNS : Tableau vide, donc utilisation des DNS par défaut (AdGuard non filtré). Vous pouvez ajouter vos propres upstreams DNS si nécessaire.

  • Sécurité : La vérification du certificat est activée (skip_verification = false), ce qui est recommandé. Le groupe post-quantique est activé pour renforcer l’échange de clés TLS.

Les principaux commutateurs (booléens) :

Paramètres d’activation/désactivation

Paramètre Valeur actuelle Fonction
killswitch_enabled true Active/désactive le kill switch (coupe Internet si le VPN tombe)
post_quantum_group_enabled true Active/désactive l’échange de clés post-quantique dans TLS
has_ipv6 true Autorise (ou non) le routage du trafic IPv6 via le point de terminaison
skip_verification false Ignore (ou non) la vérification du certificat du point de terminaison
change_system_dns true Autorise (ou non) la modification des serveurs DNS système
anti_dpi false Active/désactive les mesures anti-DPI (Deep Packet Inspection)

Pour désactiver le kill switch :

1
killswitch_enabled = false

Pour activer les mesures anti-DPI :

1
anti_dpi = true

Pour désactiver la cryptographie post-quantique :

1
post_quantum_group_enabled = false

TrustTunnel - Clients Android

Installer application android TrustTunnel

     
 

Maintenance

Désinstaller trusttunnel-tray

1
pacman -R trusttunnel-tray

Manuellement

1
2
3
4
5
6
sudo systemctl disable --now trusttunnel.service
sudo rm /etc/systemd/system/trusttunnel.service
sudo rm /etc/polkit-1/rules.d/49-trusttunnel.rules
sudo systemctl daemon-reload
sudo rm /opt/trusttunnel_client/trusttunnel-tray
rm ~/.config/autostart/trusttunnel-tray.desktop

SNI

Serveur VPN TrustTunnel: Message warning TLS lié au SNI

1
août 15 05:04:07 vps-56d1c3c5 trusttunnel_endpoint[764]: 05:04:07.738435 [ThreadId(2)] [WARN] [rustls::msgs::handshake] Illegal SNI extension: ignoring IP address presented as hostname (3136342e3133322e3139382e3338)

Le log dit exactement ça : côté serveur, la librairie TLS (rustls) reçoit une SNI “qui ressemble à une IP” (3136342e3133322e3139382e3338), et elle refuse / ignore cette SNI car SNI ne doit pas être une adresse IP encodée comme hostname.

3136342e3133322e3139382e3338 est l’IP encodée en hex ASCII :

1
31 36 34 2e 31 33 32 2e 31 39 38 2e 33 38 → 164.132.198.38

Le client envoie un ClientHello TLS où :

  • server_name (SNI) = 164.132.198.38 (ou l’équivalent encodé),
  • le serveur veut un SNI de type nom de domaine (ici xoyize.xyz).

Le serveur, dans hosts.toml, laisse allowed_sni = [].

  • pas de filtre explicite, mais rustls n’accepte pas “SNI = IP” comme bon hostname, d’où le WARN Illegal SNI ….

Selon la manière dont trusttunnel est écrit, parfois endpoint.hostname sert à construire le SNI et custom_sni n’est pas pris en compte (ou inversement).

Côté client: custom_sni = "xoyize.xyz" ne corrige pas, c’est probablement un override ailleurs ou une limitation de config.

Côté serveur : restreindre explicitement allowed_sni
Même si allowed_sni = [] marche souvent, le fait que rustls voit une SNI illégale indique un problème de comportement côté client.

Dans hosts.toml, remplacer allowed_sni = [] par allowed_sni = ["xoyize.xyz"]
Avec cette modification, tout est rentré dans l’ordre: sudo journalctl -u trusttunnel -f --no-pager

1
2
3
août 15 05:57:26 vps-56d1c3c5 systemd[1]: Started trusttunnel.service - TrustTunnel endpoint.
août 15 05:57:27 vps-56d1c3c5 trusttunnel_endpoint[5047]: 05:57:27.012293 [ThreadId(1)] [INFO] [trusttunnel::core] Listening to TCP 0.0.0.0:443
août 15 05:57:27 vps-56d1c3c5 trusttunnel_endpoint[5047]: 05:57:27.012461 [ThreadId(1)] [INFO] [trusttunnel::core] Listening to UDP 0.0.0.0:443
Cet article est sous licence CC BY 4.0 par l'auteur.