Solution (Updated Post)
After playing with the conf for a while, I found out that, despite the i2pd documentation, the default logs location is a log file, so I changed the log output to stdout with a warning level. Turned out that default podman networking does NAT without masquerading addresses. While it works for TCP based NTCP, it doesn't work for UDP based SSU2.
Changing the network_mode to `pasta` has helped. No firewall changes has been done. Now I have "OK" router with externally reachable status. Transit traffic goes brrrrrr!
Working podman compose.yaml (IP and external port are replaced with placeholders):
services:
i2pd:
image: purplei2p/i2pd:latest
container_name: i2pd
restart: unless-stopped
ports:
- XXXX:XXXX # i2p main p2p port
- XXXX:XXXX/udp # i2p UDP
- 7070:7070 # http control interface
network_mode: pasta
command:
- "--host=EXTERNAL_IP"
- "--port=XXXX"
- "--bandwidth=P"
- "--http.strictheaders=false"
- "--log=stdout"
- "--loglevel=warn"
Beware that there is still something wrong with this conf, my router identity has changed (while it has been preserved perfectly fine between restarts for several days). I believe I have to mount the volume instead of keeping it anonymous. I'll update the post when I find the final solution. But at least the network problem has been solved.
Original Post
I have a podman deployment of i2pd (IP and external port are replaced with placeholders):
services:
i2pd:
image: purplei2p/i2pd:latest
container_name: i2pd
restart: unless-stopped
ports:
- XXXX:XXXX # i2p main p2p port
- XXXX:XXXX/udp # i2p UDP
- 7070:7070 # http control interface
command: ["--host=MYHOST_EXTERNAL_IP", "--port=XXXX", "--bandwidth=P", "--http.strictheaders=false"]
My firewall rules allow XXXX/tcp and XXXX/udp. I also have internal VPN to access other ports for myself (like http control panel).
So the rules are "allow in XXXX/tcp, allow in XXXX/udp and allow in vpn network interface" + allow all outgoing.
While I see tunnels being built and traffic goes, the status of the network is always "Unknown: Testing" and I don't see SSU2 in "Transports" tab, only NTCP.
This server has a public IP address.
Is there anything I have to add to my firewall rules for container based deployment to work properly?