Browse Source

Migrate old docs

pull/3/head
Darknet Villain 7 years ago
parent
commit
2c414a237d
  1. 7
      docs/about/community.md
  2. 12
      docs/about/contributing.md
  3. 3
      docs/about/history.md
  4. 5
      docs/about/license.md
  5. 4
      docs/devs/api/BOB.md
  6. 5
      docs/devs/api/I2CP.md
  7. 5
      docs/devs/api/I2PControl.md
  8. 4
      docs/devs/api/SAM.md
  9. 3
      docs/devs/api/index.md
  10. 4
      docs/devs/api/libi2pd.md
  11. 65
      docs/devs/building/android.md
  12. 74
      docs/devs/building/cross.md
  13. 15
      docs/devs/building/index.md
  14. 85
      docs/devs/building/ios.md
  15. 136
      docs/devs/building/unix.md
  16. 159
      docs/devs/building/windows.md
  17. 114
      docs/devs/hacking.md
  18. 35
      docs/index.md
  19. BIN
      docs/media/i2pd-logo.png
  20. 12
      docs/tutorials/filesharing.md
  21. 40
      docs/tutorials/http.md
  22. 65
      docs/tutorials/irc.md
  23. 21
      docs/tutorials/retroshare.md
  24. 42
      docs/user-guide/FAQ.md
  25. 43
      docs/user-guide/config_opts_after_2.3.0.md
  26. 190
      docs/user-guide/configuration.md
  27. 36
      docs/user-guide/family.md
  28. 57
      docs/user-guide/install.md
  29. 55
      docs/user-guide/run.md
  30. 177
      docs/user-guide/tunnels.md
  31. 51
      mkdocs.yml

7
docs/about/community.md

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
PurpleI2P team and community
============================
Community IRC channel [i2pd-dev@freenode](https://webchat.freenode.net/?channels=i2pd-dev)
Twitter hashtag [#i2pd](https://twitter.com/hashtag/i2pd)

12
docs/about/contributing.md

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
Contributing
============
Coding guideline
----------------
1. Files from libi2pd must not depend on files from libi2pdclient and i2pd. Files from libi2pdclient can depend on files from libi2pd but not on i2pd. You can find it in the fileslist.mk
2. You can use C++11, but make sure code is buildable by gcc 4.6
3. Don't reinvent a wheel. Try to find appropriate solution in std or boost. If a feature is presented in both, use std.
4. Don't bring any additional dependency without discussion. However boost, openssl and zlib can be used in any amount.
5. No requirements for formatting or coding style. You can do whatever you like.
6. When you work with binary data, mind endianess. Use functions from I2PEndian.h

3
docs/about/history.md

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
History
=======

5
docs/about/license.md

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
License
=======
This project is licensed under the BSD 3-clause license, which can be found in
the file LICENSE in the root of the project source code.

4
docs/devs/api/BOB.md

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
BOB interface
=============
BOB interface is documented [here](https://geti2p.net/en/docs/api/bob)

5
docs/devs/api/I2CP.md

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
I2CP interface
==============
I2CP interface is documented [here](https://geti2p.net/en/docs/protocol/i2cp)

5
docs/devs/api/I2PControl.md

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
I2PControl interface
=============
I2PControl interface is documented [here](https://geti2p.net/en/docs/api/i2pcontrol)

4
docs/devs/api/SAM.md

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
SAM interface
=============
SAM interface is documented [here](https://geti2p.net/en/docs/api/samv3)

3
docs/devs/api/index.md

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
Choosing API for your project
=============================

4
docs/devs/api/libi2pd.md

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
libi2pd
=======
i2pd can be built in any application with libi2pd

65
docs/devs/building/android.md

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
Building on Android
===================
There are two versions: with QT and without QT.
Pre-requesties
--------------
You need to install Android SDK, NDK and QT with android support.
- [SDK](https://developer.android.com/studio/index.html) (choose command line tools only)
- [NDK](https://developer.android.com/ndk/downloads/index.html)
- [QT](https://www.qt.io/download-open-source/)(for QT only).
Choose one for your platform for android. For example QT 5.6 under Linux would be [this file](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-linux-x64-android-5.6.1-1.run)
You also need Java JDK and Ant.
QT-Creator (for QT only)
------------------------
Open QT-creator that should be installed with QT.
Go to Settings/Anndroid and specify correct paths to SDK and NDK.
If everything is correct you will see two set avaiable:
Android for armeabi-v7a (gcc, qt) and Android for x86 (gcc, qt).
Dependencies
--------------
Take following pre-compiled binaries from PurpleI2P's repositories.
git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
git clone https://github.com/PurpleI2P/android-ifaddrs.git
Building the app with QT
------------------------
- Open `qt/i2pd_qt/i2pd_qt.pro` in the QT-creator
- Change line `MAIN_PATH = /path/to/libraries` to an actual path where you put the dependancies to
- Select appropriate project (usually armeabi-v7a) and build
- You will find an .apk file in `android-build/bin` folder
Building the app without QT
---------------------------
- Change line `I2PD_LIBS_PATH` in `android/jni/Application.mk` to an actual path where you put the dependancies to
- Run `ndk-build -j4` from andorid folder
- Create or edit file 'local.properties'. Place 'sdk.dir=<path to SDK>' and 'ndk.dir=<path to NDK>'
- Run `ant clean debug`
Creating release .apk
----------------------
In order to create release .apk you must obtain a Java keystore file(.jks). Either you have in already, or you can generate it yourself using keytool, or from one of you existing well-know ceritificates.
For example, i2pd release are signed with this [certificate](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/certificates/router/orignal_at_mail.i2p.crt).
Create file 'ant.propeties':
key.store='path to keystore file'
key.alias='alias name'
key.store.password='keystore password'
key.alias.password='alias password'
Run `ant clean release`

74
docs/devs/building/cross.md

@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
Cross compilation notes
=======================
Static 64 bit windows binary on Ubuntu 15.10 (Wily Werewolf)
------------------------------------------------------------
Install cross compiler and friends
sudo apt-get install g++-mingw-w64-x86-64
Default is to use Win32 threading model which lacks std::mutex and such. So we change defaults
sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
From now on we assume we have everything in `~/dev/`. Get Boost sources unpacked into `~/dev/boost_1_60_0/` and change directory to it.
Now add out cross compiler configuration. Warning: the following will wipe out whatever you had in there.
echo "using gcc : mingw : x86_64-w64-mingw32-g++ ;" > ~/user-config.jam
Proceed with building Boost normal way, but let's define dedicated staging directory
./bootstrap.sh
./b2 toolset=gcc-mingw target-os=windows variant=release link=static runtime-link=static address-model=64 \
--build-type=minimal --with-filesystem --with-program_options --with-date_time \
--stagedir=stage-mingw-64
cd ..
Now we get & build OpenSSL
git clone https://github.com/openssl/openssl
cd openssl
git checkout OpenSSL_1_0_2g
./Configure mingw64 no-rc2 no-rc4 no-rc5 no-idea no-bf no-cast no-whirlpool no-md2 no-md4 no-ripemd no-mdc2 \
no-camellia no-seed no-comp no-krb5 no-gmp no-rfc3779 no-ec2m no-ssl2 no-jpake no-srp no-sctp no-srtp \
--prefix=~/dev/stage --cross-compile-prefix=x86_64-w64-mingw32-
make depend
make
make install
cd ..
...and zlib
git clone https://github.com/madler/zlib
cd zlib
git checkout v1.2.8
CC=x86_64-w64-mingw32-gcc CFLAGS=-O3 ./configure --static --64 --prefix=~/dev/stage
make
make install
cd ..
Now we prepare cross toolchain hint file for CMake, let's name it `~/dev/toolchain-mingw.cmake`
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
Download miniupnpc, unpack and symlink it into `~/dev/miniupnpc/`.
Finally, we can build i2pd with all that goodness
git clone https://github.com/PurpleI2P/i2pd
mkdir i2pd-mingw-64-build
cd i2pd-mingw-64-build
BOOST_ROOT=~/dev/boost_1_60_0 cmake -G 'Unix Makefiles' ~/dev/i2pd/build -DBUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=~/dev/toolchain-mingw.cmake -DWITH_AESNI=ON -DWITH_UPNP=ON -DWITH_STATIC=ON \
-DWITH_HARDENING=ON -DCMAKE_INSTALL_PREFIX:PATH=~/dev/i2pd-mingw-64-static \
-DZLIB_ROOT=~/dev/stage -DBOOST_LIBRARYDIR:PATH=~/dev/boost_1_60_0/stage-mingw-64/lib \
-DOPENSSL_ROOT_DIR:PATH=~/dev/stage
make
x86_64-w64-mingw32-strip i2pd.exe
By now, you should have a release build with stripped symbols.

15
docs/devs/building/index.md

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
Build requirements
==================
In general, for building i2pd you need several things:
* compiler with c++11 support (for example: gcc >= 4.7, clang)
* boost >= 1.49
* openssl library
* zlib library (openssl already depends on it)
Optional tools:
* cmake >= 2.8 (or 3.3+ if you want to use precompiled headers on windows)
* miniupnp library (for upnp support)
* [websocketpp](https://github.com/zaphoyd/websocketpp/) (for websocket ui)

85
docs/devs/building/ios.md

@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
Building on iOS
===================
How to build i2pd for iOS 9 and iOS Simulator 386/x64
Prerequisites
--------------
XCode7+, cmake 3.2+
Dependencies
------------
- precompiled openssl
- precompiled boost with modules `filesystem`, `program_options`, `date_time` and `system`
- ios-cmake toolchain from `https://github.com/vovasty/ios-cmake.git`
Building
--------
Assume you have folder structure
lib/
libboost_date_time.a
libboost_filesystem.a
libboost_program_options.a
libboost_system.a
libboost.a
libcrypto.a
libssl.a
include/
boost/
openssl/
ios-cmake/
i2pd/
```bash
mkdir -p build/simulator/lib build/ios/lib include/i2pd
pushd build/simulator && \
cmake -DIOS_PLATFORM=SIMULATOR \
-DPATCH=/usr/bin/patch \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \
-DWITH_STATIC=yes \
-DWITH_BINARY=no \
-DBoost_INCLUDE_DIR=../../include \
-DOPENSSL_INCLUDE_DIR=../../include \
-DBoost_LIBRARY_DIR=../../lib \
-DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \
-DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \
../../i2pd/build && \
make -j16 VERBOSE=1 && \
popd
pushd build/ios
cmake -DIOS_PLATFORM=OS \
-DPATCH=/usr/bin/patch \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \
-DWITH_STATIC=yes \
-DWITH_BINARY=no \
-DBoost_INCLUDE_DIR=../../include \
-DOPENSSL_INCLUDE_DIR=../../include \
-DBoost_LIBRARY_DIR=../../lib \
-DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \
-DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \
../../i2pd/build && \
make -j16 VERBOSE=1 && \
popd
libtool -static -o lib/libi2pdclient.a build/*/libi2pdclient.a
libtool -static -o lib/libi2pd.a build/*/libi2pd.a
cp i2pd/*.h include/i2pd
```
Include into project
--------------------
- add all libraries in `lib` folder to `Project linked frameworks`.
- add `libc++` and `libz` libraries from system libraries to `Project linked frameworks`.
- add path to i2p headers to your `Headers search paths`
Alternatively you may use swift wrapper `https://github.com/vovasty/SwiftyI2P.git`

136
docs/devs/building/unix.md

@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@
Building on Unix systems
=============================
First of all we need to make sure that all dependencies are satisfied.
This doc is trying to cover:
* [Debian/Ubuntu](#debian-ubuntu) (contains packaging instructions)
* [Fedora/Centos](#fedora-centos)
* [Fedora/Centos](#mac-os-x)
* [FreeBSD](#freebsd)
Make sure you have all required dependencies for your system successfully installed.
See [this](requirements.md) page for common requirements.
If so then we are ready to go!
Let's clone the repository and start building the i2pd:
git clone https://github.com/PurpleI2P/i2pd.git
Generic build process looks like this (with cmake):
cd i2pd/build
cmake <cmake options> . # see "CMake Options" section below
make # you may add VERBOSE=1 to cmdline for debugging
..or with quick-and-dirty way with just make:
cd i2pd/
make
After successfull build i2pd could be installed with:
make install
CMake Options
-------------
Available CMake options(each option has a form of `<key>=<value>`, for more information see `man 1 cmake`):
* `CMAKE_BUILD_TYPE` build profile (Debug/Release)
* `WITH_BINARY` build i2pd itself
* `WITH_LIBRARY` build libi2pd
* `WITH_STATIC` build static versions of library and i2pd binary
* `WITH_UPNP` build with UPnP support (requires libminiupnp)
* `WITH_AESNI` build with AES-NI support (ON/OFF)
* `WITH_HARDENING` enable hardening features (ON/OFF) (gcc only)
* `WITH_PCH` use pre-compiled header (experimental, speeds up build)
* `WITH_I2LUA` used when building i2lua
* `WITH_WEBSOCKETS` enable websocket server
Also there is `-L` flag for CMake that could be used to list current cached options:
cmake -L
Debian/Ubuntu
-------------
You will need a compiler and other tools that could be installed with `build-essential` package:
sudo apt-get install build-essential
Also you will need a bunch of development libraries:
sudo apt-get install \
libboost-date-time-dev \
libboost-filesystem-dev \
libboost-program-options-dev \
libboost-system-dev \
libssl-dev
If you need UPnP support miniupnpc development library should be installed (don't forget to rerun CMake with needed option):
sudo apt-get install libminiupnpc-dev
You may also build deb-package with the following:
sudo apt-get install fakeroot devscripts
cd i2pd
debuild --no-tgz-check
Fedora/Centos
-------------
You will need a compiler and other tools to perform a build:
sudo yum install make cmake gcc gcc-c++
Also you will need a bunch of development libraries
sudo yum install boost-devel openssl-devel
If you need UPnP support miniupnpc development library should be installed (don't forget to rerun CMake with needed option):
sudo yum install miniupnpc-devel
Latest Fedora systems using [DNF](https://en.wikipedia.org/wiki/DNF_(software)) instead of YUM by default, you may prefer to use DNF, but YUM should be ok
Centos 7 has CMake 2.8.11 in the official repositories that too old to build i2pd, CMake >=2.8.12 is required.
But you can use cmake3 from the epel repository:
yum install epel-release -y
yum install make cmake3 gcc gcc-c++ miniupnpc-devel boost-devel openssl-devel -y
...and then use 'cmake3' instead 'cmake'.
MAC OS X
--------
Requires [homebrew](http://brew.sh)
brew install boost libressl
Then build:
make HOMEBREW=1
FreeBSD
-------
For 10.X use clang. You would also need devel/boost-libs, security/openssl and devel/gmake ports.
Type gmake, it invokes Makefile.bsd, make necessary changes there is required.
Branch 9.X has gcc v4.2, that is too old (not supports -std=c++11)
Required ports:
* `devel/cmake`
* `devel/boost-libs`
* `lang/gcc47`(or later version)
To use newer compiler you should set these variables(replace "47" with your actual gcc version):
export CC=/usr/local/bin/gcc47
export CXX=/usr/local/bin/g++47

159
docs/devs/building/windows.md

@ -0,0 +1,159 @@ @@ -0,0 +1,159 @@
Building on Windows
=========================
There are two approaches available to build i2pd on Windows. The best
one depends on your needs and personal preferences. One is to use
msys2 and [unix alike infrastructure](unix.md). Another
one is to use Visual Studio. While there might be no difference for
end users of i2pd daemon, developers, however, shall be wary of
differences in C++ name mangling between the two compilers when making
a choice to be able to link their software against libi2pd.
If you are a stranger to C++ with no development tools installed on
your system and your only goal is to have i2pd up and running from the
most recent source, consider using msys2. Although it relies on
command line operations, it should be straight forward.
In this guide, we will use CMake for both approaches and we will
assume that you typically have your projects in C:\dev\ as your
development location for the sake of convenience. Adjust paths
accordingly if it is not the case. Note that msys uses unix-alike
paths like /c/dev/ for C:\dev\.
msys2
-----
Get install file `msys2-$ARCH-*.exe` from `https://msys2.github.io`
Where $ARCH is `i686` or `x86_64` (matching your system).
- Open MSYS2 Shell (from Start menu).
- Install all prerequisites and download i2pd source:
export ARCH='i686' # or 'x86_64'
export MINGW='mingw32' # or 'mingw64'
pacman -S mingw-w64-$ARCH-boost mingw-w64-$ARCH-openssl mingw-w64-$ARCH-gcc git make
mkdir -p /c/dev/i2pd
cd /c/dev/i2pd
git clone https://github.com/PurpleI2P/i2pd.git
cd i2pd
# we need compiler on PATH which is usually heavily cluttered on Windows
export PATH=/$MINGW/bin:/usr/bin
make
### Caveats
It is important to restrict PATH as described above.
If you have Strawberry Perl and/or Mercurial installed,
it will pick up gcc & openssl from the wrong places.
If you do use precompiled headers to speed up compilation (recommended),
things can go wrong if compiler options have changed for whatever reason.
Just delete `stdafx.h.gch` found in your build folder, note the file extension.
If you are an Arch Linux user, refrain from updating system with `pacman -Syu`.
Always update runtime separately as described on the home page,
otherwise you might end up with DLLs incompatibility problems.
### AES-NI
If your processor has [AES instruction set](https://en.wikipedia.org/wiki/AES_instruction_set),
use `make USE_AESNI=1` instead just `make`. No check is done however, it will compile,
but it might crash with `Illegal instruction` if this feature is not supported by your processor.
You should be able to run ./i2pd . If you need to start from the new shell,
consider starting *MinGW-w64 Win32 Shell* instead of *MSYS2 Shell*
as it adds `/minw32/bin` to the PATH.
### UPnP
You can install it through the MSYS2 and build with `USE_UPNP` key.
export ARCH='i686' # or 'x86_64'
pacman -S mingw-w64-$ARCH-miniupnpc
make USE_UPNP=yes
Using Visual Studio
-------------------
Requirements for building:
* [CMake](https://cmake.org/) (tested with 3.1.3)
* [Visual Studio Community Edition](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) (tested with VS2013 Update 4)
* [Boost](http://www.boost.org/) (tested with 1.59)
* Optionally [MiniUPnP](http://miniupnp.free.fr) (tested with 1.9), we need only few client headers
* OpenSSL (tested with 1.0.1p and 1.0.2e), if building from sources (recommended), you'll need as well
* [Netwide assembler](http://www.nasm.us/)
* Strawberry Perl or ActiveState Perl, do NOT try msys2 perl, it won't work
### Building Boost
Open a Command Prompt (there is no need to start Visual Studio command
prompt to build Boost) and run the following:
cd C:\dev\boost
bootstrap
b2 toolset=msvc-12.0 --build-type=complete --with-filesystem --with-program_options --with-date_time
If you are on 64-bit Windows and you want to build 64-bit version as well
b2 toolset=msvc-12.0 --build-type=complete --stagedir=stage64 address-model=64 --with-filesystem --with-program_options --with-date_time
After Boost is compiled, set the environment variable `BOOST_ROOT` to
the directory Boost was unpacked to, e.g., C:\dev\boost.
If you are planning on building only particular variant, e.g. Debug only and static linking,
and/or you are out of space/time, you might consider `--build-type=minimal`.
Take a look at [appveyor.yml](../appveyor.yml) for details on how test builds are done.
### Building OpenSSL
Download OpenSSL, e.g. with git
git clone https://github.com/openssl/openssl.git
cd openssl
git checkout OpenSSL_1_0_1p
Now open Visual Studio command prompt and change directory to that with OpenSSL
set "PATH=%PATH%;C:\Program Files (x86)\nasm"
perl Configure VC-WIN32 --prefix=c:\OpenSSL-Win32
ms\do_nasm
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
You should have it installed into C:\OpenSSL-Win32 by now.
Note that you might consider providing `-DOPENSSL_ROOT_DIR` to CMake and/or
create a symlink (with mklink /J) to C:\OpenSSL if you plan on maintain
multiple versions, e.g. 64 bit and/or static/shared.
See `C:\Program Files (x86)\CMake\share\cmake-3.3\Modules\FindOpenSSL.cmake` for details.
### Get miniupnpc
If you are behind a UPnP enabled router and don't feel like manually configuring port forwarding,
you should consider using [MiniUPnP](http://miniupnp.free.fr) client.
I2pd can be built capable of using miniupnpc shared library (DLL) to open up necessary port.
You'd want to have include headers around to build i2pd with support for this.
Unpack client source code to subdir, e.g. `C:\dev\miniupnpc`.
You may want to remove version number from folder name included in downloaded archive.
### Creating Visual Studio project
Start CMake GUI, navigate to i2pd directory, choose building directory, e.g. ./out, and configure options.
Alternatively, if you feel adventurous, try that from the command line
mkdir i2pd\out
cd i2pd\out
cmake ..\build -G "Visual Studio 12 2013" -DWITH_UPNP=ON -DWITH_PCH=ON -DCMAKE_INSTALL_PREFIX:PATH=C:\dev\Debug_Win32_stage
If necessary files are not found `WITH_UPNP` will stay off.
### Building i2pd
You can open generated solution/project with Visual Studio and build from there,
alternatively you can use `cmake --build . --config Release --target install` or
[MSBuild tool](https://msdn.microsoft.com/en-us/library/dd293626.aspx)
msbuild i2pd.sln /p:Configuration=Release

114
docs/devs/hacking.md

@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
# Hacking on I2PD
This document contains notes compiled from hacking on i2pd
## prerequisites
This guide assumes:
* a decent understanding of c++
* basic understanding of how i2p works at i2np level and up
## general structure
Notes on multithreading
* every compontent runs in its own thread
* each component (usually) has a public function `GetService()` which can be used to obtain the `boost::asio::io_service` that it uses.
* when talking between components/threads, **always** use `GetService().post()` and be mindfull of stack allocated memory.
### NetDb
#### NetDb.h
The `i2p::data::netdb` is a `i2p::data::NetDb` instance processes and dispatches *inbound* i2np messages passed in from transports.
global singleton at `i2p::data::netdb` as of 2.10.1
#### NetDbRequests.h
For Pending RouterInfo/LeaseSet lookup and store requests
### ClientContext
#### ClientContext.h
`i2p::client::ClientContext` spawns all destinations used by the i2p router including the shared local destination.
global singleton at `i2p::client::context` as of 2.10.1
### Daemon
File: Daemon.cpp
`i2p::util::Daemon_Singleton_Private` subclasses implement the daemon start-up and tear-down, creates Http Webui and i2p control server.
### Destinations
#### Destination.h
each destination runs in its own thread
##### i2p::client::LeaseSetDestination
Base for `i2p::client::ClientDestination`
##### i2p::client::ClientDestination
Destination capable of creating (tcp/i2p) streams and datagram sessions.
#### Streaming.h
##### i2p::stream::StreamingDestination
Does not implement any destination related members, the name is a bit misleading.
Owns a `i2p::client::ClientDestination` and runs in the destination thread.
Anyone creating or using streams outside of the destination thread **MUST** be aware of the consequences of multithreaded c++ :^)
If you use streaming please consider running all code within the destination thread using `ClientDestination::GetService().post()`
#### Garlic.h
Provides Inter-Destination routing primatives.
##### i2p::garlic::GarlicDestination
sublcass of `i2p::client::LeaseSetDestination` for sending messages down shared routing paths.
##### i2p::garlic::GarlicRoutingSession
a point to point conversation between us and 1 other destination.
##### i2p::garlic::GarlicRoutingPath
A routing path currently used by a routing session. specifies which outbound tunnel to use and which remote lease set to use for `OBEP` to `IBGW` inter tunnel communication.
members:
* outboundTunnel (OBEP)
* remoteLease (IBGW)
* rtt (round trip time)
* updatedTime (last time this path's IBGW/OBEP was updated)
* numTimesUsesd (number of times this path was used)
### Transports
each transport runs in its own thread
#### Transports.h
`i2p::transport::Transports` contains NTCP and SSU transport instances

35
docs/index.md

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
i2pd
====
![Logo](media/i2pd-logo.png)
i2pd (I2P Daemon) is a full-featured C++ implementation of I2P client.
I2P (Invisible Internet Protocol) is a universal anonymous network layer.
All communications over I2P are anonymous and end-to-end encrypted, participants
don't reveal their real IP addresses.
I2P client is a software used for building and using anonymous I2P
networks. Such networks are commonly used for anonymous peer-to-peer
applications (filesharing, cryptocurrencies) and anonymous client-server
applications (websites, instant messengers, chat-servers).
I2P allows people from all around the world to communicate and share information
without restrictions.
* [Website](http://i2pd.website)
* [Documentation](https://i2pd.readthedocs.io/en/latest/)
* [Wiki](https://github.com/PurpleI2P/i2pd/wiki)
* [Tickets/Issues](https://github.com/PurpleI2P/i2pd/issues)
* [Specifications](https://geti2p.net/spec)
* [Twitter](https://twitter.com/hashtag/i2pd)
Features
--------
* Distributed anonymous networking framework
* End-to-end encrypted communications
* Small footprint, simple dependencies, fast performance
* Rich set of APIs for developers of secure applications

BIN
docs/media/i2pd-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

12
docs/tutorials/filesharing.md

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
Anonymous filesharing
=====================
You can share and download torrents with [Transmission-I2P](https://github.com/l-n-s/transmission-i2p).
Alternative torrent-clients are [Robert](http://en.wikipedia.org/wiki/Robert_%28P2P_Software%29) and [Vuze](https://en.wikipedia.org/wiki/Vuze).
Robert uses BOB protocol, i2pd must be run with parameter --bob.enabled=true.
Vuze uses I2CP protocol, i2pd must be run with parameter --i2cp.enabled=true.
Also, visit [postman tracker](http://tracker2.postman.i2p).

40
docs/tutorials/http.md

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
Anonymous websites
==================
## Browse anonymous websites
To browse anonymous websites inside Invisible Internet, configure your web browser to use HTTP proxy 127.0.0.1:4444 (available by default in i2pd).
In Firefox: Preferences -> Advanced -> Network tab -> Connection Settings -> choose Manual proxy configuration, Enter HTTP proxy 127.0.0.1, Port 4444
In Chromium: run chromium executable with key
chromium --proxy-server="http://127.0.0.1:4444"
Note that if you wish to stay anonymous too you'll need to tune your browser for better privacy. Do your own research, [can start here](http://www.howtogeek.com/102032/how-to-optimize-mozilla-firefox-for-maximum-privacy/).
Big list of Invisible Internet websites can be found at [identiguy.i2p](http://identiguy.i2p).
## Host anonymous website
If you wish to run your own website in Invisible Internet, follow those steps:
1) Run your webserver and find out which host:port it uses (for example, 127.0.0.1:8080).
2) Configure i2pd to create HTTP server tunnel. Put in your ~/.i2pd/tunnels.conf file:
[anon-website]
type = http
host = 127.0.0.1
port = 8080
keys = anon-website.dat
3) Restart i2pd.
4) Find b32 destination of your website.
Go to webconsole -> [I2P tunnels page](http://127.0.0.1:7070/?page=i2p_tunnels). Look for Sever tunnels and you will see address like \<long random string\>.b32.i2p next to anon-website.
Website is now available in Invisible Internet by visiting this address.
5) (Optional) Register short and rememberable .i2p domain on [inr.i2p](http://inr.i2p).

65
docs/tutorials/irc.md

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
Anonymous chat servers
======================
## Running anonymous IRC server
1) Run your IRC server software and find out which host:port it uses (for example, 127.0.0.1:5555).
For small private IRC servers you can use [miniircd](https://github.com/jrosdahl/miniircd), for large public networks [UnreadIRCd](https://www.unrealircd.org/).
2) Configure i2pd to create IRC server tunnel.
Simplest case, if your server does not support WebIRC, add this to ~/.i2pd/tunnels.conf:
[anon-chatserver]
type = irc
host = 127.0.0.1
port = 5555
keys = chatserver-key.dat
And that is it.
Alternatively, if your IRC server supports WebIRC, for example, UnreadIRCd, put this into UnrealIRCd config:
webirc {
mask 127.0.0.1;
password your_password;
};
Also change line:
modes-on-connect "+ixw";
to
modes-on-connect "+iw";
And this in ~/.i2pd/tunnels.conf:
[anon-chatserver]
type = irc
host = 127.0.0.1
port = 5555
keys = chatserver-key.dat
webircpassword = your_password
3) Restart i2pd.
4) Find b32 destination of your anonymous IRC server.
Go to webconsole -> [I2P tunnels page](http://127.0.0.1:7070/?page=i2p_tunnels). Look for Sever tunnels and you will see address like \<long random string\>.b32.i2p next to anon-chatserver.
Clients will use this address to connect to your server anonymously.
## Connect to anonymous IRC server
To connect to IRC server at *walker.i2p*, add this to ~/.i2pd/tunnels.conf:
[IRC2]
type = client
address = 127.0.0.1
port = 6669
destination = walker.i2p
#keys = walker-keys.dat
Restart i2pd, then connect to irc://127.0.0.1:6669 with your IRC client.

21
docs/tutorials/retroshare.md

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
Using RetroShare with i2pd
==========================
Retroshare is I2P capable.
Their [configuration instructions](https://retroshare.readthedocs.io/en/latest/tutorial/i2p-hidden-rs-node/) for Java I2P.
In order to do it for i2pd, you must create a new server tunnels in tunnels.conf like this
[Retroshare]
type=server
host=127.0.0.1
port="port you wish to use"
keys=retroshare.dat
You can specify [more options](https://github.com/PurpleI2P/i2pd/wiki/tunnels.conf)
Also keep SOCKS proxy enabled. It's enabled by default.
Start i2pd with this new tunnels, and get it's .b32.i2p address from http://127.0.0.1:7070/?page=i2p_tunnels.
Now you are ready to create hidden profile for Retroshare.
Mark it as hidden and enter your .b32.i2p and port you specified for tunnel.

42
docs/user-guide/FAQ.md

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
Frequently asked questions
==========================
## What is I2P?
## How exactly I2P works? Is I2P better than Tor?
Learn more at https://geti2p.net
## How i2pd differs from original I2P implementation?
## What can I use i2pd for?
## Why is network so slow and unstable sometimes?
## What is good tunnel creation success rate value?
Average values are 15% - 40%. Larger is better.
## Can use i2pd as a proxy for regular Internet?
Not out of the box. You better use [Tor](https://www.torproject.org/) for that.
## Are there any alive I2P websites?
Sure, there is a list of alive websites [here](http://identiguy.i2p.xyz/)
## How can I better integrate my router to the network?
Edit your settings: set correct bandwidth and share rate.
Run i2pd for a long time, download and seed some popular torrents.
## What browser should I use to browse I2P websites?
Use any opensource browser - for example, Firefox or Chromium based. Create separate profile for I2P ([firefox instructions](https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles)), try not to mix clearnet browsing with I2P. Learn how to configure your browser for better privacy and security.
Good idea is to configure [privoxy](https://wiki.archlinux.org/index.php/Privoxy) for I2P/onion/clearnet browsing at the same time.
i2pd socks proxy has an option to pass all non-i2p traffic to Tor socks proxy. Make sure you know what are you doing!
## What is floodfill mode?

43
docs/user-guide/config_opts_after_2.3.0.md

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
Изменения обработки параметров в релизах > 2.3.0
------------------------------------------------
Система параметров отличается от того, что было ранее и достаточно сильно:
* изменения имён и стиля параметров
Все параметры теперь в виде --help (gnu-style), у некоторых есть шорткаты в виде -h (unix-style).
Это касается всех систем, в том числе винды.
--daemon=1 и подобное -> просто --daemon, без параметра. Нет опции - false, есть - true
--notransit=1 -> --notransit, то же что и выше: есть опция - false, нет - true
--v6 -> --ipv6 (первое было похоже на версию какого-то своего протокола, типа socksproxy --v5)
--tunnelscfg -> --tunconf (имя параметра было слишком длинным, cfg переделан на conf - единообразно с --conf)
--sockskeys -> разделён на два, для socks и httpproxy по-отдельности
* поддержка секций в основном конфиге
Выглядит это так:
# основные опции
pidfile = /var/run/i2pd.pid
#
# настройки конкретного модуля
[httproxy]
address = 1.2.3.4
port = 4446
keys = httproxy-keys.dat
# и так далее
[sam]
enabled = no
addresss = 127.0.0.2
# ^^ переопределяется только адрес, остальное берётся из дефолта
Точно так же сейчас работает конфиг туннелей: секция до точки - имя, после - параметр
* поддержка выключения отдельных сервисов "на корню" см sam.enabled и подобное
Это позволило задать дефолт для номера порта и не писать его руками для включения.
* добавлен --help (см #110)
* присутствует некая валидация параметров, --port=abcd - не прокатит, --port=100500 - тоже

190
docs/user-guide/configuration.md

@ -0,0 +1,190 @@ @@ -0,0 +1,190 @@
i2pd configuration
==================
i2pd can be configured via command-line arguments and config files.
Options are the same, for example, running i2pd with argument `--port=10123` and setting
option `port = 10123` in config file will have same effect.
There are two separate config files `i2pd.conf` and `tunnels.conf`. `i2pd.conf` is main configuration file, where
you configure all options. `tunnels.conf` is I2P tunnel configuration file, where you configure I2P hidden services
and client tunnels for you needs. `tunnels.conf` options are documented [here](tunnels.md).
INI-like, syntax is the following : <key> = <value>.
Comments are "#", not ";" as you may expect. See [boost ticket](https://svn.boost.org/trac/boost/ticket/808)
All command-line parameters are allowed as keys, but note for those which contains dot (.).
For example:
i2pd.conf:
# comment
log = true
ipv6 = true
# settings for specific module
[httpproxy]
port = 4444
# ^^ this will be --httproxy.port= in cmdline
# another comment
[sam]
enabled = true
See also commented config with examples of all options in ``docs/i2pd.conf``.
Options specified on the command line take precedence over those in the config file.
If you are upgrading your very old router (< 2.3.0) see also [this](config_opts_after_2.3.0.md) page.
Available options
-----------------
Run `./i2pd --help` to show builtin help message (default value of option will be shown in braces)
### General options
Option | Description
------------- | --------------------------------------
conf | Config file (default: ~/.i2pd/i2pd.conf or /var/lib/i2pd/i2pd.conf). This parameter will be silently ignored if the specified config file does not exist.
tunconf | Tunnels config file (default: ~/.i2pd/tunnels.conf or /var/lib/i2pd/tunnels.conf)
pidfile | Where to write pidfile (dont write by default)
log | Logs destination: stdout, file (stdout if not set, file - otherwise, for compatibility)
logfile | Path to logfile (default - autodetect)
loglevel | Log messages above this level (debug, info, warn, error)
datadir | Path to storage of i2pd data (RI, keys, peer profiles, ...)
host | Router external IP for incoming connections
port | Port to listen for incoming connections (default: auto)
daemon | Router will go to background after start
service | Router will use system folders like '/var/lib/i2pd'
ipv6 | Enable communication through ipv6. false by default
notransit | Router will not accept transit tunnels at startup. false by default
floodfill | Router will be floodfill. false by default
bandwidth | Bandwidth limit: integer in KBps or letters: L (32), O (256), P (2048), X (>9000)
family | Name of a family, router belongs to
netid | Network ID, router belongs to. Main I2P is 2.
### Windows-specific options
Option | Description
------------- | --------------------------------------
svcctl | Windows service management (--svcctl="install" or --svcctl="remove")
insomnia | Prevent system from sleeping
close | Action on close: minimize, exit, ask
All options below still possible in cmdline, but better write it in config file:
### HTTP webconsole
Option | Description
------------- | --------------------------------------
http.enabled | If webconsole is enabled. true by default
http.address | The address to listen on (HTTP server)
http.port | The port to listen on (HTTP server) 7070 by default
http.auth | Enable basic HTTP auth for webconsole
http.user | Username for basic auth (default: i2pd)
http.pass | Password for basic auth (default: random, see logs)
### HTTP proxy
Option | Description
------------- | --------------------------------------
httpproxy.enabled | If HTTP proxy is enabled. true by default
httpproxy.address | The address to listen on (HTTP Proxy)
httpproxy.port | The port to listen on (HTTP Proxy) 4444 by default
httpproxy.keys | optional keys file for HTTP proxy local destination
httpproxy.inbound.length | Inbound tunnels length if keys is set. 3 by default
httpproxy.inbound.quantity | Inbound tunnels quantity if keys is set. 5 by default
httpproxy.outbound.length | Outbound tunnels length if keys is set. 3 by default
httpproxy.outbound.quantity | Outbound tunnels quantity if keys is set. 5 by default
### Socks proxy
Option | Description
------------- | --------------------------------------
socksproxy.enabled | If SOCKS proxy is enabled. true by default
socksproxy.address | The address to listen on (SOCKS Proxy)
socksproxy.port | The port to listen on (SOCKS Proxy). 4447 by default
socksproxy.keys | optional keys file for SOCKS proxy local destination
socksproxy.inbound.length | Inbound tunnels length if keys is set. 3 by default
socksproxy.inbound.quantity | Inbound tunnels quantity if keys is set. 5 by default
socksproxy.outbound.length | Outbound tunnels length if keys is set. 3 by default
socksproxy.outbound.quantity | Outbound tunnels quantity if keys is set. 5 by default
socksproxy.outproxy | Address of outproxy. requests outside i2p will go there
socksproxy.outproxyport | Outproxy remote port
### SAM interface
Option | Description
------------- | --------------------------------------
sam.address | The address to listen on (SAM bridge)
sam.port | Port of SAM bridge. Usually 7656. SAM is off if not specified
sam.enabled | If SAM is enabled. false by default
### BOB interface
Option | Description
------------- | --------------------------------------
bob.address | The address to listen on (BOB command channel)
bob.port | Port of BOB command channel. Usually 2827. BOB is off if not specified
bob.enabled | If BOB is enabled. false by default
### I2CP interface
Option | Description
------------- | --------------------------------------
i2cp.address | The address to listen on or an abstract address for Android LocalSocket
i2cp.port | Port of I2CP server. Usually 7654. Ignored for Andorid
i2cp.enabled | If I2CP is enabled. false by default. Other services don't require I2CP
### I2PControl interface
Option | Description
------------- | --------------------------------------
i2pcontrol.address | The address to listen on (I2P control service)
i2pcontrol.port | Port of I2P control service. Usually 7650. I2PControl is off if not specified
i2pcontrol.enabled | If I2P control is enabled. false by default
i2pcontrol.password | I2P control authentication password. itoopie by default
i2pcontrol.cert | I2P control HTTPS certificate file name. i2pcontrol.crt.pem by default
i2pcontrol.key | I2P control HTTPS certificate key file name. i2pcontrol.key.pem by default
### UPNP
Option | Description
------------- | --------------------------------------
upnp.enabled | Enable or disable UPnP, false by default for CLI and true for GUI (Windows, Android)
upnp.name | Name i2pd appears in UPnP forwardings list. I2Pd by default
### Cryptography
Option | Description
------------- | --------------------------------------
precomputation.elgamal | Use ElGamal precomputated tables. false for x64 and true for other platforms by default
### Reseeding
Option | Description
------------- | --------------------------------------
reseed.verify | Request SU3 signature verification
reseed.file | Full path to SU3 file to reseed from
reseed.urls | Reseed URLs, separated by comma
### Addressbook options
Option | Description
------------- | --------------------------------------
addressbook.defaulturl | AddressBook subscription URL for initial setup
addressbook.subscriptions | AddressBook subscriptions URLs, separated by comma
### Limits
Option | Description
------------- | --------------------------------------
limits.transittunnels | Override maximum number of transit tunnels. 2500 by default
limits.openfiles | Maximum size of corefile in Kb (0 - use system limit)
limits.coresize | Maximum size of corefile in Kb (0 - use system limit)
Local addressbook
-----------------
There is also a special addressbook config file in working directory `addressbook/local.csv`.
It is used to map long I2P destinations to short, human readable domain names. The syntax is csv.

36
docs/user-guide/family.md

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
Family configuration
====================
Your might want to specify a family, your router belongs to.
There are two possibilities: create new family or joing to existing.
New family
-----------
You must create family self-signed certificate and key.
The only key type supposted is prime256v1.
Use the following list of commands:
openssl ecparam -name prime256v1 -genkey -out <your family name>.key
openssl req -new -key <your family name>.key -out <your family name>.csr
touch v3.ext
openssl x509 -req -days 3650 -in <your family name>.csr -signkey <your family name>.key -out <your family name>.crt -extfile v3.ext
Specify <your family name>.family.i2p.net for CN (Common Name) when requested.
Once you are done with it place <your-family-name>.key and <your-family-name>.crt to <ip2d data>/family folder (for exmple ~/.i2pd/family).
You should provide these two files to other members joining your family.
If you want to register you family and let I2P network recorgnize it, create pull request for you .crt file into contrib/certificate/family.
It will appear in i2pd and I2P next releases packages. Dont place .key file, it must be shared between you family members only.
How to join existing family
---------------------------
Once you and that family agree to do it, they must give you .key and .crt file and you must place in <i2pd datadir>/certificates/family/ folder.
Publish your family
-------------------
Run i2pd with parameter 'family=<your-family-name>', make sure you have <your-family-name>.key and <your-family-name>.crt in your 'family' folder.
If everything is set properly, you router.info will contain two new fields: 'family' and 'family.sig'.
Otherwise your router will complain on startup with log messages starting with "Family:" prefix and severity 'warn' or 'error'.

57
docs/user-guide/install.md

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
Installing
==========
Building from source
--------------------
See [build documentation](../devs/building/index.md) for how to build
i2pd from source on your OS.
Windows, Android, Mac OS X
--------------------------
The easiest way to install i2pd is by using precompiled binaries.
Go to [latest release page](https://github.com/PurpleI2P/i2pd/releases/latest) and choose a file for your operating system.
Linux x86/x64
-------------
### Docker images
You can use [prebuilt docker image](https://hub.docker.com/r/meeh/i2pd/) by community member [Meeh](https://twitter.com/mikalv).
### Ubuntu
You can install binary packages from [latest release page](https://github.com/PurpleI2P/i2pd/releases/latest).
Alternatively, you can use [PPA repository](https://launchpad.net/~purplei2p/+archive/ubuntu/i2pd) run by community member [R4SAS](https://twitter.com/i2pr4sas).
sudo add-apt-repository ppa:purplei2p/i2pd
sudo apt-get update
sudo apt-get install i2pd
### Debian
Look for Debian packages at [latest release page](https://github.com/PurpleI2P/i2pd/releases/latest).
### ArchLinux
[AUR stable](https://aur.archlinux.org/packages/i2pd/)
[AUR trunk](https://aur.archlinux.org/packages/i2pd-git/)
### Gentoo Linux
[packages](https://packages.gentoo.org/packages/net-misc/i2pd)
FreeBSD
-------
You can install i2pd from [ports](https://www.freshports.org/security/i2pd/).

55
docs/user-guide/run.md

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
Running i2pd
============
Starting, stopping and reloading configuration
----------------------------------------------
This chapter explains how to start and manage i2pd daemon under \*nix operation systems.
After you have built i2pd from source, just run a binary:
./i2pd
To display all available options:
./i2pd --help
i2pd can be controlled with signals. Process ID by default is written to file `~/.i2pd/i2pd.pid` or `/var/run/i2pd/i2pd.pid`.
You can use `kill` utility to send signals like this:
kill -INT $( cat /var/run/i2pd/i2pd.pid )
i2pd supports the following signals:
* INT - Graceful shutdown. i2pd will wait for 10 minutes and stop. Send second INT signal to shutdown i2pd immediately.
* HUP - Reload configuration files.
### systemd unit
Some Linux packages have a systemd control unit, so it is possible to managage i2pd with it.
Start/stop i2pd:
sudo systemctl start i2pd.service
sudo systemctl stop i2pd.service
Enable/disable i2pd to be started on bootup:
sudo systemctl enable i2pd.service
sudo systemctl disable i2pd.service
Recommended way to run i2pd built from source
---------------------------------------------
This way all i2pd-related files will be stored at `$HOME/dist`.
mkdir $HOME/dist
cp i2pd $HOME/dist
cp -R contrib/certificates $HOME/dist
cp docs/i2pd.conf $HOME/dist
cd $HOME/dist
ulimit -n 4096 # only on Linux, increasing open file limit
./i2pd --datadir .

177
docs/user-guide/tunnels.md

@ -0,0 +1,177 @@ @@ -0,0 +1,177 @@
I2P tunnel configuration
========================
Overview
--------
tunnels.conf is designed to support multiple I2P tunnels. Must be located in ``~/.i2pd`` (per-user) or ``/var/lib/i2pd`` (system-wide).
This file uses .ini file format. It consists of multiple sections with unique name each.
Section type is specified by *type* parameter with possible values *client*, *server* or *http*. Each *client* specifies I2P client tunnel and each *server* specifies I2P server tunnel. *http* is special type of server tunnel for eepsites.
Client tunnels
--------------
Mnemonic: we can connect to someone as client
Must contain few mandatory parameters, some optional parameters might be also presented.
Example of client tunnel:
[irc-out]
type = client
address = 127.0.0.1
port = 6668
destination = irc.echelon.i2p
keys = irc.dat
If *keys* is empty, transient keys will be created on every restart. If keys file is not found, new keys will be created and stored into specified file.
Client tunnels might share same local destination, if keys file contains same identity.
Optional parameters:
* address -- local interface tunnel binds to, '127.0.0.1' for connections from local host only, '0.0.0.0' for connections from everywhere. '127.0.0.1' by default.
* signaturetype -- signature type for new keys. 0 (DSA), 1 (ECDSA-P256), 7 (EDDSA). 1 by default
* destinationport -- connect to particular port at destination. 0 by default
So, with example above, if you telnet to 127.0.0.1:6668 on localhost, i2pd will connect to irc.echelon.i2p:6668
Server/generic tunnels
----------------------
Mnemonic: we serving some service to others in network
Example of server tunnel:
[smtp-in]
type = server
host = 127.0.0.1
port = 25
keys = smtp-in.dat
*keys* must be presented, LeaseSet of address from keys file will be published. Server tunnel must use its own local destination.
Optional parameters:
* inport -- what port at local destination server tunnel listens to. Same as *port* by default.
* accesslist -- list of comma-separated of b32 address (without .b32.i2p) allowed to connect. Everybody is allowed by default.
* gzip -- turns internal compression off if set to false. true by default.
* signaturetype -- means signature type for new keys. 0 - DSA, 1- ECDSA-P256, 7 -EDDSA. 1 by default.
* enableuniquelocal -- if true, connection to local address will look like 127.x.x.x where x.x.x is first 3 bytes of incoming connection peer's ident hash. true by default.
Server/http tunnels
-------------------
*http* tunnel works same way as server tunnel, but replace 'Host:' field in HTTP header to address provided in configuration.
Also resolves it if necessary.
Example of http tunnel:
[http-in]
type = http
host = ourwebsite.com
port = 80
keys = our-website.dat
Optional parameters:
* hostoverride -- value to send in 'Host:' header, default: the same as *host* parameter
* gzip -- should we compress contents at i2p level. default: true
Server/IRC tunnels
-------------------
IRC tunnels are supposed to connect to an IRC server through WEBIRC.
It replaces IP address (usually 127.0.0.1) to user's .b32 I2P address.
Optional parameters:
* webircpassword -- password to send with WEBIRC command
UDP Tunnels
-----------
There are 2 types of UDP tunnels: `udpclient` and `udpserver`
`udpclient` forwards 1 local udp endpoint to 1 remote i2p destination
[openvpn-client-simple]
type = udpclient
destination = something.b32.i2p
port = 1194
* destination -- the i2p destination of a udpserver tunnel, required parameter
* address -- ip address to bind local udp endpoint to, defaults to `127.0.0.1`
* port -- port to bind local udp endpoint to, required parameter
`udpserver` forwards traffic from N i2p destinations to 1 local udp endpoint
[openvpn-simple-server]
type = udpserver
keys = openvpn.dat
port = 1194
* address -- ip address to use for local udp endpoints, defaults to `127.0.0.1`
* host -- ip address to forward traffic to, defaults to `127.0.0.1`
* port -- udp port to forward traffic on, required parameter
I2CP parameters
---------------
I2CP parameter are common for all tunnel types and specify setting for a local destination.
* inbound.length -- number of hops of an inbound tunnel. 3 by default; lower value is faster but dangerous
* outbound.length -- number of hops of an outbound tunnel. 3 by default; lower value is faster but dangerous
* inbound.quantity -- number of inbound tunnels. 5 by default
* outbound.quantity -- number of outbound tunnels. 5 by default
* crypto.tagsToSend -- number of ElGamal/AES tags to send. 40 by default; too low value may cause problems with tunnel building
* explicitPeers -- list of comma-separated b64 addresses of peers to use, default: unset
Other examples
--------------
# outgoing tunnel sample, to remote service
# mandatory parameters:
# * type -- always "client"
# * port -- local port to listen to
# * destination -- i2p hostname
# optional parameters (may be omitted)
# * keys -- our identity, if unset, will be generated on every startup,
# if set and file missing, keys will be generated and placed to this file
# * address -- local interface to bind
# * signaturetype -- signature type for new destination. 0 (DSA/SHA1), 1 (EcDSA/SHA256) or 7 (EdDSA/SHA512)
[IRC]
type = client
address = 127.0.0.1
port = 6668
destination = irc.postman.i2p
keys = irc-keys.dat
#
# incoming tunnel sample, for local service
# mandatory parameters:
# * type -- "server" or "http"
# * host -- ip address of our service
# * port -- port of our service
# * keys -- file with LeaseSet of address in i2p
# optional parameters (may be omitted)
# * inport -- optional, i2p service port, if unset - the same as 'port'
# * accesslist -- comma-separated list of i2p addresses, allowed to connect
# every address is b32 without '.b32.i2p' part
[LOCALSITE]
type = http
host = 127.0.0.1
port = 80
keys = site-keys.dat
#
[IRC-SERVER]
type = server
host = 127.0.0.1
port = 6667
keys = irc.dat

51
mkdocs.yml

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
site_name: i2pd documentation
site_url: https://i2pd.readthedocs.io
site_description: i2pd documentation
site_author: PurpleI2P Team
repo_url: https://github.com/PurpleI2P/i2pd_docs_en
site_favicon: media/i2pd-logo.png
pages:
- Home: index.md
- User Guide:
- Installation: user-guide/install.md
- Running: user-guide/run.md
- Configuring: user-guide/configuration.md
- I2P tunnels configuration: user-guide/tunnels.md
- Family configuration: user-guide/family.md
- FAQ: user-guide/FAQ.md
- How-To / Tutorials:
- Anonymous websites: tutorials/http.md
- Anonymous IRC chats: tutorials/irc.md
- Filesharing: tutorials/filesharing.md
- Using RetroShare with i2pd: tutorials/retroshare.md
- Developer Section:
- Building from source:
- Unix: devs/building/unix.md
- Windows: devs/building/windows.md
- Android: devs/building/android.md
- Cross-platform: devs/building/cross.md
- iOS: devs/building/ios.md
- API:
- Choosing API for your project: devs/api/index.md
- SAM: devs/api/SAM.md
- BOB: devs/api/BOB.md
- I2CP: devs/api/I2CP.md
- I2PControl: devs/api/I2PControl.md
- libi2pd: devs/api/libi2pd.md
- Hacking the code: devs/hacking.md
- About:
- Community: about/community.md
- History: about/history.md
- License: about/license.md
- Contributing: about/contributing.md
copyright: <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA 4.0</a>, Maintained by the PuprleI2P team
theme: readthedocs
markdown_extensions:
- toc:
permalink:
Loading…
Cancel
Save