Through the magic of tcpdump I discovered this:
20:24:58.286320 IP 10.10.1.76.14644 > 10.10.3.102.17000: UDP, length 172
20:24:58.299378 IP 10.10.3.102.17000 > 17.142.160.59.14644: UDP, length 172
17.xxxxx is not my real IP. The RTP stream wasn't going back to the PBX IP, but rather to my public ip. I thought about using a DNAT rule but that would likely cause other problems. Instead, poking around in the obi I found an option to enable symmetric RPT.
It's under ITSP PROVIDER x - SIP - General
Enable X_SymmetricRTPEnable [on/off]
From the obi admin guide:
Enable device to apply symmetric RTP behavior on
every call: That is, send RTP to peer at the address
where incoming RTP packets are received from
Tcpdump output:
Before:
20:24:58.286320 IP 10.10.1.76.14644 > 10.10.3.102.17000: UDP, length 172
20:24:58.299378 IP 10.10.3.102.17000 > 17.142.160.59.14644: UDP, length 172
After:
20:35:13.645291 IP 10.10.1.76.15876 > 10.10.3.102.17006: UDP, length 172
20:35:13.645818 IP 10.10.3.102.17006 > 10.10.1.76.15876: UDP, length 172
Problem resolved!