See the discussion in bigbluebutton/bigbluebutton#17134 for full details. It boils down to:
WebSocket connections from the browser to FreeSWITCH always go through nginx. This means that FreeSWITCH only ever sees an internal IP if no dummy network interface with the public IP configured to it is used. As dummy network interfaces aren't required if one configures firewalls/routers to bounce locally-originating connections back properly, FreeSWITCH must be convinced differently that the origin is an external one, and that it should therefore announce its external IP.
… NAT
See the discussion in bigbluebutton/bigbluebutton#17134 for full details. It boils down to:
WebSocket connections from the browser to FreeSWITCH always go through nginx. This means that FreeSWITCH only ever sees an internal IP if no dummy network interface with the public IP configured to it is used. As dummy network interfaces aren't required if one configures firewalls/routers to bounce locally-originating connections back properly, FreeSWITCH must be convinced differently that the origin is an external one, and that it should therefore announce its external IP.