https://github.com/scaleway/natasha
Natasha is a fast and scalable, DPDK powered, stateless NAT44 packet processor
https://github.com/scaleway/natasha
dpdk nat pktgen
Last synced: 2 months ago
JSON representation
Natasha is a fast and scalable, DPDK powered, stateless NAT44 packet processor
- Host: GitHub
- URL: https://github.com/scaleway/natasha
- Owner: scaleway
- License: gpl-3.0
- Created: 2018-12-28T10:19:22.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2021-04-19T08:50:54.000Z (almost 5 years ago)
- Last Synced: 2025-03-22T15:49:54.366Z (12 months ago)
- Topics: dpdk, nat, pktgen
- Language: C
- Homepage:
- Size: 594 KB
- Stars: 137
- Watchers: 19
- Forks: 14
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: COPYING
Awesome Lists containing this project
- awesome-repositories - scaleway/natasha - Natasha is a fast and scalable, DPDK powered, stateless NAT44 packet processor (C)
README
# NATASHA
## Introduction
Natasha is a fast and scalable, **DPDK** powered, stateless **NAT44** packet
processor. It can achieve 100Gbits/s translation with 64bytes packets.
Natasha is in production at Scaleway with more than 1.2Tbits/s capacity.
## Features
* NAT `IPv4`/`TCP`/`UDP`/`UDPLite` traffic.
* Handle fragmented packets.
* Handle inner `IPv4` packet inside various `ICMP` messages.
* Reply to `ICMP Echo` requests in both the public and private interface.
* `VLAN` offload (`Tx`/`Rx` and filtering).
* `L3`/`L4` Rx checksum offload for stats purpose.
* `L3`/`L4` Tx checksum using hardware offload or software incremental update
([RFC1624](https://tools.ietf.org/html/rfc1624)) depending on the case.
* Various `stats`, Software and Hardware stats and per core.
* Dumping release version with the commit id.
* Test directory `test` with a bench of functional and performance tests.
## TODO list
* Replace `AST` lookup with `LPM`.
* Rewrite configuration data structures.
* Write a proper `L2` stack with `ARP` handling.
* Return `ICMP` response if `TTL` is exceeded.
## Configuration
At startup, `NATASHA` reads a configuration file that defines rules. These
rules are processed for each packet received.
A configuration file looks like:
```
if (ipv4.dst_addr in 10.0.0.0/8
or vlan 64
or ipv4.dst_addr in 192.168.0.0/16) {
drop ;
} else {
out port 0 mac de:ad:be:ef:ff:ff;
}
```
More concrete examples are given in the [documentation](docs/CONFIGURATION.md).
## Installation
Natasha supports DPDK `v18.02` stable:
* Get DPDK stable sources and checkout on `v18.02` version:
```
git clone git://dpdk.org/dpdk-stable && cd $PATH_TO_DPDK_SOURCES
git checkout v18.02
```
* Configure and build DPDK (see
[Documentation](http://doc.dpdk.org/guides/linux_gsg/)).
* Then make sure that your RTE_SDK path is defined.
* Finally build Natasha:
```
cd NATASHA_SOURCES_PATH
make
```
Run Natasha like any DPDK app and add application specific param `-f` with the
right configuration file:
```
$(NATASHA_SOURCES_PATH)/build/nat -l 0,2 --master-lcore=0 -n 4 -w 0000:04:00.0 -- \
-f $NATASHA_CONFIG_FILE
```
You can check the configuration files in the CI for more examples.
## Tests
Natasha has a small CI process with a functional and performance tests, checkout
[functional](test/func/README.md) and [performance](test/perf/README.md)
documentation for more informations.
## Contributing and Bugs report
Any contribution or bug report are more than welcome :heart:, please make sure
to details the bug/feature request.
## Changelog
See the [Changelog file](CHANGELOG.md)
## License
Natasha is Free Software (learn more:
http://www.gnu.org/philosophy/free-sw.html).
Natasha is released under the GPLv3 License. Please read the [COPYING](COPYING)
file for details.