В этой инструкции я постараюсь пошагово рассказать, как можно подготовить универсальный сервер выхода в оверлейные сети с разных устройств, в том числе и мобильных. Постановка задачи: нужен сервер, который обеспечил бы выход в сети TOR, I2P, и freenet с разных устройств, одновременно и универсальным способом. Общий план решения: на сервере запущены в фоне tor, i2pd, freenet, и openvpn. Доступ к серверу осуществляется с помощью openvpn, так как это наиболее универсальное и удобное решение как для клиентской части - поддерживаются нормально windows, linux и android - так и для серверой части - позволяет поднять шифрованный транспорт и туннельный интерфейс, который могут “прос лушивать” демоны оверлейных сетей. Если представить это схематично, то выглядит примерно так:

overlay gateway


1. Подготовка сервера
2. Установка и настройка TOR
3. Установка и настройка I2P
4. Установка и настройка Freenet
5. Послесловие
6. Книга жалоб и предложений

1. Подготовка сервера

Для начала, очевидно, нужно найти сервер. Самое главное - чтобы у машины был внешний статический IP. Я его снимаю у провайдера, но самый простой вариант, который подходит всем - снять VDS. Больших мощностей для выполнения задачи не нужно, так что, на мой взгляд, оптимальный вариант, это VDS на Arubacloud. Самый простой - за 1 евро в месяц. 1 ядра, 1 ГБ ОЗУ и 20 ГБ дискового пространства должно вполне хватить. С оплатой на Arubacloud у меня проблем не возникло, в отличае от, например, Digital Ocean, где есть варианты только кредитная карта (не дебетовая) и paypal. Не буду распыляться тут по поводу покупки, так что представим, что сервер у вас есть. Да, насчет ОС - я буду показывать на примере Ubuntu Server 16.04, но думаю с другими дистрибутивами проблем возникнуть не должно.

Итак, заходим на сервер по ssh. Первым делом обновим систему, установим openvpn и easy-rsa. Последнее нужно для генерации ключей и сертификатов. В конце перезагрузимся.

apt update
apt upgrade
apt install openvpn easy-rsa
reboot

Перезаходим на сервер. Заходим в папку конфигурации OpenVPN, создаем внутри папку easy-rsa, и копируем туда подготовленные скрипты. А также сразу сделаем отдельную директорию для файлов конфигурации демона OpenVPN. Сразу замечу, что демонов OpenVPN можно запускать несколько и раздельно, создавая таким разные точки входа и site-to-site тоннели с разной конфигурацией.

cd /etc/openvpn/
mkdir ./easy-rsa
cp /usr/share/easy-rsa/* ./easy-rsa/
mkdir ./overlay-node
mkdir ./overlay-node/keys

Откроем файл с переменными vars и заполним несколько параметров вместо дефолтовых.

export KEY_DIR="/etc/openvpn/overlay-node/keys"
export KEY_COUNTRY="AQ"
export KEY_PROVINCE="AQ"
export KEY_CITY="McMurdo"
export KEY_ORG="Freezy"
export KEY_EMAIL="penguin@example.aq"
export KEY_OU="Freezy"

Первая строка указывает, куда будет производится сохранение генерируемых ключей. Все последние строки - данные для самовыписываемых сертификатов, можете заполнить как хотите (в рамках формата). Также можете поменять параметры:

export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650

Первый - размер ключа, второй - срок действия сертификата УЦ (10 лет), третий - срок действия закрытого ключа (10 лет). В целом, дефолтных вполне хватает, так что оставим как есть. Переходим в папку со скриптами, “подбираем” переменные из файла и делаем контрольную очистку ключей (хотя их еще и нет):

cd ./easy-rsa/
source ./vars
./clean-all

Генерируем сертификат УЦ (удостоверяющего центра):

# ./build-ca
Generating a 2048 bit RSA private key
< пропущено >
Country Name (2 letter code) [AQ]: <ENTER>
State or Province Name (full name) [AQ]: <ENTER>
Locality Name (eg, city) [McMurdo]: <ENTER>
Organization Name (eg, company) [Freezy]: <ENTER>
Organizational Unit Name (eg, section) [Freezy]: <ENTER>
Common Name (eg, your name or your server's hostname) [Freezy CA]: <ENTER>
Name [EasyRSA]: <ENTER>
Email Address [penguin@example.aq]: <ENTER>

Генерируем ключ нашего сервера - узла связи:

# ./build-key-server overlay-node
Generating a 2048 bit RSA private key
< пропущено >
Country Name (2 letter code) [AQ]: <ENTER>
State or Province Name (full name) [AQ]: <ENTER>
Locality Name (eg, city) [McMurdo]: <ENTER>
Organization Name (eg, company) [Freezy]: <ENTER>
Organizational Unit Name (eg, section) [Freezy]: <ENTER>
Common Name (eg, your name or your server's hostname) [overlay-node]: <ENTER>
Name [EasyRSA]: <ENTER>
Email Address [penguin@example.aq]: <ENTER>
< пропущено >
A challenge password []: <ENTER>
An optional company name []: <ENTER>
< пропущено >
Certificate is to be certified until Sep 11 20:17:23 2028 GMT (3650 days)
Sign the certificate? [y/n]: <y>
1 out of 1 certificate requests certified, commit? [y/n] <y>

Генерируем ключ для алгоритма Деффи-Хеллмана:

# ./build-dh

И пока что с генерацией ключей закончили. Сделаем, собственно, конфиг туннельного интерфейса OpenVPN:

cd /etc/openvpn/
vim overlay-node.conf

Разрешаю подсмотреть у меня:

dev tun-overnode
proto udp

tun-mtu 1300
mssfix 1220
port 56565

ca /etc/openvpn/overlay-node/keys/ca.crt
cert /etc/openvpn/overlay-node/keys/overlay-node.crt
key /etc/openvpn/overlay-node/keys/overlay-node.key
dh /etc/openvpn/overlay-node/keys/dh2048.pem

topology subnet
server 10.65.65.0 255.255.255.224

cipher AES-128-CBC
comp-lzo

persist-key
persist-tun

keepalive 10 120
verb 3
status /var/log/openvpn/status_server.log
log-append /var/log/openvpn/openvpn_server.log

По некоторым пунктам:
dev tun-overnode - название туннельного интерфейса;
proto udp - используемый протокол туннилирования. Можно сделать и TCP-тоннель, если есть сложности с прохождением UDP-трафика или подключение к Интернету происходит через прокси;
port 56565 - используемый порт для туннельного трафика;
topology subnet; server 10.65.65.0 255.255.255.224 - топология и туннельная подсеть. Топология тут - hub-and-spoke. Главное, чтобы подсеть не пересекалась с вашей реальностью подсетью клиентского устройства, например домашней. Можно ниже добавить настройку client-to-client, чтобы дать возможность пересылать пакеты через сервер между подключенными клиентскими устройствами;
cipher AES-128-CBC; comp-lzo - используемый алгоритм шифрования и включение поточного сжатия;
status /var/log/openvpn/status_server.log и log-append /var/log/openvpn/openvpn_server.log - файлы, куда демон OpenVPN будет записывать статус сервера и логи. Лучше сразу эти файлы создать:

mkdir /var/log/openvpn/
touch /var/log/openvpn/status_server.log
touch /var/log/openvpn/openvpn_server.log

Собственно, с настройкой сервера все. После ребута конфиг должен подтянуться в автозагрузку и вы увидите по команде ip addr новый интерфейс:

5: tun-overnode: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1300 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.65.65.1/27 brd 10.65.65.31 scope global tun-overnode
       valid_lft forever preferred_lft forever

Теперь сделаем сертификат клиента и конфиг. Вернемся в папку со скриптами генерации cd /etc/openvpn/easy-rsa/ и сделаем сертификат первого клиента:

# source vars
# ./build-key client1
Generating a 2048 bit RSA private key
< пропущено >
Country Name (2 letter code) [AQ]: <ENTER>
State or Province Name (full name) [AQ]: <ENTER>
Locality Name (eg, city) [McMurdo]: <ENTER>
Organization Name (eg, company) [Freezy]: <ENTER>
Organizational Unit Name (eg, section) [Freezy]: <ENTER>
Common Name (eg, your name or your server's hostname) [client1]: <ENTER>
Name [EasyRSA]: <ENTER>
Email Address [penguin@example.aq]: <ENTER>
< пропущено >
A challenge password []: <ENTER>
An optional company name []: <ENTER>
Sign the certificate? [y/n]: <y>
1 out of 1 certificate requests certified, commit? [y/n] <y>

Сохраняются данные клиента в папке /etc/openvpn/overlay-node/keys/:

ll /etc/openvpn/overlay-node/keys
< пропущено >
-rw-r--r-- 1 root root 5408 Sep 14 23:14 client1.crt
-rw-r--r-- 1 root root 1066 Sep 14 23:14 client1.csr
-rw------- 1 root root 1704 Sep 14 23:14 client1.key

Делаем уже конфиг клиента. Обратите внимание на расширение файла конфига - .ovpn:

# cd /etc/openvpn/overlay-node
# vim ./overnode-client1.ovpn
client
dev tun
proto udp

tun-mtu 1300
mssfix 1220

remote <внешний IP-адрес сервера> 56565

ca ca.crt
cert client1.crt
key client1.key

cipher AES-128-CBC
nobind
comp-lzo

persist-key
persist-tun
verb 3

Соответственно, для клиента нам нужно выкачать с сервера 4 файла:

  1. overnode-client1.ovpn - конфиг для клиента, который только что создали;
  2. ca.crt - сертификат УЦ;
  3. client1.crt - сертификат клиента;
  4. client1.key - ключ клиента;

Замечу, что для других устройств лучше генерировать отдельный клиентский сертификат, как описано выше. Для скачивания клиентских данных с сервера на локальную машину можно воспользоваться, например, scp. Для windows можно воспользоваться WinSCP, что и сделаем. Запакуем все нужные файлы в архив:

# mkdir /root/overnode-cl1
# cp /etc/openvpn/overlay-node/overnode-client1.ovpn /root/overnode-cl1/
# cp /etc/openvpn/overlay-node/keys/ca.crt /root/overnode-cl1/
# cp /etc/openvpn/overlay-node/keys/client1.crt /root/overnode-cl1/
# cp /etc/openvpn/overlay-node/keys/client1.key /root/overnode-cl1/
# zip -r /root/overnode-cl1.zip /root/overnode-cl1

На windows устанавливаем WinSCP и OpenVPN. Замечу, что при установке OpenVPN лучше снять галочку “OpenVPN Service” - это установка службы, и в целом нужна только есть если хотите запустить OpenVPN-сервер на Windows:

OpenVPN install

С помощью WinSCP подключаемся к серверу и скачиваем креды для подключения по OpenVPN. Протокол передачи - SCP, имя хоста - IP-адрес, логин/пароль от ssh:

WinSCP connect

Скачиваем файлы нажатием кнопки “получить”. Лучше, чтобы режим передачи был выставлен двоичный, выставите его если по умолчанию стоит текстовый:

OpenVPN install

OpenVPN install

Далее запускем один раз OpenVPN без какого-либо конфига - он ругнется, но создаст папку C:\Users\<user>\OpenVPN\, куда нужно будет положить конфиг. Распаковываем скаченные файлы (можно было и просто скачать их по отдельности, не архивируя), кладем их в папку C:\Users\<user>\OpenVPN\config. Должно быть как так:

OpenVPN config

Далее запускаем OpenVPN, нажимаем “Подключиться”. После подключения проверяем, что наш сервер через тоннель пингуется по адресу 10.65.65.1, можно даже зайти по ssh через тоннель по этому адресу:

OpenVPN config

OpenVPN config

OpenVPN config

На андройд процедура следущая. Перед этим напомню, что для другого устройста лучше сгенерировать отдельный сертификат и подправить соответственно конфиг (указать другие файлы в ca, cert, key). Закидывайте нужные для клиента файлы на устройство, скачивайте и устанавливаете OpenVPN, например, из GooglePlay. После установки открываем OpenVPN, нажимаем + (добавить профиль):

android OpenVPN config

Далее выбираем папку с файлами, находим файл конфига, выбираем его, нажимаем “Import”:

android OpenVPN config

Далее нам предложат как-нибудь назвать профиль, вводим его имя, после чего на созданном профиле нажимаем тумблер подключния - и все, мы должны быть подключены к нашему серверу через OpenVPN:

android OpenVPN config

2. Установка и настройка TOR

В целом, по установке TOR будем идти по инструкции с сайта Tor Project. Добавляем репозиторий The Tor Project в sources.list, импортируем ключи, обновляем списки и устанавливаем TOR:

# echo "deb https://deb.torproject.org/torproject.org xenial main" >> /etc/apt/sources.list
# apt install gnupg2
# gpg2 --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
# gpg2 --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
# apt update
# apt install tor deb.torproject.org-keyring

Открываем /etc/tor/torrc и задаем настройки. Многие строки с примерами закомментированы, так что можно их просто раскомментировать и задать свои значения.

SocksPort 10.65.65.1:9050 # Прокси для выхода в TOR будет прослушивать только тоннельный интерфейс
SocksPolicy accept 10.65.65.0/27 # Разрешаем подключение к прокси только из тоннельной сети
SocksPolicy reject * # Запрещаем все остальные подключения
SocksPolicy reject6 * # Запрещаем все IPv6 подключения
Log notice file /var/log/tor/notices.log # Файл, куда пишутся логи
RunAsDaemon 1 # Разрешам запускать в фоне, как сервис

Для обладателей домашних серверов замечу, что SocksPort можно задать еще один, например повесить интерфейс, который “смотрит” в вашу домашнюю локальную сеть. Соответственно, нужно будет еще и дополнить SocksPolicy и разрешить соединения из локальной сети. Итак, настройки заданы, файл сохраняем, перезапускаем службу Tor и проверяем, прослушивается ли порт:

# service tor restart
# ss -tlpn
State      Recv-Q Send-Q  Local Address:Port   Peer Address:Port              
LISTEN     0      128     10.65.65.1:9050      *:*                   users:(("tor",pid=9074,fd=6))

Видим, что TORом у нас прослушивается только адрес туннельного интерфейса tun-overnode, значит он работает и не слушает физические интерфейсы. Теперь можно и проверить, работает ли TOR через тоннель. Снова подключаемся к серверу с помощью OpenVPN, открываем tor browser. Заходим в настройки браузера (preferences), открываем настройки прокси (Network Proxy) и меняем прокси с 127.0.0.1:9150 на адрес нашего сервера 10.65.65.1:9050:

Tor settings

Сохраняем настройки и проверям, попали ли мы в TOR, пройдя, например, по ссылкам:
check.torproject.org
ifconfig.co

Теперь насчет Android. Скачиваем, например, недавно вышедший официальный Tor Browser for Android или Orfox, ну и если обобщить, любой браузер, поддерживающий прокси. Замечу, что Orbot в такой конфигурации нам не понадобится вовсе. Я покажу на примере Tor Browser for Android. Вводим в адресной строке about:config и делаем следующие настройки:

network.proxy.socks
10.65.65.1

network.proxy.socks_port
9050

Сохраняем, выходим, пробуем подключится к тем же проверочным ресурсам - check.torproject.org и ifconfig.co.

3. Установка и настройка I2P

Я покажу, как поднять шлюз в I2P на примере клиента i2pd, так как он не так требователен к ресурсам, в силу того, что он написан на C. Будем использовать собранный образ для Ubuntu, воспользовавшить инструкцией по установке. Добавим репозиторий и установим i2pd:

# add-apt-repository ppa:purplei2p/i2pd
# apt update
# apt install i2pd

После установки добавим пользователя, из-под которого будем запускать i2pd:

# useradd -m i2pdaemon

В файле /etc/shadow заблокируем ему вход - на месте пароля (после первого двоеточия) поставим символ * (звездочку):

i2pdaemon:*:17789:0:99999:7:::

Переключимся под юзера i2pdaemon:

# su i2pdaemon
$ cd ~

Один раз запустим i2pd, он чуть-чуть поработает, и сразу прибьем его нажатием “Ctrl+C”:

$ i2pd

Этим странным действием будет создана папка с рабочими файлами в домашней директории /home/i2pdaemon/.i2pd. Тут возникает несколько неочевидный момент - шаблон i2pd.conf в этой папке отсутствует, но он есть в репозитории. Можно просто скачать весь репо, или скопировать этот файл отдельно. Я поступлю так:

$ git clone https://github.com/PurpleI2P/i2pd.git
$ cp ./i2pd/contrib/i2pd.conf ./.i2pd/

Теперь, нужно отредактировать конфигурацию. Я представлю ниже пояснения, а полную портянку можете скачать:

# Куда пишем логи и какие логи
log = file
logfile = /var/log/i2pd.log
loglevel = warn
# Чтобы стартовать i2pd как службу
daemon = true
# Указываем, что наш i2p-маршрутизатор не принадлежит ни к какой группе
family = none
# Вводим тут свой внеший реальный IP, посмотреть можно по ip addr
host = <ip-address>
# Внешний порт для i2p-трафика, нужно придумать свой случайный, но лучше > 10000
port = <port>
# Включаем IPv4 и выключаем IPv6, но если есть IPv6, то можно поэкспериментировать
ipv4 = true
ipv6 = false
# Интерфейс, под которым выходим в Интернет:
ifname = eth0
# Включаем ntcp и ssu транспорты
ntcp = true
ssu = true
# Если сервер сразу с внешним IP, то NAT не используется
nat = false
# Выставляем скорость
bandwidth = 8125
# Выставляем адрес туннельного интерфейса и порт 7070 для интерфейса управления
[http]
address = 10.65.65.1
port = 7070
# Включаем http-прокси на туннельном интерфейсе, порт 4444
[httpproxy]
enabled = true
address = 10.65.65.1
port = 4444
# Включаем socks-прокси на туннельном интерфейсе, порт 4447
[socksproxy]
enabled = true
address = 10.65.65.1
port = 4447
# Другие транспорты для входа отключены
# Отключаем UPnP, чтобы не сыпалось лишнего в сеть
[upnp]
enabled = false
# Подстверждение данных от reseed-node, с помощью которых приходят необходимые данные о сети для старта шлюза i2p,
# по какой-то причине не работает. Так что необходимо ставить verify=false
[reseed]
verify = false
# Заполняем подписки на адресные книги i2p - аналог DNS в этой сети
[addressbook]
defaulturl = http://joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq.b32.i2p/export/alive-hosts.txt
subscriptions = http://inr.i2p/export/alive-hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt,http://rus.i2p/hosts.txt,http://i2p-projekt.i2p/hosts.txt,http://joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq.b32.i2p/export/alive-hosts.txt,http://no.i2p/export/alive-hosts.txt,http://reg.rus.i2p/public/a-hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt
# Выставляем максимальное количество подключений, тут нужно варьировать в зависимости от нагрузки на сервер
[limits]
transittunnels = 2500

Выходим обратно под root, создаем файл для лога, даем соответствующие права:

# touch /var/log/i2pd.log
# chown i2pdaemon:i2pdaemon /var/log/i2pd.log
# chmod ug=rw,o=r /var/log/i2pd.log

И наконец-то запускаем i2pd (из-под юзера i2pdaemon), предварительно подкрутив ulimit до 4096 (подняв ограничение на количество одновременно открытых сокетов):

# su i2pdaemon
$ ulimit -n 4096 && i2pd

Напоследок, сделаем автозагрузку i2pd через crontab (все так же под пользователем i2pdaemon):

$ crontab -e
@reboot ulimit -n 4096 && i2pd

Выходим обратно под root и проверяем, что i2pd запущен ничего лишнего не прослушивает на интерфейсах:

# ss -tlpn | grep i2pd
LISTEN     0      128             *:58585                    *:*                   users:(("i2pd",pid=14249,fd=13))
LISTEN     0      128    10.65.65.1:7070                     *:*                   users:(("i2pd",pid=14249,fd=30))
LISTEN     0      128    10.65.65.1:4444                     *:*                   users:(("i2pd",pid=14249,fd=31))
LISTEN     0      128    10.65.65.1:4447                     *:*                   users:(("i2pd",pid=14249,fd=34))

Первое - основной транспорт, второе - интерфейс управления, третье и четвертое - http и socks5 прокси для входа в сеть соответственно.
Итак, i2pd шлюз поднят, теперь нужно настроить клиентскую часть. Первое, что нужно проверить - доступен ли интерфейс управления по адресу http://10.65.65.1:7070. Далее настройка прокси для входа в сеть. Самый простой способ - просто переписать HTTP или SOCKS5 прокси в браузере на 10.65.65.1:4444 или 10.65.65.1:4447 соответственно. Собственно так же, как мы и прописывали под TOR. Но есть способ более изящный - с помощью аддона на Firefox - FoxyProxy. Устанавливаем его и выходим в настройки аддона. Слева вверху нажимаем “add” и делаем следующие настройки:

foxyproxy

После сохранения настройки нажимаем напротив нового созданного прокси “patterns” и добавляем один единсвенный паттерн URL, по которому будем выходить в псевдодоменную зону .i2p. Нажимаем “New White” и добавляем паттерн как на скриншоте ниже:

foxyproxy

Проверяем, переход на i2p-сайты, например:
102chan.i2p
exchanged.i2p

В FoxyProxy можно и http-прокси использовать, тогда порт нужно указать 4444, тут уже на свой вкус.
FoxyProxy есть и на Android, но эффекта от этого никакого, так как Firefox на эту платформу прекратила поддержку ProxyAPI:

Since Firefox on Android does not support the proxyAPI, FoxyProxy does not work. This is a limitation of Firefox on Android, not FoxyProxy. There are currently no Firefox for Android add-ons which manipulate proxy settings.

Так что, похоже в случае в Andoid, нужно как и для TOR - забивать адрес-прокси в about:config. Вторая проблема - почему-то откзывается работать socks5-прокси с i2p в случае мобильного Firefox. И заключительная - в отличае от десктопной версии - нет возможности создать несколько профилей Firefox со своими настройками. Поэтому, ситуация тут несколько плачевная, и удобного решения я пока не нашел, чтобы можно было один раз настроить браузер и сидеть с него и в Интернете, и в I2P. Если есть предложения, было бы очень интересно услышать. Меняем в about:configFF следующие параметры:

network.proxy.http
10.65.65.1

network.proxy.http_port
4444

network.proxy.type
1

Выходим из настроек и пробуем подключиться с сайтам, указанным выше.

android I2P

Далее, чтобы переключаться между прокси и прямым соединением, можно просто сбросить параметр network.proxy.type. Если нужно в I2P - снова поставить “единицу” как параметр.

4. Установка и настройка Freenet

Freenet очень удобен тем, что он просто запускат веб-сервер, через который происходит взаимолейсвие с сетью, и никаких прокси не требуется. Итак, первым делом создадим пользователя под запуск freenet, удалим ему пароль и установим JRE:

# useradd -m freenetdaemon
# vim /etc/shadow
freenetdaemon:*:17790:0:99999:7:::
apt install openjdk-9-jre-headless

Заходим из-под нового юзера freenetdaemon и скачиваем ему в домашнюю папку установщик freenet:

# su freenetdaemon
$ cd ~
$ wget 'https://github.com/freenet/fred/releases/download/build01480/new_installer_offline_1480.jar' -O new_installer_offline.jar

Создадим под freenet папку и установим его:

$ mkdir ./freenet
$ cd ./freenet/
$ java -jar ../new_installer_offline.jar

Процесс установки:

Select target path [/home/freenetdaemon/freenet]
< enter >
press 1 to continue, 2 to quit, 3 to redisplay
<1> < enter>
[ Starting to unpack ]
[ Processing package: Base (1/3) ]
[ Processing package: License (2/3) ]
[ Processing package: Unix (3/3) ]
< пропущено >
[ Console installation done ]

Итак, freenet установлен, но вот незадача - он все слушает на localhost:

LISTEN     0      50     127.0.0.1:9481                     *:*                   users:(("java",pid=9817,fd=17))
LISTEN     0      50     127.0.0.1:8888                     *:*                   users:(("java",pid=9817,fd=15))

Редактируем файл /home/freenetdaemon/freenet/freenet.ini, сделаем следующие параметры:

fproxy.allowedHosts=10.65.65.0/27,127.0.0.1,0:0:0:0:0:0:0:1
fproxy.bindTo=10.65.65.1,127.0.0.1,0:0:0:0:0:0:0:1
fproxy.allowedHostsFullAccess=10.65.65.0/27,127.0.0.1,0:0:0:0:0:0:0:1

Прибьем яву и перезапустим freenet:

$ killall -s 9 java
$ /home/freenetdaemon/freenet/run.sh start

Теперь можно управлять freenet из веб-морды. Проходим по туннельному адресу на порт 8888 http://10.65.65.1:8888/. Отроется wizard настройки. Делаем следующее:

  1. Выбираем на первом шаге “Connect to any Freenet user: (low security)” если у вас нет друзей, с которыми можно войти в пиринг;
  2. Далее нам говорят, как пользоваться браузером, чтобы импрувнуть секьюрити внутри сети;
  3. Далее нам предлагают выбрать, сколько места отвести под freenet. Если места не жалко и ничего больше на машине держать не собираетесь, рекомендую выбрать 10 GiB.
  4. “Does your internet connection have a monthly data limit?”. На Aruba это 2 ТБ в месяц, и у меня после почти месячного аптайма натекло только 3%, так что можно нажать “No”;
  5. “Transfer Rate Limit”. Я выбрал 100 Мбит/с, в данном случае скорости у вас точно с достатком;

Собственно, на этом wizard настройки заканчивается, мы выходим на стартовую Freenet. Тут у нас предупреждение, что нода будет “прогреваться” 24 часа. Напоследок заходим в “Configuration” -> “Security Settings”, выставляем “Protection against a stranger attacking you over the Internet “ на “Normal”, и “Protection of your downloads, uploads and Freenet browsing cache” ставим на “High” и выставялем пароль посложнее. Насчет первого я не уверен, что именно подкручивается - не знаю в чем разница между “Low” и “Normal”, потому что только с уровня “High” подключение осуществляется строго к “друзьям”. Второе - защищает данные freenet (загрузки, отгрузки, кэш) паролем, я сразу ставлю 64 рандомных символа и сохраняю пароль в хранилку пассвордов, потому что помнить его особо незачем.
Собственнно freenet-узел также поднят. Во Freenet можно еще много чего настроить - вроде отводимого количества памяти, порт для выхода в сеть (транспортный порт), имя узла и так далее, тут уже на ваше усмотрение. Как уже говорил - браузинг по freenet осуществляется через веб-интерфейс. Проходим на туннельный адрес http://10.65.65.1:8888/ с любого устройства, на стартовой есть несколько индексов сайтов сети, например.

android Freenet

Если заглянуть в crotab пользователя freenetdaemon, то увидете, что автозагрузка уже сделана за вас.

5. Послесловие

Стоит добавить, что в инструции все сервисы поднимались так, чтобы ничего лишнего наружу в Интернет не высовывалось, но все же, лучше настроить stateful-фаерволл на iptables, например по инструциии отсюда. Только не отрубите сами себе ssh!
Также в статье не затрагивалось, как сделать из сервера прокси/VPN/шлюз-в-IPv6, хотя может быть очень полезным побочным использованием VDS, раз уж за него платим.
I2P-шлюз поднимался не на оригинальном ПО на Ява, в силу того, что он довольно “прожорлив”, но стоит заметить, что у него больше функционала, вроде специальных гейтов “IRCoverI2P” или “TorrentOverI2P”.

Ну и в конце хочу сказать, что инструкцию я писал, сам поднимая шлюз с нуля, стараясь не упустить ничего из виду. Но ошибки могут быть, поэтому, для этого делаю следующий раздел.

6. Книга жалоб и предложений

[пусто]