<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dekok-proxy-bcp-00" category="bcp" consensus="true" submissionType="IETF" updates="2865, 2866" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="Proxy BCP">Proxy Best Practices for the Remote Authentication Dial In User Service (RADIUS) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-dekok-proxy-bcp-00"/>
    <author initials="A." surname="DeKok" fullname="Alan DeKok (Ed)">
      <organization>InkBridge Networks</organization>
      <address>
        <email>aland@inkbridgenetworks.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="22"/>
    <area>Internet</area>
    <workgroup>RADEXT Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 67?>

<t>RADIUS proxying is terrible.  We try to make it better.  This document
is currently a rough draft, and is a work in progress.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dekok-proxy-bcp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        RADEXT Working Group mailing list (<eref target="mailto:radext@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/radext/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/radext/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/freeradius/proxy-bcp.git"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Remote Authentication Dial In User Service (RADIUS) protocol
defines proxying in <xref section="2.3" sectionFormat="comma" target="RFC2865"/>.  That section gives a
brief overview of how proxying on a packet-by-packet basis, but ot
does not discuss larger issues of how a proxy server should operate.
The discussion of those topics is largely limited to a few sentences
in <xref section="2.3" sectionFormat="comma" target="RFC2865"/>:</t>
      <ul empty="true">
        <li>
          <t>A forwarding server MAY need to modify attributes to enforce local
policy.  Such policy is outside the scope of this document ...</t>
          <t>Implementers of forwarding servers should consider carefully which
values it is willing to accept for Service-Type.  Careful
consideration must be given to the effects of passing along Service-
Types of NAS-Prompt or Administrative in a proxied Access-Accept, and
implementers may wish to provide mechanisms to block those or other
service types, or other attributes.  Such mechanisms are outside the
scope of this document.</t>
        </li>
      </ul>
      <t>Some additional discussion of issues related to proxies is in
<xref section="2" sectionFormat="comma" target="RFC2865"/>:</t>
      <ul empty="true">
        <li>
          <t>The Access-Request is submitted to the RADIUS server via the network.
If no response is returned within a length of time, the request is
re-sent a number of times.  The client can also forward requests to
an alternate server or servers in the event that the primary server
is down or unreachable.  An alternate server can be used either after
a number of tries to the primary server fail, or in a round-robin
fashion.  Retry and fallback algorithms are the topic of current
research and are not specified in detail in this document.</t>
        </li>
      </ul>
      <t>This text goes back to the original specification of <xref target="RFC2058"/>, in
1997.  Very little research on this topic has been performed since
then, with the effect that there has been very little guidance
available for implementers or operators.  This lack of guidance has
resulted in ad-hoc solutions, and in unstable networks.</t>
      <t>This document addresses that lack of guidance by providing operational
considerations and best current practice recommendations for proxying.
The recommendations here are the result of decades of experience by
multiple RADIUS server implementers, along with decades of experience
by operators of large-scale and large-volume proxy networks.  These
recommendations have been demonstrated to work, and are documented
here in order to encourage their adoption.</t>
      <t>The document first motivates the guidance by describing a set of
issues with the RADIUS protocol, with associated solutions and/or
recommendations for addressing these issues.  It then continues with a
set of recommendations for best current practices.</t>
      <t>As a "best current practices" specification, this document does not
make any changes to the RADIUS protocol.</t>
      <section anchor="proxy-versus-client-or-server">
        <name>Proxy versus Client or Server</name>
        <t>A proxy is composed of a server to receive packets, and an associated
client to forward packets to another destination.  The discussion here
is limited to proxies, but there is of necessity overlap with
recommendations for clients and servers.  However, there are
additional considerations for proxies which are not seen by a
stand-alone client or server.  This document focusses on issues seen
by proxies.</t>
        <t>It is still RECOMMENDED that client and server implementations be
aware of the issues raised in this document, and where relevant,
implement the recommendations made herein.  Where the recommendations
below apply to a stand-alone client or server, that relevance is
mentioned.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
    </section>
    <section anchor="overview-of-proxy-architecture-and-use-cases">
      <name>Overview of Proxy Architecture and Use Cases</name>
      <ul spacing="normal">
        <li>
          <t>RADIUS proxying started for roaming</t>
        </li>
        <li>
          <t>eduroam</t>
        </li>
        <li>
          <t>openroaming</t>
        </li>
        <li>
          <t>inter-ISP roaming</t>
        </li>
        <li>
          <t>WiFi offload</t>
        </li>
        <li>
          <t>multiple chains of proxies</t>
        </li>
        <li>
          <t>centralized proxies</t>
        </li>
        <li>
          <t>RFC7585 dynamic lookups</t>
        </li>
      </ul>
      <section anchor="real-world-impact">
        <name>Real World Impact</name>
        <ul spacing="normal">
          <li>
            <t>fragility of proxy chains</t>
          </li>
          <li>
            <t>DoS attacks from bad supplicants, APs / bad clients</t>
          </li>
          <li>
            <t>fragility of UDP across the Internet</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="problems-and-solutions">
      <name>Problems and Solutions</name>
      <t>This section outlines problems with the RADIUS protocol and the
recommended solutions.</t>
      <section anchor="silently-discard">
        <name>Silently Discard</name>
        <t><xref section="1.2" sectionFormat="comma" target="RFC2865"/> defines the term "silently discard" as:</t>
        <ul empty="true">
          <li>
            <t>This means the implementation discards the packet without
further processing.  The implementation SHOULD provide the
capability of logging the error, including the contents of
the silently discarded packet, and SHOULD record the event
in a statistics counter.</t>
          </li>
        </ul>
        <t>While it can be necessary to silently discard packets for security
reasons, there are other situations where packets are silently
discarded for reasons unrelated to security.  These silent discards
are a large source of instability in RADIUS deployments.</t>
        <section anchor="problem">
          <name>Problem</name>
          <t>There are cases where an implementations has to silently discard
packets because there is no defined way to respond to them.  The
result is that a server may be operational, but not responsive.  A
client has no way of knowing if the server is down, slow, or if there
is a problem somewhere else down a long chain of proxies.</t>
          <t>Some implementations are known to silently discard packets:</t>
          <ul spacing="normal">
            <li>
              <t>unrecognized attributes</t>
            </li>
            <li>
              <t>when they get packets in the middle of an EAP session which isn't theirs (see load-balancing, below).</t>
            </li>
          </ul>
          <t>Standards are silent or wrong:</t>
          <ul spacing="normal">
            <li>
              <t>when a server gets unexpected packets, even when the packets are
authenticated (Accounting-Request to a port which is not configed to
accept them)</t>
            </li>
            <li>
              <t>when an accounting server can't store the data.  There is no Accounting-NAK.</t>
            </li>
          </ul>
        </section>
        <section anchor="solution">
          <name>Solution</name>
          <t>If a packet is authenticated, AND is of Code which the server normally
accepts, it MUST respond to the packet.  e.g. Access-Reject, or
CoA-NAK, or Disconnect-NAK.</t>
          <t>Protocol-Error.  See Internet-Draft TBD.</t>
        </section>
      </section>
      <section anchor="access-reject">
        <name>Access-Reject</name>
        <t>Many issues here.</t>
        <section anchor="problem-1">
          <name>Problem</name>
          <ul spacing="normal">
            <li>
              <t>Access-Rejects are not delayed, contributing to dictionary / DoS attacks</t>
            </li>
            <li>
              <t>when they are delayed, they cause increased load on intermediate proxies to track state</t>
            </li>
            <li>
              <t>eduroam and others see a significant percentage of traffic (30%+) as rejects</t>
            </li>
          </ul>
        </section>
        <section anchor="solution-1">
          <name>Solution</name>
          <ul spacing="normal">
            <li>
              <t>delay rejects</t>
            </li>
            <li>
              <t>but push delays to the edge</t>
            </li>
            <li>
              <t>cache rejects at the edge</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="retransmission">
        <name>Retransmission</name>
        <t>Retransmits have the possibility of creating packet storms.</t>
        <section anchor="problem-2">
          <name>Problem</name>
          <t>Some proxies ignore client retransmits.  Others only retransmit when
the client retransmits.  Others do both (!!!)</t>
        </section>
        <section anchor="solution-2">
          <name>Solution</name>
          <t><xref section="2.8" sectionFormat="comma" target="RFC3539"/> explains that end-to-end retransmissions are
the best.  <xref section="2.5" sectionFormat="comma" target="RFC6613"/> also says</t>
          <ul empty="true">
            <li>
              <t>Intrinsically, proxy systems operate with multiple control loops
instead of one end-to-end loop, and so they are less stable.  This is
true even for TCP-TCP proxies.  As discussed in <xref target="RFC3539"/>, the only
way to achieve stability equivalent to a single TCP connection is to
mimic the end-to-end behavior of a single TCP connection.  This
typically is not achievable with an application-layer RADIUS
implementation, regardless of transport.</t>
            </li>
          </ul>
          <t>The main lack here is the negative signaling of lost packets.
Protocol-Error helps here.</t>
          <t>Proxies MUST suppress duplicate retransmissions from a client within a
short time frame, say 1s.</t>
          <t>Proxies MUST NOT do their own retransmissions, subject to transport
issues.  i.e. a TCP to UDP proxy MUST retransmit on the UDP side.</t>
        </section>
      </section>
      <section anchor="acct-delay-time-and-congestive-collapse">
        <name>Acct-Delay-Time and Congestive Collapse</name>
        <t>Acct-Delay-Time (<xref section="5.2" sectionFormat="comma" target="RFC2866"/> requires that
Accounting-Request packets to be updated when the packet is
retransmitted.  It's an artifact of 1993, when NTP was not widely
used.</t>
        <section anchor="problem-3">
          <name>Problem</name>
          <t>Acct-Delay-Time contributes to congestive collapse of the network.
One set of accounting information with the same data (other than
Acct-Delay-Time) can be sent as many different packets.  When seen in
conjunction with the retransmission issues noted above, it is possible
to increase that number substantially.</t>
        </section>
        <section anchor="solution-3">
          <name>Solution</name>
          <ul spacing="normal">
            <li>
              <t>clients shouldn't send Acct-Delay-Time</t>
            </li>
            <li>
              <t>proxies which do store and forward (see below) should just use
Event-Timestamp, and suppress Acct-Delay-Time.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="there-is-no-radius-routing-protocol">
        <name>There is no RADIUS Routing Protocol</name>
        <section anchor="problem-4">
          <name>Problem</name>
          <t>Packets may take multiple paths through the network.</t>
          <t>Old packets for an EAP session may appear at the home server late.
This happens when there is a proxy fail-over, and one element
retransmits.  This is not just UDP, it's possible with TCP, too, when
connections go up / down.</t>
        </section>
        <section anchor="solution-4">
          <name>Solution</name>
          <t>Home servers MAY cache responses to Access-Request packets based on
the State attribute.  And then reply them when the same State is seen
for a different packet src IP/port/Code.  This caching is different
from the <xref section="2.2.1" sectionFormat="comma" target="RFC5080"/> packet dedup!</t>
          <t>OR a home server MAY respond with a Protocol-Error indicating "unknown
State".  This can also occur for home server fail-over as seen in
<xref target="load-balance-home"/>.</t>
        </section>
      </section>
      <section anchor="filtering">
        <name>Filtering</name>
        <t>Proxies can filter attributes in both requests and responses.</t>
        <section anchor="problem-5">
          <name>Problem</name>
          <t>Access-Request and Accounting-Request packets can contain private
information about the local network, which no one else needs to see.</t>
          <t>Access-Accept packets can contain assignments which are not
appropriate for a remote network.</t>
        </section>
        <section anchor="solution-5">
          <name>Solution</name>
          <t>Clients and proxies should allow servers or next hops to be marked as
"internal" or "external".  Servers marked "internal" should be sent
all attributes.  Servers marked "internal" should have private local
information stripped, and replaced with Opaque-NAS-Identifier, etc.</t>
          <t>In general, only send attributes which are necessary for
authentication / accounting, and filter out everything else.
i.e. have a positive filter, not a negative one</t>
          <t>These recommendations can be superseded by agreements between parties,
such as to send location information.</t>
          <ul spacing="normal">
            <li>
              <t>include attributes needed for the process</t>
            </li>
            <li>
              <t>or which are required by the inter-party agreements</t>
            </li>
            <li>
              <t>everything else should be filtered out.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="inadequate-signal-of-errors">
        <name>Inadequate signal of errors</name>
        <t>It is hard to distinguish protocol-layer errors from (e.g.)
authentication errors.</t>
        <section anchor="problem-6">
          <name>Problem</name>
          <t>A policy decision says the user can be rejected.  "credentials are OK,
but you're not allowed to roam there".</t>
          <t>The non-technical decisions should be signaled in some shape or form</t>
          <t>There is also no way to signal "account was deleted 10 years ago".</t>
        </section>
        <section anchor="solution-6">
          <name>Solution</name>
          <t>Error-Cause should be allowed in Access-Reject or other packets maybe
just have one "non-technical reason".</t>
          <t>Perhaps also have an Error-Cause for "please delete these
credentials".</t>
        </section>
      </section>
      <section anchor="clients-misbehave-with-delayed-rejects">
        <name>Clients misbehave with Delayed Rejects</name>
        <section anchor="problem-7">
          <name>Problem</name>
          <t>Some NASes deal badly with delays.  If they don't get a response
within &lt;0.5s, they either retransmit aggressively, or fail over to
another server.  This behavior is ridiculious.</t>
        </section>
        <section anchor="solution-7">
          <name>Solution</name>
          <t>Clients MUST implement the <xref target="RFC5080"/> timeouts.  Anything else will
cause problems.</t>
        </section>
      </section>
      <section anchor="timeouts-vary-wildly-across-a-proxy-chain">
        <name>Timeouts vary wildly across a proxy chain</name>
        <section anchor="problem-8">
          <name>Problem</name>
          <t>The  timeouts  on  the  original  client  and  proxies  are  generally
uncorrelated.  This  issue means that  we have multiple points  in the
proxy chain where fail-over and/or  timeouts can occur.  This behavior
does not contribute to network stability.</t>
        </section>
        <section anchor="solution-8">
          <name>Solution</name>
          <ul spacing="normal">
            <li>
              <t>proxy timeouts should be lower than NAS timeouts, and then send Protocol-Error
              </t>
              <ul spacing="normal">
                <li>
                  <t>timeouts should get shorter along the path.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>perhaps client can add indication of timeout to packets, so
proxies can know when the clients will give up.</t>
            </li>
            <li>
              <t>perhaps a separate document?</t>
            </li>
            <li>
              <t>should be on a per-packet basis</t>
            </li>
            <li>
              <t>we don't know what the client timeout is?</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="best-current-practices">
      <name>Best Current Practices</name>
      <section anchor="proxy-state">
        <name>Proxy-State</name>
        <t>The only real utility of Proxy-State is loop detection. It is possible
to implement a RADIUS server / proxy which does nothing more than
forward / copy reply of Proxy-State as per <xref section="5.33" sectionFormat="comma" target="RFC2865"/>. A proxy doesn't in fact need to add a Proxy-State attribute in
order to work in most situations.</t>
        <t>Proxy implementations SHOULD create Proxy-State using a site-local
64-bit value, taken from a secure random number generator. This value
can then be used to identify a particular proxy server, or set of
servers. This value should be the same for all packets proxied by the
server. This same value should be used by all "equivalent" proxies,
such as ones used in a load-balance configuration. Using 64 bits means
that the chance of a hash collision is approximately one in 2^32,
which should be sufficient. i.e. there are significantly fewer than
2^32 RADIUS servers on the planet.</t>
        <t>Any one of the equivalent proxy servers can then examine Proxy-State,
and look for their unique token. If the token exists, then a loop has
been detected.</t>
        <t>This recommendation isn't perfect. Other servers can still delete the
Proxy-State, or copy the values that they see. But such corner cases
are best addressed by administrator intervention.</t>
        <t>This recommendation allows administrators and implementations to
better detect inadvertent proxy loops, rather than deliberate
misconfigurations.</t>
        <t>Proxies should also NOT copy the Proxy-State attributes from the
proxied reply to their reply. The downstream server may have deleted
or modified the attributes. Instead a proxy should copy the
Proxy-State from the original request to the reply.</t>
      </section>
      <section anchor="rate-limiting">
        <name>Rate limiting</name>
        <t>It is possible for a malicious client to send enormous amounts of packets to proxies in a roaming consortium. There are a few different cases:</t>
        <ul spacing="normal">
          <li>
            <t>users immediately retrying after a reject. Home servers SHOULD
implement a reject delay. Proxies SHOULD also enforce a reject delay
for proxied packets.  Note that this reject delay should enforce AT
LEAST a delta between request and response.  It MUST NOT simply add
a delay to the response.</t>
          </li>
          <li>
            <t>clients overloading upstream proxies with thousands of
packets. e.g. when a power failure occurs, there may be thousands or
tens of thousands of devices which are all trying to authenticate in
a short period of time. Such behavior can result in congestive
collapse, and overload of home servers. Clients (and proxies) should
implement some kind of rate limiting.</t>
          </li>
        </ul>
      </section>
      <section anchor="load-balancing">
        <name>Load Balancing</name>
        <t>Load balance Access-Request packets using Calling-Station-Id where it
exists, because it's usually the MAC address.  The User-Name may be
"@example.com", so it is unsuitable for load balancing.  Use it only
when Calling-Station-ID does not exist.</t>
        <t>Or, load balance based on session identification attributes
(NAS-IP-Address, NAS-IPv6-Address, NAS-Port).  Do NOT load-balance on
packet source IP, or anything which identifies the NAS itself.  A NAS
may have multiple sessions!</t>
        <t>If the system proxies both Access-Request and Accounting-Request
packets, try to load balance on the same information for both types of
packets.  This consistency will ensure that all of the data for one
sessions shares the same path (and fate) through the network.</t>
        <t>When the next hop is known to be a home server, use consistent hashing
for load balancing, in order to ensure that packets for one session
are sent to the same destination.  This is most important for EAP.</t>
        <section anchor="load-balance-home">
          <name>Home Servers</name>
          <t>Load balancing is made more complex when the next hop is a home
server, and the authentication is a multi-step process
(challenge-response or EAP).  When a home server fails, all "in
process" authentications associated with that home server will fail.</t>
          <t>However, as proxies do not track authentication sessions, the load
balancing algorithms recommended above will simply redirect packets
from the failed home server to other home servers.  Those home servers
will be unable to process packets in the middle of an authentication
session.</t>
          <t>And as noted above in <xref target="silently-discard"/>, implementations are known to
discard these packets without response, which contributes to
instability.</t>
          <t>One solution is for the proxy closest to the home server to maintain
state for an authentication session.  This is simple to do at low
packet rates, but becomes more difficult at high packet rates.</t>
          <t>One solution (experimental, but it should work) is to have the home
server and the local proxies agree on magic values for the State
attribute.</t>
          <t><xref section="5.24" sectionFormat="comma" target="RFC2865"/> limits the use of State:</t>
          <ul empty="true">
            <li>
              <t>... the client MUST NOT interpret the attribute locally.</t>
            </li>
          </ul>
          <t>We relax this statement to say that a proxy MAY interpret the State
attibute, but it MUST NOT do so without prior consultation with the
next hop server.</t>
          <t>The two systems could agree (for example) that the first octet of the
State attribute is an identifier for the home server.  Where State
does not exist, the proxy can load-balance as described above.  Where
State does exist, it can bypass load balancing, and send the packet
directly to the specified home server.</t>
          <t>If the home server is down, the proxy knows that the packet cannot
processed by other home servers, and therefore does not redirect the
packet to them.  Instead, it returns a Protocol-Error indicating that
the home server is unreachable.</t>
          <t>Where the proxy cannot coordinate with the home server, it could
instead add an octet (as an identifier) to the State for responses,
and remove that octet from requests.  This does violate the
prohibitions of <xref section="5.24" sectionFormat="comma" target="RFC2865"/>, but it is likely to work in
limited situations.  i.e. when the only way to reach the home servers
is either directly from clients (which do not do this), or when all
proxies implement the same method.  It is therefore fragile.</t>
          <t>This behavior is likely to not work for other proxies in a multi-hop
proxy chain.</t>
        </section>
      </section>
      <section anchor="differing-rates-on-inbound-and-outbound">
        <name>Differing rates on inbound and outbound</name>
        <t>This isn't limited to UDP to TCP proxying.  Even for UDP, there may be
differing limits on packets in / packets out.  The best solution here
is Protocol-Error.</t>
        <t>There is no overload indication in RADIUS.  Instead, there is only
per-packet signaling.</t>
        <t>Failing that, adding capacity.</t>
      </section>
      <section anchor="accounting-store-and-forward">
        <name>Accounting Store and Forward</name>
        <ul spacing="normal">
          <li>
            <t>don't use a per-packet "store and forward", as multiple accounting
packets with the same data will be sent.  * instead, use
session-based store and forward.  Keep a session table (or even the
last packet for a session), and send only that.</t>
          </li>
        </ul>
        <t>Session based store and forward also helps with poorly behaved
clients, which are known to send accounting packets for all open
sessions at fixed intervals.  This is effectively a DoS attack on the
server.  A store and forward proxy can quench the attack by storing
the data locally, and then proxying it upstream using <xref section="2.2" sectionFormat="comma" target="RFC5080"/> algorithms.</t>
      </section>
      <section anchor="protection-from-dos-attacks">
        <name>Protection from DoS attacks</name>
        <t>bad clients are attacking servers, with 1000's of packets a second.</t>
        <t>Sometimes it's the NAS, which is allowing the user to retry
immediately (i.e 1ms later) after a reject.  OR allowing the
supplicant to retry even before the reject is sent! so 1000's of
packets a second.  This appears to be a violation of 802.1X
requirements on rate limiting</t>
        <t>openroaming is public, and are getting attacked with Syn flood attacks.</t>
        <t>Syn flood mitigation is critical for public RADIUS Servers.</t>
        <t>Public RADIUS servers should have aggressive timers on new
connections.  If a connection doesn't complete within a short period
of time, it should be closed or discarded.  i.e. connections which
complete and which make progress should be prioritized over
connections which don't complete, or which don't make progress.</t>
      </section>
      <section anchor="dont-be-antisocial">
        <name>Don't be AntiSocial</name>
        <t>See "deprecating insecure practices" Section 1.3.1 on standards.  The
standards are imperfect.  Simply because something isn't forbidden,
doesn't mean that it's allowed, or that it should be engaged in.</t>
        <t>Ignoring standards or best practices is an artificial savings.
Failing to spend the time on good engineering doesn't save you time or
money; it just pushes that cost to your customers, and to your support
organization.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>There are no privacy considerations in this specification.  It does
not add or change any transport protocols, and it does not change the
roles of any participant in the RADIUS ecosystem.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification has no direct impact on security.  It does not add
or change any existing cryprography in RADIUS.  It is compatible with
all RADIUS standards, including (ALPN draft).</t>
      <t>This specification does, however, recommend ways that networks can be
better protected from a variety of attacks, misconfiguration, and
improper implementations.  As a result, RADIUS proxy networks which
implement this specification should become more stable, and therefore
more secure.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document came out of discussions both in the RADEXT WG, and in
the 2025 RADIUS Technical Conference in Tampere, Finland.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC5080">
          <front>
            <title>Common Remote Authentication Dial In User Service (RADIUS) Implementation Issues and Suggested Fixes</title>
            <author fullname="D. Nelson" initials="D." surname="Nelson"/>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="December" year="2007"/>
            <abstract>
              <t>This document describes common issues seen in Remote Authentication Dial In User Service (RADIUS) implementations and suggests some fixes. Where applicable, ambiguities and errors in previous RADIUS specifications are clarified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5080"/>
          <seriesInfo name="DOI" value="10.17487/RFC5080"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2866">
          <front>
            <title>RADIUS Accounting</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying accounting information between a Network Access Server and a shared Accounting Server. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2866"/>
          <seriesInfo name="DOI" value="10.17487/RFC2866"/>
        </reference>
        <reference anchor="RFC3539">
          <front>
            <title>Authentication, Authorization and Accounting (AAA) Transport Profile</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Wood" initials="J." surname="Wood"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document discusses transport issues that arise within protocols for Authentication, Authorization and Accounting (AAA). It also provides recommendations on the use of transport by AAA protocols. This includes usage of standards-track RFCs as well as experimental proposals. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3539"/>
          <seriesInfo name="DOI" value="10.17487/RFC3539"/>
        </reference>
        <reference anchor="RFC6613">
          <front>
            <title>RADIUS over TCP</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="May" year="2012"/>
            <abstract>
              <t>The Remote Authentication Dial-In User Server (RADIUS) protocol has, until now, required the User Datagram Protocol (UDP) as the underlying transport layer. This document defines RADIUS over the Transmission Control Protocol (RADIUS/TCP), in order to address handling issues related to RADIUS over Transport Layer Security (RADIUS/TLS). It permits TCP to be used as a transport protocol for RADIUS only when a transport layer such as TLS or IPsec provides confidentiality and security. This document defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6613"/>
          <seriesInfo name="DOI" value="10.17487/RFC6613"/>
        </reference>
        <reference anchor="RFC2058">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <date month="January" year="1997"/>
            <abstract>
              <t>This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2058"/>
          <seriesInfo name="DOI" value="10.17487/RFC2058"/>
        </reference>
      </references>
    </references>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="P." surname="Dekkers" fullname="Paul Dekkers">
        <organization/>
        <address>
      </address>
      </contact>
      <contact initials="K." surname="Huhtanen" fullname="Karri Huhtanen">
        <organization>Radiator Software</organization>
        <address>
      </address>
      </contact>
      <contact initials="H." surname="Vatiainen" fullname="Heikki Vatiainen">
        <organization>Radiator Software</organization>
        <address>
      </address>
      </contact>
      <contact initials="F." surname="Mauchle" fullname="Fabian Mauchle">
        <organization/>
        <address>
      </address>
      </contact>
      <contact initials="S." surname="Peatow" fullname="Stefan Peatow">
        <organization>JISC</organization>
        <address>
      </address>
      </contact>
      <contact initials="J." surname="Rieckers" fullname="Jan-Frederik Rieckers">
        <organization>DFN</organization>
        <address>
      </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAJXvV2gAA51c7XLbRpb9j6foKLUVyUvSsj32JN6pZBTJnmiS2FrLnszU
1u4WSDQpRCDABUDJnJTfZZ9ln2zPufd2o0Eqma2dqoxFfHTfvn0/zv1oTKfT
rC/7yr90V23zcee+9V2PP/NFXy5855ZN6/ob7975ddN7d7bFjxq38r5sandR
5pW7rN2Hzrfu2rd3eMcdvzu7uPxwfcIB+2bRVFk+n7f+Ls5wfpUVzaLO15i0
aPNlPy38bXM73fD2dL7YTE9Ps+2myHvfvXRPv3zxfML/f5FlXZ/XxX/mVVPj
1b7d+qzctPJX1z89Pf3q9GmWtz5/CZp639a+z+5XLx3oefXX9+6npr0t65X7
U9tsN9nt/fDU9IJUZFjUS4fps247X5ddhxW+320w0+Wr96+zbFO+dPjf526R
127beZe3bb5zx+XS5VXldr47ceDWTd7duBvf+sw5LP8lb+DPrmn71i+7lzJE
4Zf5tuo7PBHu79Z6mz+zHHxu2pdZNnVljYtnM3fhv29u8aDy7awCEXLJHb8q
TnC9aVdc0e23bVmsvHvj+3ssmEP7dV5WL0EkmPfHsr6dyxO1PTBbNOssWzR1
35bzbZ/OesVZb29928V5r0B2vBie+37mvtveYG98HR/8Htwp08tC37u8KHPM
4a6bZX+PvYpjfDdzf4FQ5WU6yHe+vL0tRzf+wTCvZ+7HfLu4qXwc5HU+L8Gs
cDk8eT1zVx6D3McHr3vsSj1clan+fHl9Ht/588y9K/1ixJE/5/X0desL35a3
6V15++L1myyrm3aNFdz5l7j87vX5l09+/zv7k8Jtfz4//fIUrC/r5d7jFH37
89nzZ18dXn3x4skzvHnn6628s6KAB7HHb93+Ni/8x/6Ppe+XM9DG58r+Zjt/
6Zat97hbbrvHUQVnuIllT6cun3c9zUGWqV47eYaKVEJ8PXZ5XvmZcz956OGO
Ar3Ob70rezf3Pe7j1vsbPAqV365hOzL8vdi2Lf6sdi53IHZ1o3Zg4iChHDZ3
FE3wnJOtWt91MyVmXRYF9/Bz6m7bFNsF7VCWvf9/mqhNMFFQSAhYlyyudr/8
Yjs0wYsykXs6e/bpk6wo711nF1fYK9CcQa/80jV3nMTfu2bpbpr7YUQ8mbtN
Dvnop/PdVP9y87wru4mD5rmmh13ESHXTu6LsFtuuc1XerkA4rNEWd2zIXAcF
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

-->

</rfc>
