1
0
mirror of https://github.com/rtbrick/bngblaster.git synced 2024-05-06 15:54:57 +00:00
Files
Christian Giese 00aa14c8e4 github pages
2024-03-25 22:01:36 +00:00

482 lines
32 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NAT / CGNAT &mdash; BNG Blaster 0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
<link rel="stylesheet" type="text/css" href="_static/tabs.css?v=a5c4661c" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=411f5019" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=a0e24af7"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Reports" href="reports.html" />
<link rel="prev" title="HTTP Emulation" href="http.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
BNG Blaster
<img src="_static/rtbrick_logo.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="access/index.html">Access Protocols</a></li>
<li class="toctree-l1"><a class="reference internal" href="routing/index.html">Routing Protocols</a></li>
<li class="toctree-l1"><a class="reference internal" href="streams.html">Traffic Streams</a></li>
<li class="toctree-l1"><a class="reference internal" href="http.html">HTTP Emulation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">NAT / CGNAT</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#nat-features">NAT Features</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#reverse-flow">Reverse Flow</a></li>
<li class="toctree-l3"><a class="reference internal" href="#flow-addresses">Flow Addresses</a></li>
<li class="toctree-l3"><a class="reference internal" href="#nat-enabled-streams">NAT Enabled Streams</a></li>
<li class="toctree-l3"><a class="reference internal" href="#tcp-raw-streams">TCP RAW Streams</a></li>
<li class="toctree-l3"><a class="reference internal" href="#stream-setup-interval">Stream Setup interval</a></li>
<li class="toctree-l3"><a class="reference internal" href="#http-nat-extension">HTTP NAT Extension</a></li>
<li class="toctree-l3"><a class="reference internal" href="#scaling">Scaling</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="reports.html">Reports</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration/index.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="api/index.html">API/CLI</a></li>
<li class="toctree-l1"><a class="reference internal" href="controller.html">Controller</a></li>
<li class="toctree-l1"><a class="reference internal" href="performance.html">Performance Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">Frequently Asked Questions</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">BNG Blaster</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">NAT / CGNAT</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/nat.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="nat-cgnat">
<span id="nat"></span><h1>NAT / CGNAT<a class="headerlink" href="#nat-cgnat" title="Link to this heading"></a></h1>
<p>NAT, or Network Address Translation, is a technology used in
computer networking to enable multiple devices on a local
network to share a single public IP address for connecting to
the internet. NAT works by mapping private IP addresses used
within a local network to a single public IP address when
communicating with external networks, such as the internet.
This allows a single public IP address to serve as an entry
point for multiple devices within the private network,
effectively concealing the internal network structure.</p>
<p>Carrier-Grade NAT (CGNAT) is an extension of NAT specifically
designed for large-scale service providers, such as internet
service providers (ISPs) and telecommunications companies.
It is used to address the increasing scarcity of IPv4 addresses,
as more and more devices are connected to the internet.</p>
<p>The BNG Blaster incorporates a comprehensive set of functionalities
tailored to NAT, with a particular focus on CGNAT testing. These
features are purpose-built to address the specific requirements and
complexities associated with Carrier-Grade Network Address Translation.</p>
<p>The tool offers a range of capabilities that are instrumental in assessing
and validating the performance and functionality of CGNAT systems.
This includes the ability to simulate and analyze large-scale address
translation scenarios, ensuring that the NAT infrastructure effectively
handles the demands of a multitude of users sharing a limited pool of public
IP addresses. Furthermore, the BNG Blasters CGNAT testing features enable the
emulation of various network conditions and scenarios, helping service providers
and network operators assess the impact of CGNAT on user experiences and address
any potential issues.</p>
<p>In addition to CGNAT testing, the BNG Blasters NAT-related features encompass
a broad spectrum of testing and evaluation options, ensuring that Network Address
Translation mechanisms, whether they be traditional NAT or CGNAT, are rigorously
examined for performance, scalability, and reliability. This robust suite of tools
makes the BNG Blaster an invaluable resource for network professionals working
with NAT technologies in their infrastructure.</p>
<section id="nat-features">
<h2>NAT Features<a class="headerlink" href="#nat-features" title="Link to this heading"></a></h2>
<section id="reverse-flow">
<h3>Reverse Flow<a class="headerlink" href="#reverse-flow" title="Link to this heading"></a></h3>
<p>For all bidirectional streams (“direction”: “both”), the reverse (other direction)
stream flow-id is now displayed which allows for more efficient analysis of
bidirectional flows.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo bngblaster-cli run.sock stream-info flow-id 1
{
&quot;status&quot;: &quot;ok&quot;,
&quot;code&quot;: 200,
&quot;stream-info&quot;: {
&quot;name&quot;: &quot;UDP1&quot;,
&quot;flow-id&quot;: 1,
&quot;reverse-flow-id&quot;: 2
}
}
$ sudo bngblaster-cli run.sock stream-info flow-id 2
{
&quot;status&quot;: &quot;ok&quot;,
&quot;code&quot;: 200,
&quot;stream-info&quot;: {
&quot;name&quot;: &quot;UDP1&quot;,
&quot;flow-id&quot;: 2,
&quot;reverse-flow-id&quot;: 1
}
}
</pre></div>
</div>
</section>
<section id="flow-addresses">
<h3>Flow Addresses<a class="headerlink" href="#flow-addresses" title="Link to this heading"></a></h3>
<p>The configured or dynamically resolved source and destination
address and port is now shown with stream-info command.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo bngblaster-cli run.sock stream-info flow-id 1
{
&quot;status&quot;: &quot;ok&quot;,
&quot;code&quot;: 200,
&quot;stream-info&quot;: {
&quot;name&quot;: &quot;UDP1&quot;,
&quot;type&quot;: &quot;unicast&quot;,
&quot;sub-type&quot;: &quot;ipv4&quot;,
&quot;direction&quot;: &quot;downstream&quot;,
&quot;source-address&quot;: &quot;10.0.0.1&quot;,
&quot;source-port&quot;: 65056,
&quot;destination-address&quot;: &quot;192.0.2.8&quot;,
&quot;destination-port&quot;: 65056,
&quot;protocol&quot;: &quot;udp&quot;, # udp or tcp
}
}
</pre></div>
</div>
</section>
<section id="nat-enabled-streams">
<h3>NAT Enabled Streams<a class="headerlink" href="#nat-enabled-streams" title="Link to this heading"></a></h3>
<p>A new option called <strong>nat</strong> is added to the stream configuraton.
This option is supported for bidirectional and upstream streams only,
meaning it is not supported for downstream-only streams, as those cant
pass a NAT gateway.</p>
<p>For bidirectional streams, the downstream flow waits until first upstream
packet has been received to learn the translated source address and port
which have to be used as destionation for this flow.</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;streams&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;UDP1&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;stream-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ipv4&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;direction&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;both&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;pps&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;nat&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;network-ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;10.0.0.1&quot;</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;UDP2&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;stream-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ipv4&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;direction&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;upstream&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;pps&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;nat&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;network-ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;10.0.0.2&quot;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
<p>The stream in the upstream direction (from the client) will also record the
received source IPv4 address and port, meaning the address and port assigned by the
NAT gateway.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo bngblaster-cli run.sock stream-info flow-id 1
{
&quot;status&quot;: &quot;ok&quot;,
&quot;code&quot;: 200,
&quot;stream-info&quot;: {
&quot;name&quot;: &quot;UDP1&quot;,
&quot;type&quot;: &quot;unicast&quot;,
&quot;sub-type&quot;: &quot;ipv4&quot;,
&quot;direction&quot;: &quot;upstream&quot;,
&quot;source-address&quot;: &quot;100.64.0.2&quot;,
&quot;source-port&quot;: 65056,
&quot;destination-address&quot;: &quot;10.0.0.1&quot;,
&quot;destination-port&quot;: 65056,
&quot;protocol&quot;: &quot;udp&quot;, # udp or tcp
&quot;rx-source-ip&quot;: &quot;192.0.2.8&quot;,
&quot;rx-source-port&quot;: 48523,
&quot;session-id&quot;: 1,
&quot;reverse-flow-id&quot;: 2
}
}
</pre></div>
</div>
</section>
<section id="tcp-raw-streams">
<h3>TCP RAW Streams<a class="headerlink" href="#tcp-raw-streams" title="Link to this heading"></a></h3>
<p>A new option called <strong>raw-tcp</strong> is added to the stream configuraton.
If enabled, UDP-like traffic with a constant rate is sent using a
static (RAW) TCP header.</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;streams&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;TCP1&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;stream-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ipv4&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;direction&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;both&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;pps&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;raw-tcp&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;network-ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;10.0.0.1&quot;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
<p>This option can be used stand-alone to verify firewall filters or together
with the new NAT option to verify NAT TCP streams.</p>
<p>For now, TCP flags (SYN, …) are statically set to SYN but this could be adopted if needed.</p>
</section>
<section id="stream-setup-interval">
<h3>Stream Setup interval<a class="headerlink" href="#stream-setup-interval" title="Link to this heading"></a></h3>
<p>It is possible to configure an optional stream setup interval in seconds.
If set, the BNG Blaster will sent max 1 packet per setup interval until the
stream becomes verified. After setup is done, the actual rate will be applied.</p>
<p>For bidirectional streams (direction both), this requires both
directions to be verified.</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;streams&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;TCP1&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;stream-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ipv4&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;direction&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;both&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;pps&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;setup-interval&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;raw-tcp&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;network-ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;10.0.0.1&quot;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="http-nat-extension">
<h3>HTTP NAT Extension<a class="headerlink" href="#http-nat-extension" title="Link to this heading"></a></h3>
<p>The existing <a class="reference internal" href="http.html#http"><span class="std std-ref">HTTP client/server</span></a> was also enhanced for NAT usage.
The actual configuration is uncahnged but the HTTP server will now return the
received client IP address and port in dedicated HTTP headers as shown below
where X-Client-Ip and Port shows the IP address and port assigned from the NAT gateway.</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;interfaces&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;capture-include-streams&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;network&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;interface&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;enp6s21&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;192.0.2.254/24&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;gateway&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;192.0.2.1&quot;</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nt">&quot;access&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;interface&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;enp6s20&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ipoe&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;100.64.0.2&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;address-iter&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0.0.0.1&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;gateway&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;100.64.0.1&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;gateway-iter&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0.0.0.0&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;dhcp&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;ipv6&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;http-client-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">]</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nt">&quot;http-client&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;http-client-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;C1&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;destination-ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;192.0.2.254&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;destination-port&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">80</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;blaster.test.de&quot;</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;http-client-group-id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;C2&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;destination-ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;192.0.2.254&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;destination-port&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">80</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;blaster.test.de&quot;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">],</span>
<span class="w"> </span><span class="nt">&quot;http-server&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;SERVER&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;ipv4-address&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;192.0.2.254&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;port&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">80</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;network-interface&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;enp6s21&quot;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo bngblaster-cli run.sock http-clients
{
&quot;status&quot;: &quot;ok&quot;,
&quot;code&quot;: 200,
&quot;http-clients&quot;: [
{
&quot;session-id&quot;: 1,
&quot;http-client-group-id&quot;: 1,
&quot;name&quot;: &quot;C2&quot;,
&quot;url&quot;: &quot;blaster.test.de&quot;,
&quot;destination-address&quot;: &quot;192.0.2.254&quot;,
&quot;destination-port&quot;: 80,
&quot;state&quot;: &quot;closed&quot;,
&quot;response&quot;: {
&quot;minor-version&quot;: 1,
&quot;status&quot;: 200,
&quot;msg&quot;: &quot;OK\r\nServer: BNG-Blaster\r\nX-Client-Ip: 192.0.2.5\r\nX-Client-Port: 63122\r\n\r\n&quot;,
&quot;headers&quot;: [
{
&quot;name&quot;: &quot;Server&quot;,
&quot;value&quot;: &quot;BNG-Blaster&quot;
},
{
&quot;name&quot;: &quot;X-Client-Ip&quot;,
&quot;value&quot;: &quot;192.0.2.5&quot;
},
{
&quot;name&quot;: &quot;X-Client-Port&quot;,
&quot;value&quot;: &quot;63122&quot;
}
]
}
},
{
&quot;session-id&quot;: 1,
&quot;http-client-group-id&quot;: 1,
&quot;name&quot;: &quot;C1&quot;,
&quot;url&quot;: &quot;blaster.test.de&quot;,
&quot;destination-address&quot;: &quot;192.0.2.254&quot;,
&quot;destination-port&quot;: 80,
&quot;state&quot;: &quot;closed&quot;,
&quot;response&quot;: {
&quot;minor-version&quot;: 1,
&quot;status&quot;: 200,
&quot;msg&quot;: &quot;OK\r\nServer: BNG-Blaster\r\nX-Client-Ip: 192.0.2.5\r\nX-Client-Port: 63121\r\n\r\n&quot;,
&quot;headers&quot;: [
{
&quot;name&quot;: &quot;Server&quot;,
&quot;value&quot;: &quot;BNG-Blaster&quot;
},
{
&quot;name&quot;: &quot;X-Client-Ip&quot;,
&quot;value&quot;: &quot;192.0.2.5&quot;
},
{
&quot;name&quot;: &quot;X-Client-Port&quot;,
&quot;value&quot;: &quot;63121&quot;
}
]
}
}
]
}
</pre></div>
</div>
<p>Unfortunately HTTP client/server scaling is limited, therefore raw-TCP
streams is the better option to test NAT on scale.</p>
</section>
<section id="scaling">
<h3>Scaling<a class="headerlink" href="#scaling" title="Link to this heading"></a></h3>
<p>The number of UDP and raw-TCP traffic streams can be further expanded by
leveraging the following configuration options.</p>
<p>One option to increase scaling is to disable per stream live rate calculation
which is typically not needed for millions of streams.</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;traffic&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;stream-rate-calculation&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span>
</pre></div>
</div>
<p>All traffic stats are still working but the live rate is not calculated.</p>
<p>It is also possible to disable the stream delay calcualtion if not needed.</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;traffic&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;stream-delay-calculation&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span>
</pre></div>
</div>
<p>Another option is to setup the traffic streams with a rate of 0.1 PPS,
meaning one packet every 10 seconds. This is enough to keep NAT translation
active but allows 1M streams with only 100K PPS.</p>
<p>See also <a class="reference internal" href="performance.html#performance"><span class="std std-ref">performance guide</span></a> for further optimization.</p>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="http.html" class="btn btn-neutral float-left" title="HTTP Emulation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="reports.html" class="btn btn-neutral float-right" title="Reports" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2020-2024, RtBrick, Inc..</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>