mirror of
https://github.com/rtbrick/bngblaster.git
synced 2024-05-06 15:54:57 +00:00
482 lines
32 KiB
HTML
482 lines
32 KiB
HTML
<!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 — 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 Blaster’s 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 Blaster’s 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
|
||
{
|
||
"status": "ok",
|
||
"code": 200,
|
||
"stream-info": {
|
||
"name": "UDP1",
|
||
…
|
||
"flow-id": 1,
|
||
…
|
||
"reverse-flow-id": 2
|
||
}
|
||
}
|
||
$ sudo bngblaster-cli run.sock stream-info flow-id 2
|
||
{
|
||
"status": "ok",
|
||
"code": 200,
|
||
"stream-info": {
|
||
"name": "UDP1",
|
||
…
|
||
"flow-id": 2,
|
||
…
|
||
"reverse-flow-id": 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
|
||
{
|
||
"status": "ok",
|
||
"code": 200,
|
||
"stream-info": {
|
||
"name": "UDP1",
|
||
"type": "unicast",
|
||
"sub-type": "ipv4",
|
||
"direction": "downstream",
|
||
"source-address": "10.0.0.1",
|
||
"source-port": 65056,
|
||
"destination-address": "192.0.2.8",
|
||
"destination-port": 65056,
|
||
"protocol": "udp", # 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 can’t
|
||
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">"streams"</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">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UDP1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"stream-group-id"</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">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ipv4"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"direction"</span><span class="p">:</span><span class="w"> </span><span class="s2">"both"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"pps"</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">"nat"</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">"network-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.1"</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UDP2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"stream-group-id"</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">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ipv4"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"direction"</span><span class="p">:</span><span class="w"> </span><span class="s2">"upstream"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"pps"</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">"nat"</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">"network-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.2"</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
|
||
{
|
||
"status": "ok",
|
||
"code": 200,
|
||
"stream-info": {
|
||
"name": "UDP1",
|
||
"type": "unicast",
|
||
"sub-type": "ipv4",
|
||
"direction": "upstream",
|
||
"source-address": "100.64.0.2",
|
||
"source-port": 65056,
|
||
"destination-address": "10.0.0.1",
|
||
"destination-port": 65056,
|
||
"protocol": "udp", # udp or tcp
|
||
…
|
||
"rx-source-ip": "192.0.2.8",
|
||
"rx-source-port": 48523,
|
||
…
|
||
"session-id": 1,
|
||
"reverse-flow-id": 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">"streams"</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">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TCP1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"stream-group-id"</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">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ipv4"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"direction"</span><span class="p">:</span><span class="w"> </span><span class="s2">"both"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"pps"</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">"raw-tcp"</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">"network-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.1"</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">"streams"</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">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TCP1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"stream-group-id"</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">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ipv4"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"direction"</span><span class="p">:</span><span class="w"> </span><span class="s2">"both"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"pps"</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">"setup-interval"</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">"raw-tcp"</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">"network-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.1"</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">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"capture-include-streams"</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">"network"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"enp6s21"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.0.2.254/24"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"gateway"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.0.2.1"</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="nt">"access"</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">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"enp6s20"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ipoe"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100.64.0.2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"address-iter"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0.0.1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"gateway"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100.64.0.1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"gateway-iter"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0.0.0"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"dhcp"</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">"ipv6"</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">"http-client-group-id"</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">"http-client"</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">"http-client-group-id"</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">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"destination-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.0.2.254"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"destination-port"</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">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"blaster.test.de"</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"http-client-group-id"</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">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"destination-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.0.2.254"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"destination-port"</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">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"blaster.test.de"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"http-server"</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">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SERVER"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.0.2.254"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"port"</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">"network-interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"enp6s21"</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
|
||
{
|
||
"status": "ok",
|
||
"code": 200,
|
||
"http-clients": [
|
||
{
|
||
"session-id": 1,
|
||
"http-client-group-id": 1,
|
||
"name": "C2",
|
||
"url": "blaster.test.de",
|
||
"destination-address": "192.0.2.254",
|
||
"destination-port": 80,
|
||
"state": "closed",
|
||
"response": {
|
||
"minor-version": 1,
|
||
"status": 200,
|
||
"msg": "OK\r\nServer: BNG-Blaster\r\nX-Client-Ip: 192.0.2.5\r\nX-Client-Port: 63122\r\n\r\n",
|
||
"headers": [
|
||
{
|
||
"name": "Server",
|
||
"value": "BNG-Blaster"
|
||
},
|
||
{
|
||
"name": "X-Client-Ip",
|
||
"value": "192.0.2.5"
|
||
},
|
||
{
|
||
"name": "X-Client-Port",
|
||
"value": "63122"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"session-id": 1,
|
||
"http-client-group-id": 1,
|
||
"name": "C1",
|
||
"url": "blaster.test.de",
|
||
"destination-address": "192.0.2.254",
|
||
"destination-port": 80,
|
||
"state": "closed",
|
||
"response": {
|
||
"minor-version": 1,
|
||
"status": 200,
|
||
"msg": "OK\r\nServer: BNG-Blaster\r\nX-Client-Ip: 192.0.2.5\r\nX-Client-Port: 63121\r\n\r\n",
|
||
"headers": [
|
||
{
|
||
"name": "Server",
|
||
"value": "BNG-Blaster"
|
||
},
|
||
{
|
||
"name": "X-Client-Ip",
|
||
"value": "192.0.2.5"
|
||
},
|
||
{
|
||
"name": "X-Client-Port",
|
||
"value": "63121"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
</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">"traffic"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"stream-rate-calculation"</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">"traffic"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"stream-delay-calculation"</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>© 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> |