While working on: lbryio/lbry-sdk#3630
I discovered that herald ping/pong packets play a key role in letting lbry-sdk determine the "external IP". Herald needs to accept ipv6 ping and reply with an ipv6 pong containing the client's ipv6 address.
For testing purposes, it's sufficient to use ::1 (localhost), but to really deploy this we will need the external IP address.