Linux: endpoint routes via default gateway override existing routes

Fermée
#1,284 0 commentaires 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@moubctez y travaille déjà.

Depuis le 26/10/2026.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
53/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
rust
Domaine
networking

Piste de recherche

Start by reading configure_peer_routing(), configure_endpoints(), and setup_default_route in the Linux routing code, then compare endpoint routing behavior on BSD/macOS and the 0.11.x implementation. Trace route installation and interface teardown on each platform; done means Linux adds no endpoint routes, other platforms add them only for peers with a default allowed IP, existing routes are preserved, and endpoint routes are removed on teardown.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Description

This is a regression related to https://github.com/DefGuard/wireguard-rs/pull/142

configure_peer_routing on Linux calls configure_endpoints() for every peer that has an endpoint. For each one it installs <endpoint>/32 via <default gateway> using NLM_F_REPLACE in effect overwriting the pre-existing route for a given IP.

This breaks setups where one tunnel's endpoint is reachable only through another tunnel, because the secondary tunnel's gateway IP is incorrectly routed through the default gateway.

In 0.11.x Linux never added endpoint routes. BSD/macOS added them only when the peer's allowed IPs contained a default route.

The endpoint routes also don't appear to be removed when the interface is removed on Linux.

Proposed changes:

  • Linux: no endpoint routes. The fwmark rules from setup_default_route already stop WireGuard's own packets from looping.
  • Other platforms: add an endpoint route only when the peer's allowed IPs contain a default route, as in 0.11.x.
  • Never replace an existing route (use NLM_F_EXCL instead of NLM_F_REPLACE), and remove the endpoint routes on teardown.
Langage dominant
Rust
Étoiles
371
Forks
42
Merge moyen
1 j 2 h
PR mergées (30 j)
55

Préparer son environnement

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de DefGuard/client

Toutes les issues de DefGuard/client

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.