Hi,
I am running Kubo 0.27.0 (been running it for years on earlier versions) on a single node, and have a Python script on that node that regularly fetches some files, constructs a folder containing those files and publishes the results as a new CID to IPFS. It then publishes my IPNS pointer to point at that latest CID.
The IPNS is /ipns/k51qzi5uqu5dlnwjrnyyd6sl2i729d8qjv1bchfqpmgfeu8jn1w1p4q9x9uqit
This has been working pretty well for some years, but in the last 6 months or so the IPNS has been increasingly āfalling off the radarā - public internet gateways like Cloudflareās, Pinata etc stop resolving the IPNS.
I also spun up an IPFS instance on a totally remote server using Kubo and am unable to resolve the IPNS node from it:
ipfs@mypfs:~$ ipfs name resolve /ipns/k51qzi5uqu5dlnwjrnyyd6sl2i729d8qjv1bchfqpmgfeu8jn1w1p4q9x9uqit
Error: could not resolve name
Yet, if I know the IPFS CID that the IPNS points to, I can grab it just fine (granted, it takes a while) (again this is on a remote server that has no relationship to the publishing node):
ipfs@mypfs:~$ ipfs get /ipfs/QmRppJ5FQcHhCDCyAGauLzMmeDo6iYEaJRhRYQ8zENGcud
Saving file(s) to QmRppJ5FQcHhCDCyAGauLzMmeDo6iYEaJRhRYQ8zENGcud
8.91 MiB / 8.91 MiB [====================================================================================================================================================] 100.00% 10s
My publishing script, which publishes both the CID and the IPNS pointer, still seems to be working fine with no apparent errors. Here is the script: ipfs-publish Ā· GitHub
Here is the output of running the script:
Getting the file name
Adding the file to IPFS and get the CID hash
{'Name': 'incidents.csv', 'Hash': 'QmVZApxY4DWnfTirxs97sA4mS5kHyoHcqF7BhNptszDTYj', 'Size': '9288754'}
Resolving the current CID of the IPNS pointer
{'Path': '/ipfs/QmW2sXMSMQ1r2rUkdb34QSp8xHemFSsjoqVuRDfpUCrwUj'}
Getting the CID of the file we care about within IPNS CID
{'Data': {'/': {'bytes': 'CAE'}}, 'Links': [{'Hash': {'/': 'QmeiShHHbtEhivQc1XsT1YSY3U3mCUH58tErKDwHqXXr1d'}, 'Name': 'README.md', 'Tsize': 1715}, {'Hash': {'/': 'QmQppmLpp4PeXKmrbJR5B9pjSZKhMj8VTkv85RiXrMvsng'}, 'Name': 'incidents-log.csv', 'Tsize': 53658}, {'Hash': {'/': 'QmW9yhosKC8c9in5ANHAJjPi7JwXSmzaSW7oyf2vqsDDh7'}, 'Name': 'incidents.csv', 'Tsize': 9288754}]}
Adding attributes and contents of changelog and README for publishing
Publishing folder containing the files for human-friendly viewing. Still just as IPFS, not IPNS
{"Name":"pft-incidents/README.md","Hash":"QmeiShHHbtEhivQc1XsT1YSY3U3mCUH58tErKDwHqXXr1d","Size":"1715"}
{"Name":"pft-incidents/incidents.csv","Hash":"QmVZApxY4DWnfTirxs97sA4mS5kHyoHcqF7BhNptszDTYj","Size":"9288754"}
{"Name":"pft-incidents/incidents-log.csv","Hash":"QmQppmLpp4PeXKmrbJR5B9pjSZKhMj8VTkv85RiXrMvsng","Size":"53658"}
{"Name":"pft-incidents","Hash":"QmRppJ5FQcHhCDCyAGauLzMmeDo6iYEaJRhRYQ8zENGcud","Size":"9344302"}
Pointing our IPNS at the new directory CID hash
{'Name': 'k51qzi5uqu5dlnwjrnyyd6sl2i729d8qjv1bchfqpmgfeu8jn1w1p4q9x9uqit', 'Value': '/ipfs/QmRppJ5FQcHhCDCyAGauLzMmeDo6iYEaJRhRYQ8zENGcud'}
So, publishing works, and naturally I can resolve the IPNS on the originating machine itself (because of cache), what do I need to do to get it to be reachable again from other nodes?
Here is my ipfs config too (private key/peer id removed):
{
"API": {
"HTTPHeaders": {}
},
"Addresses": {
"API": "/ip4/127.0.0.1/tcp/5001",
"Announce": null,
"AppendAnnounce": [
"/ip4/107.170.254.5/tcp/4001",
"/ip4/107.170.254.5/udp/4001/quic",
"/ip4/107.170.254.5/udp/4001/quic-v1",
"/ip4/107.170.254.5/udp/4001/quic-v1/webtransport"
],
"Gateway": "/ip4/127.0.0.1/tcp/8080",
"NoAnnounce": [
"/ip4/100.64.0.0/ipcidr/10",
"/ip4/169.254.0.0/ipcidr/16",
"/ip4/172.16.0.0/ipcidr/12",
"/ip4/192.0.0.0/ipcidr/24",
"/ip4/192.0.0.0/ipcidr/29",
"/ip4/192.0.0.8/ipcidr/32",
"/ip4/192.0.0.170/ipcidr/32",
"/ip4/192.0.0.171/ipcidr/32",
"/ip4/192.0.2.0/ipcidr/24",
"/ip4/192.168.0.0/ipcidr/16",
"/ip4/198.18.0.0/ipcidr/15",
"/ip4/198.51.100.0/ipcidr/24",
"/ip4/203.0.113.0/ipcidr/24",
"/ip4/240.0.0.0/ipcidr/4",
"/ip6/100::/ipcidr/64",
"/ip6/2001:2::/ipcidr/48",
"/ip6/2001:db8::/ipcidr/32",
"/ip6/fc00::/ipcidr/7",
"/ip6/fe80::/ipcidr/10"
],
"Swarm": [
"/ip4/0.0.0.0/tcp/4001",
"/ip4/0.0.0.0/tcp/4002/ws",
"/ip4/0.0.0.0/udp/4001/quic-v1",
"/ip4/0.0.0.0/udp/4001/quic-v1/webtransport",
"/ip6/::/tcp/4001",
"/ip6/::/udp/4001/quic-v1",
"/ip6/::/udp/4001/quic-v1/webtransport",
"/ip6/::/tcp/4002/ws"
]
},
"AutoNAT": {},
"Bootstrap": [
"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
"/ip4/104.131.131.82/udp/4001/quic-v1/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa"
],
"DNS": {
"Resolvers": null
},
"Datastore": {
"BloomFilterSize": 1048576,
"GCPeriod": "1h",
"HashOnRead": false,
"Spec": {
"mounts": [
{
"child": {
"path": "blocks",
"shardFunc": "/repo/flatfs/shard/v1/next-to-last/2",
"sync": true,
"type": "flatfs"
},
"mountpoint": "/blocks",
"prefix": "flatfs.datastore",
"type": "measure"
},
{
"child": {
"compression": "none",
"path": "datastore",
"type": "levelds"
},
"mountpoint": "/",
"prefix": "leveldb.datastore",
"type": "measure"
}
],
"type": "mount"
},
"StorageGCWatermark": 90,
"StorageMax": "10G"
},
"Discovery": {
"MDNS": {
"Enabled": false,
"Interval": 10
}
},
"Experimental": {
"FilestoreEnabled": false,
"GraphsyncEnabled": false,
"Libp2pStreamMounting": false,
"P2pHttpProxy": false,
"StrategicProviding": false,
"UrlstoreEnabled": false
},
"Gateway": {
"APICommands": [],
"HTTPHeaders": {},
"NoDNSLink": false,
"NoFetch": false,
"PathPrefixes": [],
"PublicGateways": null,
"RootRedirect": "",
"Writable": false
},
"Identity": {
"PeerID": "xxxxxxxxxxx",
"PrivKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"Internal": {},
"Ipns": {
"RecordLifetime": "",
"RepublishPeriod": "",
"ResolveCacheSize": 128
},
"Migration": {
"DownloadSources": null,
"Keep": ""
},
"Mounts": {
"FuseAllowOther": false,
"IPFS": "/ipfs",
"IPNS": "/ipns"
},
"Peering": {
"Peers": null
},
"Pinning": {
"RemoteServices": null
},
"Plugins": {
"Plugins": null
},
"Provider": {
"Strategy": ""
},
"Pubsub": {
"DisableSigning": false,
"Router": ""
},
"Reprovider": {},
"Routing": {
"AcceleratedDHTClient": true,
"Methods": null,
"Routers": null
},
"Swarm": {
"AddrFilters": [
"/ip4/10.0.0.0/ipcidr/8",
"/ip4/100.64.0.0/ipcidr/10",
"/ip4/169.254.0.0/ipcidr/16",
"/ip4/172.16.0.0/ipcidr/12",
"/ip4/192.0.0.0/ipcidr/24",
"/ip4/192.0.0.0/ipcidr/29",
"/ip4/192.0.0.8/ipcidr/32",
"/ip4/192.0.0.170/ipcidr/32",
"/ip4/192.0.0.171/ipcidr/32",
"/ip4/192.0.2.0/ipcidr/24",
"/ip4/192.168.0.0/ipcidr/16",
"/ip4/198.18.0.0/ipcidr/15",
"/ip4/198.51.100.0/ipcidr/24",
"/ip4/203.0.113.0/ipcidr/24",
"/ip4/240.0.0.0/ipcidr/4",
"/ip6/100::/ipcidr/64",
"/ip6/2001:2::/ipcidr/48",
"/ip6/2001:db8::/ipcidr/32",
"/ip6/fc00::/ipcidr/7",
"/ip6/fe80::/ipcidr/10"
],
"ConnMgr": {
"GracePeriod": "20s",
"HighWater": 2000,
"LowWater": 1500,
"Type": "basic"
},
"DisableBandwidthMetrics": false,
"DisableNatPortMap": true,
"RelayClient": {},
"RelayService": {},
"ResourceMgr": {
"Limits": {}
},
"Transports": {
"Multiplexers": {},
"Network": {},
"Security": {}
}
}
}
In the firewall, I have TCP and UDP port 4001 open inbound, everything is allowed outbound. There is no NAT, the machine is a DigitalOcean droplet with the public IP as its primary eth0 interface. The public IP as seen in the config is 107.170.254.5 (I added those āAppendAnnounceā lines, but it hasnāt seemed to help)
I appreciate any assistance!