I2P Network
I2P is an anonymizing network, offering a simple layer that identity-sensitive applications can use to securely communicate. All data is wrapped with several layers of encryption, and the network is both distributed and dynamic, with no trusted parties. Many applications are available that interface with I2P, including mail, peer-peer, IRC chat, and others. Anonymous Torrenting via i2psnark is also possible.
Usage
Install i2pd
(deamon written in C++) and enable the service. Router Interface is at 127.0.0.1:7070
with HTTP Proxy at 127.0.0.1:4444
Configuration
There are two separate config files: i2pd.conf
and tunnels.conf
. i2pd.conf
is the main configuration file, where you configure all options. tunnels.conf
is the tunnel configuration file, where you configure I2P hidden services and client tunnels.
Example i2pd.conf
:
logfile = /var/log/i2pd/i2pd.log
ipv4 = true
ipv6 = false
ssu = true
bandwidth = X
[ssu2]
enabled = true
published = true
[http]
enabled = true
address = 0.0.0.0
port = 7070
auth = true
user = i2pd
pass = pass
strictheaders = false
lang = english
[httpproxy]
address = 0.0.0.0
port = 4444
# StormyCloud
#outproxy = http://5d4s7pcvfdpftfk7npc7hllyujhufsdprtrf4o53i44rgsa2xbwa.b32.i2p
# Purokishi
outproxy = http://purokishi.i2p
[socksproxy]
address = 0.0.0.0
port = 4447
[sam]
enabled = true
address = 127.0.0.1
port = 7656
[i2cp]
enabled = true
address = 0.0.0.0
port = 7654
[reseed]
verify = true
[addressbook]
subscriptions = http://reg.i2p/hosts.txt,http://identiguy.i2p/hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt,http://rus.i2p/hosts.txt
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 (default: i2pd.pid, not used in Windows)
log
Logs destination: stdout, file, syslog (stdout if not set or invalid) (if daemon, stdout/unspecified are replaced by file in some cases)
logfile
Path to logfile (default - autodetect)
loglevel
Log messages above this level (debug, info, warn, error, none; default - warn)
logclftime
Write full CLF-formatted date and time to log (default: false (write only time))
datadir
Path to storage of i2pd data (RouterInfos, destinations keys, peer profiles, etc ...)
host
Router external IP for incoming connections (default: auto if SSU2 is enabled)
port
Port to listen for incoming connections (default: auto (random))
daemon
Router will go to background after start (default: true)
service
Router will use system folders like '/var/lib/i2pd' (on unix) or 'C:\ProgramData\i2pd' (on Windows). Ignored on MacOS and Android (default: false)
ifname
Network interface to bind to
ifname4
Network interface to bind to for IPv4
ifname6
Network interface to bind to for IPv6
address4
Local address to bind to for IPv4
address6
Local address to bind to for clearnet IPv6
nat
If true, assume we are behind NAT (default: true)
ipv4
Enable communication through IPv4 (default: true)
ipv6
Enable communication through clearnet IPv6 (default: false)
notransit
Router will not accept transit tunnels, disabling transit traffic completely. G router cap will be published (default: false)
floodfill
Router will be floodfill (default: false)
bandwidth
Bandwidth limit: integer in KBps or letters: L (32), O (256), P (2048), X (unlimited).
share
Max % of bandwidth limit for transit. 0-100 (default: 100)
family
Name of a family, router belongs to
netid
Network ID, router belongs to. Main I2P is 2.
NTCP2
Option
Description
ntcp2.enabled
Enable NTCP2 (default: true)
ntcp2.published
Enable incoming NTCP2 connections (default: true)
ntcp2.port
Port to listen for incoming NTCP2 connections (default: auto - port from general section)
ntcp2.addressv6
External IPv6 for incoming connections
ntcp2.proxy
Specify proxy server for NTCP2. Should be http://address:port or socks://address:port
SSU2
Option
Description
ssu2.enabled
Enable SSU2 (default: true)
ssu2.published
Enable incoming SSU2 connections. (default: true)
ssu2.port
Port to listen for incoming SSU2 connections (default: auto - 'port' from general section)
ssu2.proxy
Specify UDP socks5 proxy server for NTCP2. Should be socks://address:port
ssu2.mtu4
MTU for local ipv4. (default: auto)
ssu2.mtu6
MTU for local ipv6. (default: auto)
HTTP webconsole
Option
Description
http.enabled
If webconsole is enabled. (default: true)
http.address
The address to listen on (HTTP server)
http.port
The port to listen on (HTTP server) (default: 7070)
http.auth
Enable basic HTTP auth for webconsole (default: false)
http.user
Username for basic auth (default: i2pd)
http.pass
Password for basic auth (default: random, see logs)
http.strictheaders
Enable strict host checking on WebUI. (default: true)
http.hostname
Expected hostname for WebUI (default: localhost)
HTTP Proxy
Option
Description
httpproxy.enabled
If HTTP proxy is enabled. (default: true)
httpproxy.address
The address to listen on (HTTP Proxy)
httpproxy.port
The port to listen on (HTTP Proxy) (default: 4444)
httpproxy.addresshelper
Enable address helper (jump). (default: true)
httpproxy.keys
Optional keys file for HTTP proxy local destination
httpproxy.signaturetype
Signature type for new keys if keys file is set. (default: 7)
httpproxy.inbound.length
Inbound tunnels length if keys is set. (default: 3)
httpproxy.inbound.quantity
Inbound tunnels quantity if keys is set. (default: 5)
httpproxy.inbound.lengthVariance
Inbound tunnels length variance if keys is set. (default: 0)
httpproxy.outbound.length
Outbound tunnels length if keys is set. (default: 3)
httpproxy.outbound.quantity
Outbound tunnels quantity if keys is set. (default: 5)
httpproxy.outbound.lengthVariance
Outbound tunnels length variance if keys is set. (default: 0)
httpproxy.outproxy
HTTP proxy upstream out proxy url (like http://false.i2p )
httpproxy.i2cp.leaseSetType
Type of LeaseSet to be sent. 1, 3 or 5. (default: 3)
httpproxy.i2cp.leaseSetEncType
Comma separated encryption types to be used in LeaseSet type 3 or 5
Socks proxy
Option
Description
socksproxy.enabled
If SOCKS proxy is enabled. (default: true)
socksproxy.address
The address to listen on (SOCKS Proxy)
socksproxy.port
The port to listen on (SOCKS Proxy). (default: 4447)
socksproxy.keys
Optional keys file for SOCKS proxy local destination
socksproxy.signaturetype
Signature type for new keys if keys file is set. (default: 7)
socksproxy.inbound.length
Inbound tunnels length if keys is set. (default: 3)
socksproxy.inbound.quantity
Inbound tunnels quantity if keys is set. (default: 5)
socksproxy.inbound.lengthVariance
Inbound tunnels length variance if keys is set. (default: 0)
socksproxy.outbound.length
Outbound tunnels length if keys is set. (default: 3)
socksproxy.outbound.quantity
Outbound tunnels quantity if keys is set. (default: 5)
socksproxy.outbound.lengthVariance
Outbound tunnels length variance if keys is set. (default: 0)
socksproxy.outproxy.enabled
Enable or disable SOCKS outproxy. (default: false)
socksproxy.outproxy
Address of outproxy. Requests outside I2P will go there.
socksproxy.outproxyport
Outproxy remote port
socksproxy.i2cp.leaseSetType
Type of LeaseSet to be sent. 1, 3 or 5. (default: 3)
socksproxy.i2cp.leaseSetEncType
Comma separated encryption types to be used in LeaseSet type 3 or 5
SAM interface
Option
Description
sam.enabled
If SAM is enabled. (default: true)
sam.address
The address to listen on (SAM bridge)
sam.port
Port of SAM bridge. Usually 7656. SAM is off if not specified
sam.singlethread
If false every SAM session runs in own thread. (default: true)
BOB interface
Option
Description
bob.enabled
If BOB is enabled. (default: false)
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
I2CP interface
Option
Description
i2cp.enabled
If I2CP is enabled. (default: true)
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.singlethread
If false every I2CP session runs in own thread. (default: true)
I2PControl interface
Option
Description
i2pcontrol.enabled
If I2P control is enabled. (default: false)
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.password
I2P control authentication password. (default: itoopie)
i2pcontrol.cert
I2P control HTTPS certificate file name. (default: i2pcontrol.crt.pem)
i2pcontrol.key
I2P control HTTPS certificate key file name. (default: i2pcontrol.key.pem)
Reseeding
Option
Description
reseed.verify
Verify .su3 signature. (default: false)
reseed.urls
Reseed URLs, separated by comma
reseed.yggurls
Reseed Yggdrasil's URLs, separated by comma
reseed.file
Path to local .su3 file or HTTPS URL to reseed from
reseed.zipfile
Path to local .zip file to reseed from
reseed.threshold
Minimum number of known routers before requesting reseed. (default: 25)
reseed.proxy
Url for https/socks reseed proxy
Addressbook options
Option
Description
addressbook.defaulturl
AddressBook subscription URL. Only used to initialize the AddressBook.
addressbook.subscriptions
AddressBook subscriptions URLs, separated by comma. Note that defaulturl is not added to subscriptions URLs
addressbook.hostsfile
File to dump AddressesBook in hosts.txt format
Trust options
Option
Description
trust.enabled
Enable explicit trust options. (default: false)
trust.family
Make direct I2P connections only to routers in specified Family.
trust.routers
Make direct I2P connections only to routers specified here. Comma separated list of base64 identities.
trust.hidden
Should we hide our router from other routers? (default: false)
Exploratory tunnels
Option
Description
exploratory.inbound.length
Exploratory inbound tunnels length. (default: 2)
exploratory.inbound.quantity
Exploratory inbound tunnels quantity. (default: 3)
exploratory.outbound.length
Exploratory outbound tunnels length. (default: 2)
exploratory.outbound.quantity
Exploratory outbound tunnels quantity. (default: 3)
Tunnel Configuration
Available tunnel types:
Type
Description
client
Client tunnel to remote I2P destination (TCP )
server
Generic server tunnel to setup any TCP service in I2P network
http
HTTP server tunnel to setup a website in I2P
Client Tunnel
[irc-out]
type = client
address = 127.0.0.1
port = 6668
destination = irc.ilita.i2p
keys = irc.dat
Optional parameters
Option
Description
address
Local interface tunnel binds to, '127.0.0.1' for connections from local host only, '0.0.0.0' for connections from everywhere. (default: 127.0.0.1)
port
Port of client tunnel.
signaturetype
Signature type for new keys. RSA signatures (4,5,6) are not allowed and will be changed to 7. (default: 7)
cryptotype
Crypto type for new keys. Experimental. Should be always 0
destinationport
Connect to particular port at destination. 0 by default (targeting first tunnel on server side for destination)
keepaliveinterval
Send ping to the destination after this interval in seconds. (default: 0 - no pings)
keys
Keys for destination. When same for several tunnels, will be using same destination for every tunnel.
Server Tunnel
[smtp-in]
type = server
host = 127.0.0.1
port = 25
keys = smtp-in.dat
Optional parameters
Option
Description
host
IP address of server (on this address i2pd will send data from I2P)
port
Port of server tunnel.
inport
(non-TCP non-UDP ) I2P local destination port to listen to; an unsigned 16-bit integer. What port at local destination server tunnel listens to (default: same as port )
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. (default: false)
signaturetype
Signature type for new keys. (default: 7)
cryptotype
Crypto type for new keys. Experimental. Should be always 0
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. (default: true)
address
IP address of an interface tunnel is connected to host from. Usually not used
keys
Keys for destination. When same for several tunnels, will be using same destination for every tunnel.
HTTP Tunnel
[http-in]
type = http
host = 127.0.0.1
port = 80
keys = our-website.dat
Tools
There are several tools available here .
keygen
Generate an I2P private key.
Usage
Make a EDDSA-SHA512-ED25519 destination key
./keygen privkey.dat
Make an destination key with a certain key type
./keygen privkey.dat <number>
./keygen privkey.dat <key name>
key name
number
DSA-SHA1
0
ECDSA-SHA256-P256
1
ECDSA-SHA384-P384
2
ECDSA-SHA512-P521
3
RSA-SHA256-2048
4
RSA-SHA384-3072
5
RSA-SHA512-4096
6
EDDSA-SHA512-ED25519
7
GOSTR3410_CRYPTO_PRO_A-GOSTR3411-256
9
GOSTR3410_TC26_A_512-GOSTR3411-512
10
RED25519-SHA512
11
vain
Vanity generation address.
Time to Generate on a 2.70GHz Processor:
characters
time to generate (approx.)
1
~0.082s
2
~0.075s
3
~0.100s
4
~0.394s
5
~6.343s
6
~1m-5m
7
~30m
Usage
./vain pattern [ options]
Options
Option
Description
-r, --reg
regex instead of text pattern
-t, --threads
Use this many threads (default all)
-o, --output output_file
Output file
-m, --multiplymode
multiple addresses search
keyinfo
Prints information about an I2P private key
Usage
Print just the b32 address for this key
./keyinfo privatekey.dat
... just the base64 address
./keyinfo -d privatekey.dat
Print all info about the public key
./keyinfo -v privatekey.dat