I had a similar situation and the answer is most likely this:In Firewall: NAT: Outbound set the mode to "Hybrid outbound NAT rule generation (automatically generated rules are applied after manual rules)"Then add a rule:Disabled: (unchecked)Do not NAT: (unchecked)Interface: WANTCP/IP Version: IPv4 (unless you are using IPv6 on your LAN)Protocol: AnySource invert: (unchecked)Source address: The local LAN address of your 3CX serverSource port: AnyDestination invert: (unchecked)Destination address: AnyDestination port: AnyTranslation / target: interface addressLog: (unchecked unless you prefer logging)Translation / port: (leave blank)Static-port: (CHECKED - THIS IS THE MOST IMPORTANT SETTING!!!!!)Pool Options: DefaultSet local tag: (leave blank)Match local tag: (leave blank)No XMLRPC Sync: (unchecked)Description: 3CX (or whatever you like)Enabling the static-port option is the key to getting it to work. Strangely, that is the only setting on the page for which no help is available.There is one other thing, if you have a dynamic DNS host hame for your server (or a host name other than that used with OPNesnse), go to System: Settings: Administration and put it in the Alternate Hostnames field.
This NAT outbound VOIP configuration doesn't require port forwarding?