# RADIUS Comme on a de la collecte xDSL/4G/FTTH, on a des LNS pour collecter tout ça, et donc du RADIUS pour le AAA des lignes. Historiquement on avait une seule porte à Rennes, et on ne s’est jamais trop embêtés à redonder le RADIUS parce que globalement sauf si ça tombe des heures ça empêche pas les lignes de tourner. Par contre, depuis récemment, on a de la collecte à Paris pour les FTTH ; on a donc commencé un chantier d’anycast des RADIUS entre Rennes et Paris. ## Réplication On aurait pu se contenter de synchroniser à la main le fichier `users` entre les deux machines, mais bon, c'est pas très marrant. Du coup, on a fait vachement plus drôle : du LDAP. (oh wait) En gros, les deux machines RADIUS font aussi office de cluster LDAP et se répliquent entre elles et ensuite le RADIUS vient taper sur le LDAP. ## RADIUS en tant que tel Hormis le LDAP, il y a quelques subtilités : 1. le retrait du module `ntlm_auth` car ça provoquait des erreurs depuis un routeur ZyXEL VMG3625-T50B ``` Auth: (178) Login incorrect (mschap: FAILED: No NT-Password. Cannot perform : [jeanmichel@grifon.ift/] (from client lns03 port 0 cli 178.20.54.1) ``` 2. lorsque nous utilisons le ldap, il n'est pas possible de renseigner les outbound user utilisé par ielo. En effet, ces utilisateurs ont un mot de passe vide et freeradius n'aime pas les mots de passe vide lorsqu'ils sont dans le ldap. Ces utilisateurs sont donc directement renseignés dans le fichier `users` à l'ancienne. ## Configuration avec le ldap Pour que le radius renvoie les bons champs en fonction par rapport à ceux présents dans le schema ldap, si vous en utilisez un nouveau, il faut penser à les rajouter dans la conf : ``` reply:Tunnel-Type := 'radiusTunnelType' reply:Tunnel-Medium-Type := 'radiusTunnelMediumType' reply:Tunnel-Private-Group-ID := 'radiusTunnelPrivategroupId' reply:Framed-IP-Address := 'radiusFramedIPAddress' reply:Framed-IP-Netmask := 'radiusFramedIPNetmask' reply:Framed-IPv6-Address := 'radiusFramedIPv6Address' reply:Framed-Protocol := 'radiusFramedProtocol' reply:Framed-Routing := 'radiusFramedRouting' reply:Delegated-IPv6-Prefix := 'radiusDelegatedIPv6Prefix' reply:Tunnel-Server-Endpoint := 'radiusTunnelServerEndpoint' reply:Tunnel-Client-Endpoint := 'radiusTunnelClientEndpoint' reply:Tunnel-Preference := 'radiusTunnelPreference' reply:Tunnel-Assignment-ID := 'radiusTunnelAssignmentId' reply:Framed-MTU := 'radiusFramedMTU' reply:Class := 'radiusClass' reply:Tunnel-Password := 'radiusTunnelPassword' reply:ADSL-Agent-Circuit-Id := 'radiusADSLAgentCircuitId' reply:Alc-Default-Router := 'radiusAlcDefaultRouter' reply:Alc-Primary-Dns := 'radiusAlcPrimaryDns' reply:Alc-Secondary-Dns := 'radiusAlcSecondaryDns' reply:Alc-Ipv6-Primary-Dns := 'radiusAlcIpv6PrimaryDns' reply:Alc-Ipv6-Secondary-Dns := 'radiusAlcIpv6SecondaryDns' reply:Alc-Ipv6-Address := 'radiusAlcIpv6Address' reply:Service-Type := 'radiusServiceType' ``` En revanche, si un champ n'existe pas dans le schéma ldap, vous pouvez utiliser un attribut `radiusAttribute` qui porte l'attribut radius en direct en mode clé-valeur : `Mon-Attribut-Radius: valeurmonattribut`.