Exploring the roots and future of Internet Relay Chat

IPv6 sur les serveurs IRC : configuration et bonnes pratiques

J'ai active IPv6 sur mon premier serveur IRC en 2010. A l'epoque, 2% des utilisateurs se connectaient en IPv6. En 2025, c'est environ 30-40% sur les reseaux majeurs. La transition est lente mais irreversible. Si votre serveur IRC ne supporte pas IPv6, vous excluez une part croissante d'utilisateurs dont le FAI privilege IPv6 (certains FAI mobiles ne fournissent meme plus d'IPv4 publique).

Etat d'IPv6 sur IRC

La plupart des IRCds modernes supportent IPv6 nativement. UnrealIRCd, InspIRCd, et Ergo gerent le dual-stack sans probleme. La configuration est generalement triviale — il suffit de binder sur les deux protocoles.

Les problemes concrets avec IPv6 sur IRC :

  • Cloaking : Les adresses IPv6 sont plus longues et le masquage doit etre adapte.
  • Limites de clones : Comment compter les connexions "par IP" quand un utilisateur a un /64 entier ? Bannir une seule IPv6 est inutile si l'utilisateur change de suffixe.
  • DNSBL : Les listes noires ne couvrent pas aussi bien IPv6 qu'IPv4. DroneBL supporte IPv6, mais la couverture est moins complete.
  • Bans : Bannir *!*@2001:db8::1 n'est pas suffisant — il faut bannir le prefixe *!*@2001:db8:*.

Configuration dual-stack

# UnrealIRCd — listeners dual-stack :
listen {
  ip *;          # Ecoute sur toutes les IPv4
  port 6697;
  options { tls; };
};

listen {
  ip ::;         # Ecoute sur toutes les IPv6
  port 6697;
  options { tls; };
};

# Ou un listener unique (depend de l'OS) :
listen {
  ip *;
  port 6697;
  options { tls; };
};
# Sur Linux avec net.ipv6.bindv6only=0,
# un socket IPv6 accepte aussi les connexions IPv4.
# Mais c'est depend de la config sysctl.
# Deux listeners separes est plus fiable.

# InspIRCd :



# Verifier que ca fonctionne :
netstat -tlnp | grep 6697
# Doit montrer deux lignes :
# tcp   0.0.0.0:6697   LISTEN
# tcp6  :::6697         LISTEN

# Test de connexion IPv6 :
openssl s_client -connect [::1]:6697
# Ou depuis un client IRC :
/server add -tls irc6.votredomaine.com/6697

DNS et enregistrements AAAA

# Configuration DNS pour un serveur IRC dual-stack :

# Zone DNS :
irc.votredomaine.com.   A     203.0.113.10
irc.votredomaine.com.   AAAA  2001:db8::10

# Records separes pour forcer un protocole :
irc4.votredomaine.com.  A     203.0.113.10
irc6.votredomaine.com.  AAAA  2001:db8::10

# Round-robin multi-serveurs :
irc.votredomaine.com.   A     203.0.113.10
irc.votredomaine.com.   A     203.0.113.11
irc.votredomaine.com.   AAAA  2001:db8::10
irc.votredomaine.com.   AAAA  2001:db8::11

# PTR (reverse DNS) — important pour IRC :
# Le reverse DNS de l'IPv6 du serveur doit pointer
# vers le nom du serveur IRC.
# Sans reverse, certains clients affichent un warning.
10.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.  PTR  irc.votredomaine.com.
Conseil : Fournissez toujours un record irc6.votredomaine.com en plus de irc.votredomaine.com. Certains utilisateurs dans des environnements dual-stack problematiques (Happy Eyeballs qui choisit mal) veulent forcer IPv6. Le sous-domaine dedie le permet.

Cloaking IPv6

# Probleme : les adresses IPv6 sont longues
# 2001:0db8:85a3:0000:0000:8a2e:0370:7334
# Le cloaking doit les masquer efficacement

# UnrealIRCd cloaking IPv6 :
# Par defaut, le cloaking hash les groupes de l'IPv6.
# Resultat : ABCD1234.EFGH5678.IP
# Le prefixe reseau (/64) est preserve dans le hash
# pour permettre le banning par plage.

# InspIRCd cloaking :



# Resultat : user-AB1234.irc.votredomaine.com
# Le mode "half" preserve une partie de l'info
# pour le banning.

# Le mode "full" hash tout :
# user-XYZA5678.irc.votredomaine.com
# Plus anonyme mais plus difficile a banner par plage.

# Bonne pratique : le cloaking IPv6 doit :
# 1. Masquer l'adresse complete
# 2. Preserver le prefixe (/64 ou /48) en hash
#    pour que les bans par plage fonctionnent
# 3. Etre deterministe (meme IP = meme cloak)
# 4. Etre irreversible sans la cle

Limites de clones

En IPv4, la limite de connexions par IP est simple : 3 connexions par adresse IP. En IPv6, c'est plus complique. Un utilisateur domestique a generalement un /64, ce qui lui donne 2^64 adresses possibles. Limiter par adresse IPv6 individuelle est inutile — l'utilisateur peut changer d'adresse a volonte.

# Solution : limiter par prefixe, pas par adresse

# UnrealIRCd :
set {
  # Pour IPv6, limiter par /64 :
  connthrottle {
    known-users {
      minimum-reputation-score 24;
      sasl-bypass yes;
    };
    disabled-when {
      start-delay 60;
      reputation-gathering 0;
    };
  };
};

# Dans les allow blocks :
allow {
  mask *;
  class clients;
  maxperip 3;      # Max 3 par IPv4
  # Pour IPv6, UnrealIRCd utilise le connthrottle
  # qui groupe par /64 automatiquement.
};

# InspIRCd :


# IPv6CloneCIDR=64 signifie : compter les connexions
# par bloc /64. 3 connexions max par /64.

# Banning IPv6 — toujours bannir le prefixe :
# Mauvais (inutile) :
/MODE #canal +b *!*@2001:db8::1
# L'utilisateur change d'adresse dans son /64

# Correct :
/MODE #canal +b *!*@2001:db8:85a3:*
# Banne tout le /48

# Ou avec cloaking :
/MODE #canal +b *!*@user-AB12*.irc.votredomaine.com
Attention : Bannir un /48 en IPv6 affecte potentiellement un FAI entier ou un hebergeur. Soyez prudent avec la taille du prefixe. /64 est generalement un seul foyer. /48 peut etre une entreprise ou un bloc d'hebergeur. /32 est un FAI.

DNSBL et IPv6

# Les DNSBL qui supportent IPv6 :
# - DroneBL (dnsbl.dronebl.org) : oui, partiel
# - EFnet RBL (rbl.efnetrbl.org) : partiel
# - Spamhaus (zen.spamhaus.org) : oui

# Le probleme : la couverture IPv6 des DNSBL est
# moins bonne qu'IPv4. Les botnets IPv6 sont moins
# catalogues. Les proxys ouverts IPv6 sont moins
# repertories.

# Complementer avec d'autres mesures :
# 1. Require SASL pour les connexions IPv6 suspectes
# 2. Limiter les connexions IPv6 non-TLS
# 3. Utiliser le connthrottle d'UnrealIRCd
#    qui analyse le comportement (reputation)

# UnrealIRCd connthrottle :
# Donne un score de reputation a chaque IP.
# Les nouvelles IPs sont limitees.
# Les IPs qui se connectent regulierement
# et s'identifient ont un score eleve.
# En cas de flood, seules les IPs de confiance
# sont acceptees.

set {
  connthrottle {
    known-users {
      minimum-reputation-score 24;
      sasl-bypass yes;
    };
  };
};

Questions frequentes

Mon serveur doit-il absolument supporter IPv6 ?

En 2025, fortement recommande. Certains FAI (surtout mobiles) deployent IPv6-only avec NAT64 pour l'acces IPv4. Les utilisateurs de ces FAI ne peuvent pas se connecter a un serveur IPv4-only directement. Le pourcentage d'IPv6 varie par pays : 50%+ en Inde et en Allemagne, 40%+ en France, moins dans d'autres regions.

IPv6 change-t-il les performances d'un serveur IRC ?

Non mesurable. Le protocole IRC est leger — quelques Ko par seconde par utilisateur. La difference de performance entre IPv4 et IPv6 est negligeable a cette echelle. Le seul impact est l'utilisation memoire pour stocker les adresses IPv6 (128 bits vs 32 bits), ce qui est marginal.

Comment tester la connectivite IPv6 de mon serveur ?

Depuis une machine avec IPv6 : openssl s_client -connect [votre-ipv6]:6697. Ou utilisez un service de test en ligne (il en existe pour IRC/TCP generique). Verifiez aussi que le reverse DNS (PTR) est configure pour votre IPv6, sinon certains reseaux refuseront la connexion.