DHT Get Value not working because nodes aren't found

I have a 4 node setup: relay node, sender node, receiver node and storage node. Sender connects to storage through relay node and calls IpfsDHT.PutValue() to store some data. Receiver connects to relay node and calls IpfsDHT.GetValue()using the same key as the sender (exchanged out of band). However, I keep getting a routing: not found error. Refreshing the DHT does not affect anything.
Further, calling IpfsDHT.FindPeer from the relay node on itself yields nothing (not even its own ID). However, the relay node’s Peerstore has the IDs of all nodes involved.
How can I make the IpfsDHT.GetValue() function to work?