Noob question on port forwarding and NoIP

Hi, I am very new to Storj and am setting up a node that will run on a Raspberry pi 4 with Raspberry Pi OS bookworm 64bit.
Since I am not provided with a static IP I followed the guide on how to setup a free hostname on NoIP.
My hostname is: “storjraspberrypi. ddns. net” (added spaces because of the links limit on my post)
In my NoIP dashboard it says that my IP / Target is starting with 10.116.xxx.xxx

Since my router supports NoIP, I went ahead and setup a DynDNS directly on the router, like this:

Since I did the setup on the router itself I skipped the “Dynamic Update Client for Linux” part of the official guide.

Then I went ahead and found the local IP address of my raspberry pi to be 192.168.1.16

I hence went ahead and added a rule for port forwarding:
Name = Storj
Service = Other (I could otherwise choose DNS, FTP, HTML etc.)
Protocol = TCP - UDP
External Host = *
External Port = 28967
Internal Host = 192.168.1.16
Internal Port = 28967
Connection = Fixed Connection (the alternative would have been Mobile Connection)

When I finally got to the stage of running the docker command, I specified its relevant parameters like this (of course I ran the whole command):

-p 28967:28967/tcp \
-p 28967:28967/udp \
-p 127.0.0.1:14002:14002 \
-e ADDRESS="storjraspberrypi.ddns.net:28967" \

Upon inspecting the docker logs, I see the following error:
Error: Invalid configuration: invalid contact.external-address: lookup “storjraspberrypi.ddns.net” failed: lookup storjraspberrypi. ddns. net on 192.168.1.1:53: no such host

Also, when I check if port 28967 is open yougetsignal says that it is not, but from what I understand that’s because storagenode is not running in the first place…

Questions:

  • Why is the IP shown in the NoIP dashboard different to any other that I am using?
  • Have I made a mistake in setting up the port forwarding on the router?
  • I have not used my “external” IP address anywhere in the settings, is that correct?
  • Why is port 53 referenced in the error message if I’ve done nothing with that port?

Sorry if many people have asked the same quesitons but I couldn’t find the exact answer for my case and I’d really appreciate your help in setting up my first node.

Thanks

Maybe check on your Router the internet connection. I had the same issue with different router brand on DSlite connection. The router sends its private IPv4 to the DDNS provider, since it has no public IPv4. I think no IP is just DDNS you don’t get an IPv4 which you will need as a node operator.

Thanks for the answer. The official Storj guide seems to suggest that NoIP is a workaround for people who do not have a static IPv4 address. If I check whatsmyipadress I can see I am given an IPv4 address (213.55.xxx.xxx) but I know that I am assigned a dynamic one form my ISP provider.
I am sorry if my questions sound stupid but I am completely new to network stuff.

Are you on 5g router? Usually ISP blocks port forwarding on mobile network. I read in the forum you can ask the ISP if they unblock it

No, it’s a normal router, not 5g or anything like that. Unfortunately requesting a static IP would cost me monthly with this ISP.

Okay maybe your router is not connected directly to the internet, do you have fiber modem?

Hello @ermejoromano,
Welcome to the forum!

Yes, but this IPv4 must be a public, i.e. your WAN IP would match the IP on Open Port Check Tool - Test Port Forwarding on Your Router, otherwise it will not help.
So, please compare your WAN IP with IP on yougetsignal. If they do not match, your ISP placed you behind the CGNAT. In that case the port-forwarding will not work and DDNS will not help. You need to contact your ISP and get a public IP, it may be dynamic (this you will fix with a DDNS), but must be a public - the WAN IP will match the IP on yougetsignal.
There are alternatives:

  • static IP ($$$)
  • use the VPN services with a port-forwarding feature such as portmap.io, PIA, AirVPN, PureVPN, etc. ($$$)

Thanks for the explanation. How do I check my WAN IP?

It seems like you don’t have an off the shelf router. Just check the router settings there must be something about internet connection. When I log in to my router there is the button Internet, then connection details, then there should be the IPv4 IPv6 be listed.
What looks quite interesting on your router screenshot are the buttons firewall DMZ maybe you can check the settings

Good point. I forgot to mention that I added a Firewall exception on port 28967 like this:


Although it looks like all the other exceptions have 192.168.1.0 as local IP, with local port = Any and Remote IP = Any

Under DMZ I found the option to make a device accessible from the internet and set it to on:

On your firewall remote port should all be ANY, actually you need only incoming rules.
I dont understand why your raspberry has another private ip then the router. But you actually have internet connection on the raspberry?
When you’re on the commandline on the raspberry with this curl you can check your ip

curl https://ipinfo.io/ip

And check if this works

traceroute google.com

1 Like

I do have internet on my raspberry pi. I will remove the outgoing exceptions and set the Remote port to Any.
When I do curl https://ipinfo.io/ip I get 213.55.xxx.xxx, which is the same as I get displayed on yougetsignal. This is the same IP regardless on which device I run it from, if connected to the same router.

192.168.1.16 is the local IP of the raspberry pi (I believe the router’s is 192.168.1.1)

traceroute google.com works and gives a whole bunch of IP addresses

On traceroute do you have ipv4 or ipv6 address?
Does the second line show this?

2 * * *

Update: I contacted the ISP and apparently to have a public IPv4 address would cost me quite a lot, independently of whether static or dynamic. They confirmed that I am behind the CGNET and the only way to change that is to pay extra monthly.

If I understand correctly, the only possible workaround would be to use a VPN with port-forwarding feature such as portmap.io?
I read a lot of good things about Tailscale online and they have a free tier, do you think that would solve my problem?

Btw: the second line shows an IP address and the 3rd line shows
3 * * *

With tailscale its the same you need something public to connect to its wireguard. You can try portmap.io I have no experience. Or get 1€ VPS vServer Günstig Mieten » VPS ab 1€ / M. | IONOS maybe there is something in your country and do the wireguard port forwarding.
@arrogantrabbit Hosting services, like Storj, behind firewall/GNAT, using Wireguard on a VPS and DNAT (Port Forwarding) with iptables. · GitHub

1 Like

After a few tries and some peer pressure I managed to get a fixed IPv4 from my ISP for free. They were afraid I would have jumped ship with the black friday deals…
Now I am having a different problem: when I start the node with the docker command I am not sure if I need to use the -e ADDRESS parameter and which address to put in (I imagine my public IPv4 address such as “xxx.xxx.xxx.xxx:28967”?
When I run the docker command (either with the ADDRESS flag or without) I get the following error:

ERROR failure during run {“Process”: “storagenode”, “error”: “Error opening database on storagenode: group:\n— stat config/storage/blobs: no such file or directory\n— stat config/storage/temp: no such file or directory\n— stat config/storage/trash: no such file or directory”, “errorVerbose”: “Error opening database on storagenode: group:\n— stat config/storage/blobs: no such file or directory\n— stat config/storage/temp: no such file or directory\n— stat config/storage/trash: no such file or directory\n\tmain.cmdRun:69\n\tmain.newRunCmd.func1:33\n\tstorj.io/common/process.cleanup.func1.4:392\n\tstorj.io/common/process.cleanup.func1:410\n\tgithub.com/spf13/cobra.(*Command).execute:983\n\tgithub.com/spf13/cobra.(*Command).ExecuteC:1115\n\tgithub.com/spf13/cobra.(*Command).Execute:1039\n\tstorj.io/common/process.ExecWithCustomOptions:112\n\tmain.main:34\n\truntime.main:271”}

Any idea what I am doing wrong?

Edit: Initially I had permission problems, then I ran with sudo, then I omitted --user $(id -u):$(id -g), then I restarted the raspberry pi, reinstated --user and ran the command again.
It worked!

Thank you all for your inputs!

Good news with with fixed IP :clap:
Did you first run the setup(after setting permission), with directory to your mounted drive?

docker run --rm -e SETUP=“true”
–user $(id -u):$(id -g)
–mount type=bind,source=“”,destination=/app/identity
–mount type=bind,source=“”,destination=/app/config
–name storagenode storjlabs/storagenode:latest

1 Like

No, I did that already so could not redo it.
One more thing I did (although I don’t think it’s relevant) is to add “/” at the end of the source paths, so:
source=“xxxx/xxxx/” instead of source=“xxxx/xxxx”

Hmm you have the same path in setup and run command? Did you check the directory with

ls -l /storage-dir

Do you run any docker command with sudo?

Same path in both setup and run. I did run the run command with sudo. The setup command was not run with sudo.

Not sure what I am looking at when running

ls -l /storage-dir