diff --git a/documentation/dev-portal/book.toml b/documentation/dev-portal/book.toml index d0dfbe0674..75313d9473 100644 --- a/documentation/dev-portal/book.toml +++ b/documentation/dev-portal/book.toml @@ -55,6 +55,11 @@ wallet_release_version = "1.2.8" command = "mdbook-last-changed" renderer = ["html"] +# used for grabbing output of binary commands for automation +# https://github.com/FauconFan/mdbook-cmdrun +[preprocessor.cmdrun] + + ######### # BUILD # ######### diff --git a/documentation/dev-portal/src/SUMMARY.md b/documentation/dev-portal/src/SUMMARY.md index 42c25632a2..cb3399fe97 100644 --- a/documentation/dev-portal/src/SUMMARY.md +++ b/documentation/dev-portal/src/SUMMARY.md @@ -68,6 +68,9 @@ # Events +- [37C3](events/37c3/welcome.md) + - [NymVPN](events/37c3/nym-vpn.md) + - [FAQ](events/37c3/faq.md) - [Web3Privacy Now](./events/web3-privacy.md) - [HCPP23-serinko](./events/hcpp23-serinko.md) - [HCPP23-max](./events/hcpp23-max.md) diff --git a/documentation/dev-portal/src/events/37c3/faq.md b/documentation/dev-portal/src/events/37c3/faq.md new file mode 100644 index 0000000000..aa3ade7d4d --- /dev/null +++ b/documentation/dev-portal/src/events/37c3/faq.md @@ -0,0 +1,68 @@ +# Frequently Asked Questions @ 37C3 + +Besides the FAQ for CCC 2023 event listed below, you can have a look at [Nym general FAQ](https://nymtech.net/developers/faq/general-faq.html) and read through Nym's technical [documentation](https://nymtech.net/docs), [Developer Portal](https://nymtech.net/developers) and [Operators Guide](https://nymtech.net/operators). + +## NymVPN + +Make sure you read [NymVPV webpage](https://nymvpn.com/en) and our [guide to install, run and test](./nym-vpn.md) the client. + +### What's the difference between 2-hops and 5-hops + +The default is 5-hops (including Entry and Exit Gateways), which means that the traffic goes from the local client to Entry Gateway -> though 3 layes of Mix Nodes -> to Exit Gateway -> internet. this option uses all the Nym Mixnet features for maximum privacy. + +``` + ┌─►mix──┐ mix mix + │ │ + Entry │ │ Exit +client ───► Gateway ──┘ mix │ mix ┌─►mix ───► Gateway ───► internet + │ │ + │ │ + mix └─►mix──┘ mix +``` + +The 2-hop option is going from the local client -> Entry Gateway -> directly to Exit Gateway -> internet. This option is good for operations demanding faster connection. Keep in mind that this setup by-passes the 3 layers of Mix Nodes. + +``` + Entry Exit +client ───► Gateway ────► Gateway ───► internet +``` + +We highly recommend to read more about [Nym network overview](https://nymtech.net/docs/architecture/network-overview.html) and the [Mixnet traffic flow](https://nymtech.net/docs/architecture/traffic-flow.html). + +### Why do I see different sizes of packets in my terminal log? + +One of features of Nym Mixnet's clients is to break data into the same size packets called Sphinx, which is currently ~2kb. When running NymVPN, the data log shows payload sizes, which are the raw sizes of the IP packets, not Sphinx. The payload sizes will be capped by the configured MTU, which is set around 1500 bytes. + +### What is 'poisson filter' about? + +By default `--enable-poisson` is disabled and packets are sent from the local client to the Entry Gateway as quickly as possible. With the poisson process enabled the Nym client will send packets at a steady stream to the Entry Gateway. By default it's on average one sphinx packet per 20ms, but there is some randomness (poisson distribution). When there are no real data to fill the sphinx packets with, cover packets are generated instead. + +Enabling the poisson filter is one of the key mechanisms to de-correlate input and output traffic to the Mixnet. The performance impact however is dramatic: +1 packer per 20ms is 50 packets / sec so ballpark 100kb/s. +For mobile clients that means constantly sending data eating up data allowance. + + +## Nym Mixnet Architecture and Rewards + +We have a list of questions related to Nym Nodes and the incentives behind running them under [FAQ pages](https://nymtech.net/operators/faq/mixnodes-faq.html) in our [Operators Guide](https://nymtech.net/operators). For better knowledge about Nym architecture we recommend to read [Nym network overview](https://nymtech.net/docs/architecture/network-overview.html) and the [Mixnet traffic flow](https://nymtech.net/docs/architecture/traffic-flow.html) in our [technical documentation](https://nymtech.net/docs). + +## Project Smoosh + +Project Smoosh is a code name for a process in which different components of Nym Mixnet architecture get *smooshed* into one binary. Check out [Smoosh FAQ](https://nymtech.net/operators/faq/smoosh-faq.html) in Operators Guide to read more. + +## Exit Gateway + +Part of the the transition under code name [Project Smoosh](./faq.md#project-smoosh) is a creation of [Nym Exit Gateway](https://nymtech.net/operators/legal/exit-gateway.html) functionality. The operators running Gateways would have to “open” their nodes to a wider range of online services, in a similar fashion to Tor exit relays. The main change will be to expand the original short [allowed.list](https://nymtech.net/.wellknown/network-requester/standard-allowed-list.txt) to a more permissive setup. An [exit policy](https://nymtech.net/.wellknown/network-requester/exit-policy.txt) will constrain the hosts that the users of the Nym VPN and Mixnet can connect to. This will be done in an effort to protect the operators, as Gateways will act both as SOCKS5 Network Requesters, and exit nodes for IP traffic from Nym VPN and Mixnet clients. + +* Read more how the exit policy gets implemented [here](https://nymtech.net/operators/faq/smoosh-faq.html#how-will-the-exit-policy-be-implemented) +* Check out [Nym Operators Legal Forum](https://nymtech.net/operators/legal/exit-gateway.html) +* Do reach out to us during 37c3 with any experiences you may have running Tor Exit relays or legal findings and suggestions for Nym Exit Gateway operators + +## Nym Integrations and SDKs + +If you are a dev who is interested to integrate Nym, have a look on our SDK tutorials: + +* [Rust SDKs](https://nymtech.net/developers/tutorials/cosmos-service/intro.html) +* [TypeScript SDKs](https://sdk.nymtech.net/) +* [Integration FAQ](https://nymtech.net/developers/faq/integrations-faq.html) + diff --git a/documentation/dev-portal/src/events/37c3/images/image1.png b/documentation/dev-portal/src/events/37c3/images/image1.png new file mode 100644 index 0000000000..d5f9bcb2f5 Binary files /dev/null and b/documentation/dev-portal/src/events/37c3/images/image1.png differ diff --git a/documentation/dev-portal/src/events/37c3/images/image2.png b/documentation/dev-portal/src/events/37c3/images/image2.png new file mode 100644 index 0000000000..14b501383c Binary files /dev/null and b/documentation/dev-portal/src/events/37c3/images/image2.png differ diff --git a/documentation/dev-portal/src/events/37c3/images/image3.png b/documentation/dev-portal/src/events/37c3/images/image3.png new file mode 100644 index 0000000000..51d79d42d7 Binary files /dev/null and b/documentation/dev-portal/src/events/37c3/images/image3.png differ diff --git a/documentation/dev-portal/src/events/37c3/images/image4.png b/documentation/dev-portal/src/events/37c3/images/image4.png new file mode 100644 index 0000000000..52f4d7dd20 Binary files /dev/null and b/documentation/dev-portal/src/events/37c3/images/image4.png differ diff --git a/documentation/dev-portal/src/events/37c3/images/image5.png b/documentation/dev-portal/src/events/37c3/images/image5.png new file mode 100644 index 0000000000..40b9c3aab8 Binary files /dev/null and b/documentation/dev-portal/src/events/37c3/images/image5.png differ diff --git a/documentation/dev-portal/src/events/37c3/images/json.png b/documentation/dev-portal/src/events/37c3/images/json.png new file mode 100644 index 0000000000..a64c288169 Binary files /dev/null and b/documentation/dev-portal/src/events/37c3/images/json.png differ diff --git a/documentation/dev-portal/src/events/37c3/nym-vpn.md b/documentation/dev-portal/src/events/37c3/nym-vpn.md new file mode 100644 index 0000000000..9af554656e --- /dev/null +++ b/documentation/dev-portal/src/events/37c3/nym-vpn.md @@ -0,0 +1,406 @@ +# NymVPN alpha + +Nym has announced [NymVPN](https://nymvpn.com/en) and presented the [NymVPN Litepaper](https://nymvpn.com/nymVPN-litepaper.pdf). At CCC 2023 we have the unique opportunity to do the first alpha public testing. This page provides a how to guide, explaining steps to install and run NymVPN CLI and GUI on the Nym Sandbox testnet. + +NymVPN is a client that uses [Nym Mixnet](https://nymtech.net) to anonymise users entire internet traffic. + +The default is to run in 5-hop mode: + +``` + ┌─►mix──┐ mix mix + │ │ + Entry │ │ Exit +client ───► Gateway ──┘ mix │ mix ┌─►mix ───► Gateway ───► internet + │ │ + │ │ + mix └─►mix──┘ mix +``` + +Users can switch to 2-hop only mode, which is a faster but less private option. In this mode traffic is only sent between the two Gateway's, and is not passed between Mix Nodes. + +The client can optionally do the first connection to the entry gateway using Wireguard. NymVPN uses Mullvad libraries for wrapping `wireguard-go` and to setup local routing rules to route all traffic to the TUN virtual network device. + +```admonish warning +NymVPN is an experimental software and it's for [testing](./nym-vpn.md#testing) purposes only. All users testing the client are expected to sign GDPR Information Sheet and Consent Form, available [here](https://opnform.com/forms/nymvpn-user-research-at-37c3-yccqko). +``` + +## Goals + +This alpha testing will help: + +* Stabilise NymVPN client +* Understand NymVPN client behavior in various setups (OS, connectivity, etc.) +* Stabilize the VPN infrastructure and improve its reliability / speed / features (e.g. IPv6 support) +* Load test the network in Sandbox environment and identify / anticipate potential weaknesses + + +```admonish info +Our alpha testing round is done live with some participants at CCC 2023. This guide will not work for everyone, as the NymVPN binaries aren't publicly accessible yet. Note that this setup of Nym testnet Sandbox environment is limited for CCC 2023 event and some of the configurations will not work in the future. + +``` + +> **If you commit to test NymVPN aplha, please start with the [user research form](https://opnform.com/forms/nymvpn-user-research-at-37c3-yccqko) where all the steps will be provided**. + +## Preparation + +> Any syntax in `<>` brackets is a user's/version unique variable. Exchange with a corresponding name without the `<>` brackets. + +We have CLI and UI binaries available for Linux (Debian based) and macOS. + +![](images/image1.png) + +* Visit the [releases page](https://github.com/nymtech/nym/releases/tag/ccc) to download the binary for your system. +* Open terminal in the same directory and make executable by running: + +```sh +# for CLI +chmod +x ./nym-vpn-cli + +# for GUI +chmod +x ./nym-vpn_0.0.0_amd64.AppImage +# make sure your path to package is correct and the package name as well +``` + +* If you prefer to use the `.deb` version for installation (Linux only), open terminal in the same directory and run: +``` +sudo dpkg -i ./.deb +# or +sudo apt-get install -f ./.deb +``` + +* For CLI: Create Sandbox environment config file by saving [this](https://raw.githubusercontent.com/nymtech/nym/develop/envs/sandbox.env) as `sandbox.env` in the same directory as your NymVPN binaries. In case of GUI setup, see the steps below. + +### GUI configuration + +* Create a NymVPN config directory called `nym-vpn` in your `~/.config`, either manually or by a command: +```sh +# for Linux +mkdir $HOME/.config/nym-vpn/ + +# for macOS +mkdir $HOME/Library/Application Support/nym-vpn/ +``` +* Create the network config by saving [this](https://raw.githubusercontent.com/nymtech/nym/develop/envs/sandbox.env) as `sandbox.env` in the directory `nym-vpn` you just created +* Create the main config file called `config.toml` in the same directory with this content: +```toml +# for Linux +env_config_file = "/home//.config/nym-vpn/sandbox.env" # change to your username +entry_node_location = "DE" # two letters country code + +# for macOS +env_config_file = "$HOME/Library/Application Support/nym-vpn/" +entry_node_location = "DE" # two letters country code +``` + +## Running + +***For NymVPN to work, all other VPNs must be switched off!*** + +**Note:** At this alpha stage of NymVPN, network connection (wifi) must be re-connected after or in-between NymVPN testing rounds. + +* Get your private key for wireguard setup [here](https://nymvpn.com/en/37c3) +* See a JSON list of all Gateways [here](https://nymvpn.com/en/ccc/api/gateways) +* As NymVPN need a permission for network settings, it is run with `sudo` root command + +### CLI + +Make sure your terminal is open in the same directory as your `nym-vpn-cli` binary. + +```admonish info +The entire command syntax with all the needed arguments' values and your private key for testing purposes can be found on our event webpage [nymvpn.com/en/37c3](https://nymvpn.com/en/37c3). +``` + +Running a help command: + +```sh +./nym-vpn-cli --help +``` + +~~~admonish example collapsible=true title="Console output" +``` +Usage: nym-vpn-cli [OPTIONS] + +Options: + -c, --config-env-file + Path pointing to an env file describing the network + --mixnet-client-path + Path to the data directory of a previously initialised mixnet client, where the keys reside + --entry-gateway-id + Mixnet public ID of the entry gateway + --entry-gateway-country + Auto-select entry gateway by country ISO + --exit-router-address + Mixnet recipient address + --exit-gateway-id + + --exit-router-country + Mixnet recipient address + --enable-wireguard + Enable the wireguard traffic between the client and the entry gateway + --private-key + Associated private key + --wg-ip + The IP address of the wireguard interface + --ip + The IP address of the TUN device + --mtu + The MTU of the TUN device + --disable-routing + Disable routing all traffic through the VPN TUN device + --enable-two-hop + Enable two-hop mixnet traffic. This means that traffic jumps directly from entry gateway to exit gateway + --enable-poisson-rate + Enable Poisson process rate limiting of outbound traffic + -h, --help + Print help + -V, --version + Print version + + +``` +~~~ + +To run the CLI a few things need to be specified: + +```sh +sudo ./nym-vpn-cli -c ./sandbox.env --entry-gateway-id --exit-router-address --enable-wireguard --private-key --wg-ip +``` + +### Options Flags + +Here is a list of the options and their descriptions. Some are essential, some are more technical and not needed to adjusted by users: + +- `-c` is a path to the [Sandbox config](https://raw.githubusercontent.com/nymtech/nym/develop/envs/sandbox.env) file saved as `sandbox.env` +- `--entry-gateway-id`: paste one of the values labeled with a key `"identityKey"` (without `" "`) from [here](https://nymvpn.com/en/ccc/api/gateways) +- `--exit-router-address`: paste one of the values labeled with a key `"address"` (without `" "`) from here [here](https://nymvpn.com/en/ccc/api/gateways) +- `--enable-wireguard`: Enable the wireguard traffic between the client and the entry gateway. NymVPN uses Mullvad libraries for wrapping `wireguard-go` and to setup local routing rules to route all traffic to the TUN virtual network device +- `--wg-ip`: The address of the wireguard interface, you can get it [here](https://nymvpn.com/en/37c3) +- `--private-key`: get your private key for testing purposes [here](https://nymvpn.com/en/37c3) +- `--enable-two-hop` is a faster setup where the traffic is routed from the client to Entry Gateway and directly to Exit Gateway (default is 5-hops) + +**More advanced options** + +- `--enable-poisson`: Enables process rate limiting of outbound traffic (disabled by default). It means that NymVPN client will send packets at a steady stream to the Entry Gateway. By default it's on average one sphinx packet per 20ms, but there is some randomness (poisson distribution). When there are no real data to fill the sphinx packets with, cover packets are generated instead. +- `--ip` is the IP address of the TUN device. That is the IP address of the local private network that is set up between local client and the Exit Gateway. +- `--mtu`: The MTU of the TUN device. That is the max IP packet size of the local private network that is set up between local client and the Exit Gateway. +- `--disable-routing`: Disable routing all traffic through the VPN TUN device. + +### GUI + +If you installed the `.deb` package you may be able to have a NymVPN application icon in your app menu. However this may not work as the application needs root permission. + +Make sure you went through the GUI configuration in the [preparation section](./nym-vpn.md#gui-configuration). Then open terminal in the same directory where you [installed](./nym-vpn.md#preparation) the binary run: + +```sh +sudo -E ./nym-vpn_0.0.0_amd64.AppImage + +# In case you use another binary, just add the correct name as: +sudo -E ./ +``` + +In case of errors, see [troubleshooting section](./nym-vpn.md#macos-alert-on-nymvpn-ui-startup). + + +## Testing + +One of the main aims of the demo is testing; your results will help us to make NymVPN robust and stabilise both the client and the network through provided measurements. + +1. Create a directory called `nym-vpn-tests` and copy your `nym-vpn-cli` binary and `sandbox.env` to that directory +2. Copy the [block below](./nym-vpn.md#testssh) and save it to the same folder as `tests.sh` +3. Open terminal in the same directory +4. Turn off any existing VPN's (including the NymVPN instances) and run `sudo sh ./tests.sh`. +5. In case of errors, see [troubleshooting section](./nym-vpn.md#missing-jq-error) below +6. The script will print a JSON view of existing Gateways and prompt you to. **Make sure to use two different Gateways for entry and exit*** + - `enter a gateway ID`: paste one of the values labeled with a key `"identityKey"` printed above (without `" "`) + - `enter an exit address`: paste one of the values labeled with a key `"address"` printed above (without `" "`) +7. Note that the testing script doesn't print many logs, in case of doubts you can check logs in the log file `temp_log.txt` located in the same directory. +8. The script shall run the tests and generate a folder called `tests_` and files `perf_test_results.log` or `two_hop_perf_test_results.log` as well as some temp files. This is how the directory structure will look like: +```sh +nym-vpn-tests +├── tests.sh +├── nym-vpn-cli +├── sandbox.env +├── perf_test_results.log +├── tests_ +│   ├── api_response_times.txt +│   ├── download_time.txt +│   └── ping_results.txt +├── timeout +└── two_hop_perf_test_results.log +``` +9. In case of errors, see [troubleshooting section](./nym-vpn.md#missing-jq-error) below +10. When the tests are finished, remove the `nym-vpn-cli` binary from the folder and compress it as `nym-vpn-tests.zip` +11. Upload this compressed file to the [questionnaire](https://opnform.com/forms/nymvpn-user-research-at-37c3-yccqko) upload field when prompted. + +#### tests.sh + +```sh +#!/bin/bash + +NEW_ENDPOINT="https://nymvpn.com/en/ccc/api/gateways" + +download_file() { + local file_url=$1 + local output_file=$2 + local time_file=$3 + + echo "starting download speed test..." + local start_time=$(date +%s) + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + wget -O $output_file $file_url + elif [[ "$OSTYPE" == "darwin"* ]]; then + curl -o $output_file $file_url + fi + local end_time=$(date +%s) + local elapsed_time=$((end_time - start_time)) + echo "download speed test completed in $elapsed_time seconds." >"$time_file" +} + +if ! command -v jq &>/dev/null; then + echo "jq is not installed. Please install jq to proceed." + exit 1 +fi + +data=$(curl -s "$NEW_ENDPOINT") +if [ $? -ne 0 ]; then + echo "Error fetching data from endpoint" + exit 1 +fi + +temp_log_file="temp_log.txt" + +perform_tests() { + local gateway_id=$1 + local exit_address=$2 + local test_directory="tests_${gateway_id}_${exit_address}" + local file_url="http://ipv4.download.thinkbroadband.com/2MB.zip" + + mkdir -p "$test_directory" + local ping_results_file="${test_directory}/ping_results.txt" + local download_time_file="${test_directory}/download_time.txt" + local api_response_file="${test_directory}/api_response_times.txt" + + # ping test + echo "starting ping test..." + for site in google.com youtube.com facebook.com baidu.com wikipedia.org amazon.com twitter.com instagram.com yahoo.com ebay.com netflix.com; do + ping -c 4 $site >>"$ping_results_file" + done + echo "ping test completed. Results saved in $ping_results_file" + + # download speed test + download_file $file_url /dev/null "$download_time_file" + + # api test + local api_endpoint="https://validator.nymtech.net/api/v1/mixnodes" + local iterations=10 + >"$api_response_file" + for i in $(seq 1 $iterations); do + local start_time=$(date +%s) + local response=$(curl -s -o /dev/null -w '%{http_code}' $api_endpoint) + local end_time=$(date +%s) + + local elapsed_seconds=$((end_time - start_time)) + local hours=$((elapsed_seconds / 3600)) + local minutes=$(((elapsed_seconds % 3600) / 60)) + local seconds=$((elapsed_seconds % 60)) + + local human_readable_time=$(printf "%02dh:%02dm:%02ds" $hours $minutes $seconds) + echo "iteration $i: response Time = ${human_readable_time}, status code = $response" >>"$api_response_file" + done + echo "api response test completed. Results saved in $api_response_file." +} + +echo $data | jq . + +read -p "enter a gateway ID: " identity_key +read -p "enter an exit address: " exit_address + +# starting nymVpn +sudo ./nym-vpn-cli -c sandbox.env --entry-gateway-id "$identity_key" --exit-router-address "$exit_address" --enable-two-hop >"$temp_log_file" 2>&1 & + +timeout=15 +start_time=$(date +%s) +while true; do + current_time=$(date +%s) + if grep -q "received plain" "$temp_log_file"; then + echo "successful configuration with identity_key: $identity_key and exit address: $exit_address" >>perf_test_results.log + perform_tests "$identity_key" "$exit_address" + break + fi + if ((current_time - start_time > timeout)); then + echo "failed to connect with identity_key: $identity_key using the exit address: $exit_address" >>perf_test_results.log + break + fi + sleep 1 +done + +echo "terminating nym-vpn-cli..." +pkill -f './nym-vpn-cli' +sleep 5 +rm -f "$temp_log_file" +``` + +## Troubleshooting + +#### Thread `main` panicked + +If you see a message like: +```sh +thread 'main' panicked at /Users/runner/.cargo/git/checkouts/mullvadvpn-app-a575cf705b5dfd76/ccfbaa2/talpid-routing/src/unix.rs:301:30: +``` +Restart your wifi connection and start again. + +#### macOS alert on NymVPN UI startup + +If you are running NymVPN on mac OS for the first time, you may see this alert message: + +![](images/image3.png) + +1. Head to System Settings -> Privacy & Security and click `Allow anyway` + +![](images/image5.png) + +2. Confirm with your password or TouchID + +3. Possibly you may have to confirm again upon running the application + +#### Missing `jq` error + +In case of missing `jq` on Linux (Debian) install it with: +```sh +# Linux (Debian) +sudo apt-get install jq +# macOS +brew install jq +``` +On some Linux distributions however the [script](./nym-vpn.md#testssh) returns `jq` error even if your system claims that `jq is already the newest version`. +In that case, comment the `jq` check in the script as follows: +```sh +#if ! command -v jq &>/dev/null; then +# echo "jq is not installed. Please install jq to proceed." +# exit 1 +#fi +``` + +#### Error current_time: not found + +When running `sudo sh ./test.sh` you may see an error like: `93: current_time: not found`. This has something to do with the `current_time` setup of your system and on itself shall not have a negative impact on the test. It has nothing to do with the client at all as it only relates to the code in our testing script. + +#### Not connecting to the endpoint + +In case the automatic download of all the Gateways fail (and it shouldn't), you do an easy manual work around: + +1. Open the list of Gateways created by API [here](https://nymvpn.com/en/ccc/api/gateways) +2. On top click on `JSON` option (shall be default view) and `Save` +3. Save it as `data.json` to the `nym-vpn-tests` folder +4. Replace line 3 in the [script `tests.sh`](./nym-vpn.md#testssh) with: +```sh +NEW_ENDPOINT="http://localhost:8000/data.json" +``` +5. In a new terminal window run: +```sh +python3 -m http.server 8000 +``` +6. Continue with the steps listed in [testing section](./nym-vpn.md#testing) + + diff --git a/documentation/dev-portal/src/events/37c3/welcome.md b/documentation/dev-portal/src/events/37c3/welcome.md new file mode 100644 index 0000000000..f7ead77c08 --- /dev/null +++ b/documentation/dev-portal/src/events/37c3/welcome.md @@ -0,0 +1,14 @@ +# Chaos Communication Congress 2023 + +At [CCC 2019](https://constructiveproof.com/posts/2020-01-27-nym-testnet-up-and-running/) we announced the first demo of the [Nym Mixnet](https://github.com/nymtech/nym). Now, four years later we are honoured to present our new product: [NymVPN](https://blog.nymtech.net/nymvpn-an-invitation-for-privacy-experts-and-enthusiasts-63644139d09d). NymVPN is a client/application which captures the entire network stack of a user's device, sending this traffic through either a 2-hop VPN or through the 5-hop Mixnet. CCC 2023 is the first public demo of both the GUI and CLI versions of NymVPN. + +At first glance Nym platform may seem pretty complex. To make the connection between Nym and the community of developers, operators and users participating on the event as smooth as possible, we created a segment of documentation tailored specifically for the conference. The following pages provide an easy introduction to the NymVPN alpha client. We recommend interested developers to begin with [Nym network overview](https://nymtech.net/docs/architecture/network-overview.html) and the [Mixnet traffic flow](https://nymtech.net/docs/architecture/traffic-flow.html) pages. + +**See pages below for more content:** + +* [NymVPN alpha guide](nym-vpn.md) +* [FAQ @ 37c3](faq.md) + +
+ +