@johnpoz:
"I suppose I could enable outbound static ports on the pfSense and then technically I am only NATing on the edge gateway."
No you would still be natting twice you just would not be changing the ports twice with napt. which is how most nat works.. You end up with this, say your talking to a http site
privateIP:52111 –- host-publicIP:80 (nat router) router-publicIP:53222 --- host-publicIP:80
What you have is this
privateIP:52111 --- host-publicIP:80 (nat router) difprivateIP:53222 --- host-publicIP:80 (2nd nat router) router-publicIP:50333 ---- host-publicIP:80
Changing to use static outbound ports does not remove your double with 2 different private IPs you just remove the port number changes.. Which if trying to use static could cause even more issues, when that port is already in use by some other connection when you have multiple hosts that all pick their source port on their own.. You have no way to tell machine X don't use ports X - Y because we want machine B to use them. And now you told the router he can not change the port on the public side to be one that is not in use in the state table because you set it to be static.
This is very true, I was over looking NAT in this instance. I think for the time being I will leave NAT and outbound NAT as it is as I don't want to make things worse than they already are!
@chpalmer:
Voip was not originally built with the idea of NAT. It was a commercial endeavor and not originally marketed at the residential side of things. NAT was added in later.
Below is information my voip provider shows about one of my lines and how its connected. Notice the NATted address is included in the "Contact" line. There is no room for a second NATted address. I can't say it wont work but I don't know how you would make it do so. You might consider using Siproxd package on your pfSense box. It will take out one of the NATs for you. Or at least fool things into thinking that way.
Received:sip:1x4x.2x.2x.x1:5060
Contact:sip:36xxxxxxx9@__172.25.125.20__:5060;user=phone
I have read about the Siproxd package, but I am not entirely sure exactly how this works. I will need to do a bit more investigation about this. Thanks for all the advice - it has given me something to go on! :)