diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 7f1909849602..3e1477b8defc 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -673,8 +673,8 @@ func serveHTTPApi(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, error return nil, fmt.Errorf("serveHTTPApi: ConstructNode() failed: %s", err) } - if err := node.Repo.SetAPIAddr(listeners[0].Multiaddr()); err != nil { - return nil, fmt.Errorf("serveHTTPApi: SetAPIAddr() failed: %s", err) + if err := node.Repo.SetAPIAddr(rewriteMaddrToUseLocalhostIfItsAny(listeners[0].Multiaddr())); err != nil { + return nil, fmt.Errorf("serveHTTPApi: SetAPIAddr() failed: %w", err) } errc := make(chan error) @@ -695,6 +695,19 @@ func serveHTTPApi(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, error return errc, nil } +func rewriteMaddrToUseLocalhostIfItsAny(maddr ma.Multiaddr) ma.Multiaddr { + first, rest := ma.SplitFirst(maddr) + + switch { + case first.Equal(manet.IP4Unspecified): + return manet.IP4Loopback.Encapsulate(rest) + case first.Equal(manet.IP6Unspecified): + return manet.IP6Loopback.Encapsulate(rest) + default: + return maddr // not ip + } +} + // printSwarmAddrs prints the addresses of the host func printSwarmAddrs(node *core.IpfsNode) { if !node.IsOnline { @@ -807,8 +820,12 @@ func serveHTTPGateway(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, e return nil, fmt.Errorf("serveHTTPGateway: ConstructNode() failed: %s", err) } + addr, err := manet.ToIP(rewriteMaddrToUseLocalhostIfItsAny(listeners[0].Multiaddr())) + if err != nil { + return nil, fmt.Errorf("serveHTTPGateway: manet.ToIP() failed: %w", err) + } if len(listeners) > 0 { - if err := node.Repo.SetGatewayAddr(listeners[0].Addr()); err != nil { + if err := node.Repo.SetGatewayAddr(addr); err != nil { return nil, fmt.Errorf("serveHTTPGateway: SetGatewayAddr() failed: %w", err) } }