Documentation Rvhhost, guides pour vos serveurs de jeux, VPS et web.

Tous les guides
FiveM · Réseau

Masquer l'IP de son serveur FiveM avec un proxy WireGuard

Un serveur FiveM populaire finit toujours par être attaqué, et la première chose que cherche un attaquant est votre adresse IP. Le principe du proxy est simple : les joueurs se connectent à une machine filtrée, qui transmet le trafic à votre serveur réel par un tunnel chiffré. Votre IP d'origine n'apparaît jamais dans le jeu.

Comment ça fonctionne

  • La façade : un petit VPS avec une IP protégée, celle que voient les joueurs. Il n'héberge aucune ressource, il ne fait que transmettre.
  • Le tunnel : une liaison WireGuard chiffrée entre la façade et votre serveur de jeu, sur un réseau privé du type 10.8.0.0/24.
  • Le serveur de jeu : votre serveur FiveM, dont l'IP publique n'est plus jamais annoncée.

Le proxy ne remplace pas une protection anti-DDoS : il déplace la cible. C'est l'IP de la façade qui doit être filtrée. Sur nos offres, la mitigation Gcore est incluse en amont du réseau, et notre service Tunnel IP fournit cette façade déjà protégée si vous ne voulez pas la gérer vous-même.

Monter le tunnel WireGuard

Sur les deux machines, installez WireGuard et générez une paire de clés :

apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
chmod 600 /etc/wireguard/private.key

Sur la façade, créez /etc/wireguard/wg0.conf :

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = CLE_PRIVEE_FACADE

[Peer]
PublicKey = CLE_PUBLIQUE_SERVEUR_JEU
AllowedIPs = 10.8.0.2/32

Sur le serveur de jeu, le fichier symétrique :

[Interface]
Address = 10.8.0.2/24
PrivateKey = CLE_PRIVEE_SERVEUR_JEU

[Peer]
PublicKey = CLE_PUBLIQUE_FACADE
Endpoint = IP_PUBLIQUE_FACADE:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25
  1. 1Activez le tunnel des deux côtés : systemctl enable --now wg-quick@wg0.
  2. 2Ouvrez le port 51820 en UDP sur la façade : ufw allow 51820/udp.
  3. 3Vérifiez la liaison : ping 10.8.0.1 depuis le serveur de jeu, et wg show pour voir le dernier échange.

PersistentKeepalive maintient le tunnel ouvert quand le serveur de jeu est derrière un pare-feu ou du NAT. Sans lui, la liaison peut se figer après quelques minutes d'inactivité.

Rediriger le trafic du jeu

Sur la façade, autorisez le routage puis redirigez le port 30120, en TCP et en UDP, vers le serveur de jeu à travers le tunnel :

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-proxy.conf
sysctl --system

iptables -t nat -A PREROUTING -p tcp --dport 30120 -j DNAT --to-destination 10.8.0.2:30120
iptables -t nat -A PREROUTING -p udp --dport 30120 -j DNAT --to-destination 10.8.0.2:30120
iptables -A FORWARD -d 10.8.0.2 -p tcp --dport 30120 -j ACCEPT
iptables -A FORWARD -d 10.8.0.2 -p udp --dport 30120 -j ACCEPT

Rendez ces règles persistantes avec apt install -y iptables-persistent puis netfilter-persistent save.

Conserver l'adresse IP réelle des joueurs

C'est le point que la plupart des tutoriels ratent. Si vous ajoutez une règle de masquage (MASQUERADE) sur la façade, tout fonctionne, mais votre serveur voit tous les joueurs arriver depuis 10.8.0.1 : les bans par IP, les journaux et les protections anti-triche deviennent inutilisables.

Pour garder les vraies adresses, ne masquez pas, et faites revenir les réponses par le tunnel avec une règle de routage, sur le serveur de jeu :

ip route add default dev wg0 table 100
ip rule add from 10.8.0.2 table 100

Ces deux commandes ne survivent pas au redémarrage. Ajoutez-les dans la section [Interface] du fichier wg0.conf avec PostUp, et leurs équivalents ip rule del et ip route del avec PostDown.

Déclarer le proxy dans server.cfg

Sans cette étape, votre serveur continue d'annoncer son IP réelle dans la liste des serveurs, et le proxy ne sert à rien. Ajoutez dans server.cfg :

set sv_forceIndirectListing true
set sv_endpoints "IP_FACADE:30120"
set sv_listingIpOverride "IP_FACADE:30120"
set sv_proxyIPRanges "10.8.0.0/24"
set sv_requestParanoia 1
  • sv_forceIndirectListing empêche la liste des serveurs d'annoncer votre serveur avec son IP réelle.
  • sv_endpoints déclare le point d'entrée réellement utilisé par les joueurs, ici la façade.
  • sv_listingIpOverride indique quelle adresse le service de listing doit interroger, utile quand le serveur est filtré et joignable uniquement via le proxy.
  • sv_proxyIPRanges autorise l'en-tête X-Real-IP depuis le réseau du tunnel et exempte celui-ci du limiteur de débit.
  • sv_requestParanoia durcit le serveur contre les floods HTTP passant par un proxy.

Vérifier que l'IP est bien masquée

  1. 1Redémarrez le serveur FiveM, puis connectez-vous avec connect IP_FACADE:30120.
  2. 2Depuis un autre poste, interrogez http://IP_FACADE:30120/info.json : la réponse doit venir de votre serveur, via le proxy.
  3. 3Cherchez votre serveur dans la liste : l'adresse affichée doit être celle de la façade.
  4. 4Vérifiez dans vos journaux de connexion que les adresses des joueurs sont bien leurs adresses publiques, et non 10.8.0.1.

Dernière précaution, et elle est essentielle : bloquez le port 30120 en direct sur votre serveur de jeu, en n'autorisant que le tunnel. Sans cela, l'IP d'origine reste joignable et le proxy est contournable.

ufw allow in on wg0 to any port 30120
ufw deny 30120

Limites et alternatives

  • Le proxy ajoute un saut réseau : quelques millisecondes de latence en plus, négligeables si la façade est proche du serveur de jeu, pénalisantes si elle est sur un autre continent.
  • La façade devient un point de défaillance : si elle tombe, le serveur devient injoignable même s'il fonctionne.
  • Le tunnel réduit la taille utile des paquets. En cas de comportements étranges, abaissez le MTU de l'interface WireGuard, par exemple à 1380.
  • La documentation officielle propose aussi un proxy avec le module stream de nginx, qui doit transmettre le même numéro de port en TCP et en UDP.

Si vous voulez ce résultat sans monter l'infrastructure, notre Tunnel IP fournit une façade déjà filtrée, et nos serveurs FiveM managés intègrent la protection Anti-DDoS Gcore sans configuration de votre part.

Questions fréquentes

Un proxy WireGuard protège-t-il vraiment des attaques DDoS ?+

Il masque l'adresse de votre serveur de jeu et déplace la cible vers la façade. C'est efficace contre les attaques visant votre IP d'origine, mais la façade doit elle-même être protégée par une mitigation réseau, sinon elle tombera à sa place.

Pourquoi mon serveur n'apparaît plus dans la liste après la mise en place du proxy ?+

Il manque presque toujours les convars sv_forceIndirectListing, sv_endpoints et sv_listingIpOverride dans server.cfg, ou le port 30120 n'est pas transmis en TCP en plus de l'UDP. Le TCP est indispensable au listing.

Les adresses IP de mes joueurs sont toutes identiques, comment corriger ?+

C'est le signe d'une règle de masquage sur la façade. Retirez le MASQUERADE et faites revenir les réponses par le tunnel avec une règle de routage sur le serveur de jeu, comme décrit dans ce guide.

Le proxy augmente-t-il le ping des joueurs ?+

Légèrement, le temps du saut supplémentaire. Si la façade et le serveur de jeu sont dans le même pays, la hausse est de quelques millisecondes. Elle devient perceptible si les deux machines sont éloignées géographiquement.