VPN et routage

Bonjour,

Ce post fera un peu guise de présentation en détaillant mon problème et le pourquoi du comment.

Depuis de nombreuses années je fais de l’hébergement de mail, de nextcloud, de site web… en utilisant un serveur dédié qui a une IPv4 et une IPv6, config réseau très basique. C’est pour cette raison que je ne suis pas un grand connaisseur du routage IP. En gros, je sais qu’une gateway est nécessaire pour passer d’un réseau à un autre, ça s’arrête là.
Comme le prix des dédiés augmentent j’ai décidé d’héberger tout ces petits services chez moi derrière ma connexion free. Sauf que free (ou n’importe quel autre BOFS d’ailleurs) et le mail, c’est pas top. C’est pourquoi j’ai décidé de prendre un vpn chez ARN.

Je souhaite n’utiliser ce VPN que pour le transport du mail. En attendant d’avoir déménagé tous les services chez moi, j’ai voulu mettre en place le vpn sur le serveur dédié. Ça fera une chose de faite.
J’ai déjà fait des tests qui semblent concluants dans le sens où j’ai trouvé la bonne conf à postfix pour qu’il envoie le mail depuis les IP du vpn. Mais je n’avais pas vu que, quand le vpn est actif, seules ses IP sont routées. En effet, je ne peux plus pinguer ou accéder à mon serveur en utilisant les IP dédiées depuis l’extérieur.

Sauriez-vous me dire comment je pourrais configurer le VPN de telle sorte que mon serveur soit accessible via les IP du vpn et celles dédiées svp ?

Merci d’avance, bon week-end !

Salut et bienvenu,
Si tu utilises un VPN wireguard, ton soucis c’est qu’une route par défaut est ajoutée pour rediriger tous les paquets à destinations d’une IP dans le range 0.0.0.0/0 (c’est à dire toute) à travers l’interface du tunnel.

Pour éviter ça, il faut que tu édites le fichier de configuration pour retirer:

AllowedIPs = 0.0.0.0/0,::/0

https://forum.mikrotik.com/t/wireguard-allowed-ips-unofficial-wireguard-documentation/156426
https://wiki.archlinux.org/title/WireGuard

Salut,

Merci pour ta réponse. J’ai donc testé en supprimant cette ligne, malheureusement il devient impossible de contacter le serveur de l’extérieur via les IP du VPN. Merci pour ces précieux liens que je continue de potasser.

Je continue de chercher, il semblerait qu’en fait la suppression de “AllowedIPs” est bien un début de réponse. Ensuite il faudrait marquer les paquets spécifiques pour les router vers la bonne interface. Si je comprends le principe, je patauge complètement… mais je trouverai tôt ou tard :wink:

Bonjour,

Je n’ai toujours pas trouvé mais je trouve des pistes.

Finalement je pourrais me passer de marquer des paquets. À la place je peux simplement les router en fonction de la source (voir cet article). L’idée serait tout simplement que toutes les connexions entrantes sur l’ip du vpn, ressortent par la même ip.

Voilà ce que j’ai fait pour l’instant:

echo "100 smtp25" >> /etc/iproute2/rt_tables
ip rule add to $ip_vpn table smtp25

Mais mon cerveau ayant déjà un peu de mal avec le routage, a encore plus de mal avec les commandes liés au routage. Je ne sais donc pas quelles commandes je dois saisir ensuite pour poursuivre. Peut-être même que ma commande ‘ip’ n’est pas la bonne. Si jamais l’un·e d’entre vous le saurait, ce serait super :slight_smile:

PS: je précise que j’ai activé le vpn en commentant la ligne ‘AllowedIPs’.

Problème résolu grâce notamment à pbd sur chan irc de #fdn, merci à lui et à gratador. Merci à toi aussi @ljf

Maintenant place aux explications:

Tout d’abord le vrai souci est que j’activais le vpn par la commande “wg-quick” qui ajoute ses propres règles de filtrages et impose ses routes par défaut. Alors qu’en réalité ‘AllowedIPs’, absolument nécessaire, ne change en lui-même rien à la route, c’est vraiment wg-quick qui les manipulent.

Grâce à pdb, j’ai rédigé ce script maison qui, j’espère, pourra vous aider:

#!/bin/bash

vpn_ip4="<ipv4 du vpn>/32"
vpn_ip6="<ipv6 du vpn>/128"
vpn_if="wgID"
vpn_table="vpnID"
wg_conf=/etc/wireguard/wgID.conf
mtu=1450

vpn_start() {
  echo -n "Starting VPN... "

  if [ ! -f /etc/iproute2/rt_tables ] || [ -z "$(grep $vpn_table /etc/iproute2/rt_tables)" ]; then
    echo "La table ${vpn_table} n’existe pas:"
    echo "echo \"100 ${vpn_table}\" >> /etc/iproute2/rt_tables"
    exit 1
  fi

  # On prépare l'interface
  ip link add dev ${vpn_if} type wireguard

  # On spécifie les IP
  ip -4 address add ${vpn_ip4} dev ${vpn_if}
  ip -6 address add ${vpn_ip6} dev ${vpn_if}

  # On ajoute la conf wireguard
  wg setconf ${vpn_if} ${wg_conf}

  # C'est parti
  ip link set mtu ${mtu} up dev ${vpn_if}

  # Les routes par défaut ne sont pas changées,
  # donc rien ne passe par les IP du vpn par défaut.
  # C'est pourquoi on ajoute des règles pour que tout
  # ce qui transite par le vpn soit routé vers le vpn.
  ip -4 rule add from ${vpn_ip4} lookup ${vpn_table}
  ip -6 rule add from ${vpn_ip6} lookup ${vpn_table}
  ip -4 route add default dev ${vpn_if} table ${vpn_table}
  ip -6 route add default dev ${vpn_if} table ${vpn_table}

  echo "done."
}

vpn_stop() {
  echo -n "Stopping VPN... "
  ip -4 rule delete table ${vpn_table}
  ip -6 rule delete table ${vpn_table}
  ip addr flush dev ${vpn_if}
  ip link del dev ${vpn_if}

  echo "done."
}

case $1 in
  start) vpn_start ;;
  stop) vpn_stop ;;
  restart) vpn_stop ; sleep 1 ; vpn_start ;;
  *) echo "$0 start|stop|restart|status"
esac

Notez qu’en n’utilisant pas wg-quick, il est nécessaire de commenter les lignes “Address” et “MTU” du fichier de conf.

Grâce à ce script, tous les paquets sortants ou entrants par le vpn seront automatiquement routés vers le vpn. Les autres utiliseront la route par défaut.

Ravi que tu aies pu trouver une réponse ! :smiley:
Bien que je ne comprennes rien à ce sujet :thinking:

1 « J'aime »

Et mon serveur de mail passe maintenant nickel par le VPN :grinning_face:

Pour faire simple, avec ce script, les routes par défaut ne changent pas, donc les paquets transitent via les IP de l’interface eth0. En revanche tous les paquets qui transitent par les IP du VPN ont pour route ces mêmes IP. Quand des paquets entrent sur l’IPv4 du VPN, les paquets en réponse sortiront par cette même IPv4 au lieu d’utiliser la route par défaut.

J’espère que c’est un peu plus clair :wink:

Ce sujet a été automatiquement fermé après 7 jours. Aucune réponse n’est permise dorénavant.