Эта страница была обновлена 2023-10 и содержит сведения для версии маршрутизатора 0.9.59.

Обзор

I2PTunnel - это инструмент для взаимодействия и предоставления услуг по протоколу I2P. Назначение I2PTunnel может быть определено с помощью hostname, Base32, или полного 516-байтного ключа назначения. Установленный I2PT-туннель будет доступен на вашей клиентской машине как localhost:port. Если вы хотите предоставить услугу в сети I2P, вы просто создаете I2PTunnel для соответствующего ip_address:port. Будет сгенерирован соответствующий 516-байтный ключ назначения, и он станет доступен в I2P. Веб-интерфейс для управления I2PT-туннелем доступен по адресу localhost:7657/i2ptunnel/.

Службы по умолчанию

Серверные туннели

  • I2P Webserver - Туннель, указывающий на веб-сервер Jetty, запущенный на localhost:7658 для удобного и быстрого хостинга на I2P.
    Корень документа:
    Unix - $HOME/.i2p/eepsite/docroot
    Windows - %LOCALAPPDATA%\I2P\I2P Site\docroot, which expands to: C:\Users\**username**\AppData\Local\I2P\I2P Site\docroot

Клиентские туннели

  • I2P HTTP Proxy - localhost:4444 - HTTP-прокси, используемый для анонимного просмотра I2P и обычного интернета через I2P. Для просмотра Интернета через I2P используется случайный прокси, заданный параметром "Outproxies:".
  • Irc2P - localhost:6668 - IRC туннель к сети IRC по умолчанию, Irc2P
  • gitssh.idk.i2p - localhost:7670 - SSH access to the project Git repository
  • smtp.postman.i2p - localhost:7659 - SMTP сервис предоставляется postman-ом, подробнее на странице hq.postman.i2p.xyz
  • pop3.postman.i2p - localhost:7660 - Совместная служба POP также предоставляется postman-ом, см. также hq.postman.i2p.xyz

Конфигурация

Настройки I2PTunnel

Режимы работы клиента

Стандартный

Открывает локальный TCP-порт, который соединяется с сервисом (например, HTTP, FTP или SMTP) в пункте назначения внутри I2P. Туннель направляется на случайный хост из списка пунктов назначения, разделенных запятыми (", ").

HTTP

Туннель для HTTP-клиента. Туннель подключается к месту назначения, указанному URL в HTTP-запросе. Поддерживает проксирование в интернет, если предоставлен outproxy. Удаляет из HTTP-соединений следующие заголовки:

  • Accept*: (not including "Accept" and "Accept-Encoding") as they vary greatly between browsers and can be used as an identifier.
  • Referer:
  • Via:
  • From:

The HTTP client proxy provides a number of services to protect the user and to provide a better user experience.

  • Request header processing:
    • Strip privacy-problematic headers
    • Routing to local or remote outproxy
    • Outproxy selection, caching, and reachability tracking
    • Hostname to destination lookups
    • Host header replacement to b32
    • Add header to indicate support for transparent decompression
    • Force connection: close
    • RFC-compliant proxy support
    • RFC-compliant hop-by-hop header processing and stripping
    • Optional digest and basic username/password authentication
    • Optional outproxy digest and basic username/password authentication
    • Buffering of all headers before passing through for efficiency
    • Jump server links
    • Jump response processing and forms (address helper)
    • Blinded b32 processing and credential forms
    • Supports standard HTTP and HTTPS (CONNECT) requests
  • Response header processing:
    • Check for whether to decompress response
    • Force connection: close
    • RFC-compliant hop-by-hop header processing and stripping
    • Buffering of all headers before passing through for efficiency
  • HTTP error responses:
    • For many common and not-so-common errors, so the user knows what happened
    • Over 20 unique translated, styled, and formatted error pages for various errors
    • Internal web server to serve forms, CSS, images, and errors

Transparent Response Compression

The i2ptunnel response compression is requested with the HTTP header:

  • X-Accept-Encoding: x-i2p-gzip;q=1.0, identity;q=0.5, deflate;q=0, gzip;q=0, *;q=0

The server side strips this hop-by-hop header before sending the request to the web server. The elaborate header with all the q values is not necessary; servers should just look for "x-i2p-gzip" anywhere in the header.

The server side determines whether to compress the response based on the headers received from the webserver, including Content-Type, Content-Length, and Content-Encoding, to assess if the response is compressible and is worth the additional CPU required. If the server side compresses the response, it adds the following HTTP header:

  • Content-Encoding: x-i2p-gzip

If this header is present in the response, the HTTP client proxy transparently decompresses it. The client side strips this header and gunzips before sending the response to the browser. Note that we still have the underlying gzip compression at the I2CP layer, which is still effective if the response is not compressed at the HTTP layer.

This design and the current implementation violate RFC 2616 in several ways:

  • X-Accept-Encoding is not a standard header
  • Does not dechunk/chunk per-hop; it passes through chunking end-to-end
  • Passes Transfer-Encoding header through end-to-end
  • Uses Content-Encoding, not Transfer-Encoding, to specify the per-hop encoding
  • Prohibits x-i2p gzipping when Content-Encoding is set (but we probably don't want to do that anyway)
  • The server side gzips the server-sent chunking, rather than doing dechunk-gzip-rechunk and dechunk-gunzip-rechunk
  • The gzipped content is not chunked afterwards. RFC 2616 requires that all Transfer-Encoding other than "identity" is chunked.
  • Because there is no chunking outside (after) the gzip, it is more difficult to find the end of the data, making any implementation of keepalive harder.
  • RFC 2616 says Content-Length must not be sent if Transfer-Encoding is present, but we do. The spec says ignore Content-Length if Transfer-Encoding is present, which the browsers do, so it works for us.

Changes to implement a standards-compliant hop-by-hop compression in a backward-compatible manner are a topic for further study. Any change to dechunk-gzip-rechunk would require a new encoding type, perhaps x-i2p-gzchunked. This would be identical to Transfer-Encoding: gzip, but would have to be signalled differently for compatibility reasons. Any change would require a formal proposal.

Transparent Request Compression

Not supported, although POST would benefit. Note that we still have the underlying gzip compression at the I2CP layer.

Persistence

The client and server proxies do not currently support RFC 2616 HTTP persistent sockets on any of the three hops (browser socket, I2P socket, server socket). Connection: close headers are injected at every hop. Changes to implement a persistence are under investigation. These changes should be standards-complaint and backwards-compatible, and would not require a formal proposal.

Pipelining

The client and server proxies do not currently support RFC 2616 HTTP pipelining and there are no plans to do so. Modern browswers do not support pipelining through proxies because most proxies cannot implement it correctly.

Compatibility

Proxy implementations must work correctly with other implementations on the other side. Client proxies should work without a HTTP-aware server proxy (i.e. a standard tunnel) on the server side. Not all implementations support x-i2p-gzip.

User Agent

В зависимости от того, использует ли туннель outproxy или нет, он будет добавлять следующий User-Agent:

  • Внешний прокси: User-Agent: Uses the user agent from a recent Firefox release on Windows
  • Внутреннее использование I2P: User-Agent: MYOB/6.66 (AN/ON)

IRC Client

Создает соединение со случайным IRC-сервером, указанным через запятую (", ") списоком пунктов назначения. Из соображений анонимности разрешено использовать только подмножество IRC-команд, внесенных в белый список. The following allow list is for commands inbound from the IRC server to the IRC client.
Allow list:

  • AUTHENTICATE
  • CAP
  • ERROR
  • H
  • JOIN
  • KICK
  • MODE
  • NICK
  • PART
  • PING
  • PROTOCTL
  • QUIT
  • TOPIC
  • WALLOPS

There is also an allow list is for commands outbound from the IRC client to the IRC server. It is quite large due to the number of IRC administrative commands. See the IRCFilter.java source for details. The outbound filter also modifies the following commands to strip identifying information:

  • NOTICE
  • PART
  • PING
  • PRIVMSG
  • QUIT
  • USER

SOCKS 4/4a/5

Разрешает использование I2P-маршрутизатора в качестве SOCKS-прокси.

SOCKS IRC

Позволяет использование маршрутизатора I2P в качестве SOCKS-прокси с белым списком команд, заданным в режиме клиента IRC1.

CONNECT

Создает HTTP-туннель и использует метод HTTP-запроса "CONNECT" для создания TCP-туннеля, который обычно используется для SSL и HTTPS.

Streamr

Создает UDP-сервер, подключенный к I2PT-туннелю клиента Streamr. Туннель клиента Streamr будет подписываться на туннель сервера Streamr.


Режимы работы сервера

Стандартный

Создает пункт назначения на локальный ip:port с открытым TCP-портом.

HTTP

Создает направление на локальный HTTP-сервер ip:port. Поддерживает gzip для запросов с Accept-encoding: x-i2p-gzip, отвечает на такой запрос с Content-encoding: x-i2p-gzip.

The HTTP server proxy provides a number of services to make hosting a website easier and more secure, and to provide a better user experience on the client side.

  • Request header processing:
    • Header validation
    • Header spoof protection
    • Header size checks
    • Optional inproxy and user-agent rejection
    • Add X-I2P headers so the webserver knows where the request came from
    • Host header replacement to make webserver vhosts easier
    • Force connection: close
    • RFC-compliant hop-by-hop header processing and stripping
    • Buffering of all headers before passing through for efficiency
  • DDoS protection:
    • POST throttling
    • Timeouts and slowloris protection
    • Additional throttling happens in streaming for all tunnel types
  • Response header processing:
    • Stripping of some privacy-problematic headers
    • Mime type and other headers check for whether to compress response
    • Force connection: close
    • RFC-compliant hop-by-hop header processing and stripping
    • Buffering of all headers before passing through for efficiency
  • HTTP error responses:
    • For many common and not-so-common errors and on throttling, so the client-side user knows what happened
  • Transparent response compression:
    • The web server and/or the I2CP layer may compress, but the web server often does not, and it's most efficient to compress at a high layer, even if I2CP also compresses. The HTTP server proxy works cooperatively with the client-side proxy to transparently compress responses.

HTTP Bidirectional

Deprecated

Функционирует как I2PTunnel HTTP Server, так и I2PTunnel HTTP клиент без возможности аутпроксирования. Как пример можно привести веб-приложение, выполняющее запросы клиентского типа или тестирование сайта I2P в качестве диагностического инструмента.

IRC Server

Создает пункт назначения, который фильтрует последовательность регистрации клиента и передает ключ назначения клиента в качестве имени хоста на IRC-сервер.

Streamr

Создан UDP-клиент, который подключается к медиа-серверу. UDP-клиент соединен с I2PTunnel сервера Streamr.