I2P Federation and Accessability¶
This guide is going to focus on the Akkoma federation aspect. The actual installation is neatly explained in the official documentation, and more likely to remain up-to-date. It might be added to this guide if there will be a need for that.
We're going to use I2PD for its lightweightness over the official client. Follow the documentation according to your distro: https://i2pd.readthedocs.io/en/latest/user-guide/install/#installing
How to run it: https://i2pd.readthedocs.io/en/latest/user-guide/run/
I2P Federation¶
There are 2 ways to go about this. One using the config, and one using external software (fedproxy). The external software works better so far.
Using the Config¶
Warning: So far, everytime I followed this way of federating using I2P, the rest of my federation stopped working. I'm leaving this here in case it will help with making it work.
Assuming you're running in prod, cd to your Akkoma folder and append the following to config/prod.secret.exs
:
config :pleroma, :http, proxy_url: {:socks5, :localhost, 4447}
su akkoma
MIX_ENV=prod mix deps.get
MIX_ENV=prod mix ecto.migrate
exit
systemctl stop i2pd.service --no-block
systemctl start i2pd.service
You can change the socks proxy port in /etc/i2pd/i2pd.conf
.
Using Fedproxy¶
Fedproxy passes through clearnet requests direct to where they are going. It doesn't force anything over Tor.
To use fedproxy you'll need to install Golang.
apt install golang
echo "export GOPATH=/home/ren/.go" >> ~/.bashrc
go get -u github.com/majestrate/fedproxy$
cp $(GOPATH)/bin/fedproxy /usr/local/bin/fedproxy
fedproxy 127.0.0.1:2000 127.0.0.1:4447
127.0.0.1:9050
to that command.
You'll also need to modify your Akkoma config.
Assuming you're running in prod, cd to your Akkoma folder and append the following to config/prod.secret.exs
:
config :pleroma, :http, proxy_url: {:socks5, :localhost, 2000}
su akkoma
MIX_ENV=prod mix deps.get
MIX_ENV=prod mix ecto.migrate
exit
systemctl stop i2pd.service --no-block
systemctl start i2pd.service
You can change the socks proxy port in /etc/i2pd/i2pd.conf
.
I2P Instance Access¶
Make your instance accessible using I2P.
Add the following to your I2PD config /etc/i2pd/tunnels.conf
:
[akkoma]
type = http
host = 127.0.0.1
port = 14447
keys = akkoma.dat
systemctl stop i2pd.service --no-block
systemctl start i2pd.service
Now you'll have to find your address.
To do that you can download and use I2PD tools.[^1]
Or you'll need to access your web-console on localhost:7070.
If you don't have a GUI, you'll have to SSH tunnel into it like this:
ssh -L 7070:127.0.0.1:7070 user@ip -p port
.
Now you can access it at localhost:7070.
Go to I2P tunnels page. Look for Server tunnels and you will see an address that ends with .b32.i2p
next to "akkoma".
This is your site's address.
I2P-only Instance¶
If creating an I2P-only instance, open config/prod.secret.exs
and under "config :pleroma, Pleroma.Web.Endpoint," edit "https" and "port: 443" to the following:
url: [host: "i2paddress", scheme: "http", port: 80],
Existing Instance (Clearnet Instance)¶
If not an I2P-only instance, add the nginx config below to your existing config at /etc/nginx/sites-enabled/akkoma.nginx
.
And for both cases, disable CSP in Akkoma's config (STS is disabled by default) so you can define those yourself separately from the clearnet (if your instance is also on the clearnet).
Copy the following into the config/prod.secret.exs
in your Akkoma folder (/home/akkoma/akkoma/):
config :pleroma, :http_security,
enabled: false
In the Nginx config, add the following into the location /
block:
add_header X-XSS-Protection "0";
add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy same-origin;
Change the listen
directive to the following:
listen 127.0.0.1:14447;
Set server_name
to your i2p address.
Reload Nginx:
systemctl restart i2pd.service --no-block
systemctl reload nginx.service
You should now be able to both access your instance using I2P and federate with other I2P instances!
[^1]: I2PD tools to print information about a router info file or an I2P private key, generate an I2P private key, and generate vanity addresses.
Possible Issues¶
Will be added when encountered.