This might help others with multiple xbox's behind the same public IP. I'm specifically talking about Halo 5, but it could pertain to other games as well....
For anyone else that is still having a problem, I have a potential solution that allows multiple XBOX's connected behind a single Internet IP address achieve an open NAT on XBOX Live, and work with Halo 5.
I use OPNsense as my firewall, but the same steps will work on PFSense or any other firewall that allows you to configure inbound port forwarding and outbound PAT (port address translation).
I noticed that most posts that include a "fix" for the XBOX Live Open NAT issue will tell you to configure an outbound NAT rule for the XBOX and choose the option "Static Port". This will help you achieve Xbox Live Open NAT, but it's like using a bazooka to kill a mosquito. All traffic from the XBOX will preserve the original source port no matter what which doesn't work well with Halo 5 and multiple XBOX's.
XBOX traffic uses a lot of multicast and UDP packets. By looking at the traffic, I discovered that certain UDP/TCP packets will use the XBOX configured port as the source port of the packets. I also discovered that when a Halo 5 match starts, both of the XBOX's in my house were creating a UDP connection to the exact same host using the exact same source port and destination port combination at the exact same time. This is a HUGE problem if all packets are being statically translated, because the firewall won't know how to properly create a stateful connection for both XBOX's. The only way around this is to let the firewall dynamically remap the source port of the outbound traffic to ensure a unique UDP connection in the stateful database for the appropriate XBOX.
Long story short, IMO you need two things to get an open NAT in XBOX Live and for Halo 5 to work:
Configure each XBOX to use a unique static IP address and a unique static port. It's in the network settings area of your XBOX and very easy to do. You can use 3074 for one of the XBOX's if you want to, but I recommend using something in the 50,000 range. It's probably a safer bet and I didn't look at the traffic for an XBOX configured with 3074. Create a TCP/UDP port forwarding rule on your firewall for each XBOX's static IP address and its associated static port. You could use UPnP, but either way you're doing the same thing. Each XBOX will get its own unique port and a hole in the firewall to allow internet hosts to originate TCP and UDP traffic to that port. I prefer not to use UPnP because of security concerns.
Configure a manual outbound NAT rule matching only UDP traffic for each XBOX using the corresponding static port as the source port and choosing the "Static Port" option. What you're doing here is telling the firewall do not dynamically PAT (port address translate) packets from my XBOX if they are UDP packets and the source port of the packet matches the static port you configured in the XBOX. For everything else, go ahead and dynamically translate the source port to ensure a unique connection in the stateful database of the firewall. By doing this, when Halo 5 starts those packets that are going to the same destination using the same source port and destination port combinations will get a remapped source port in the firewall database and therefore the return traffic will route back to the correct XBOX.
I hope this helps someone else that like me is trying to get to SR152 and also has a wingman in the same house with them.
halo5ports.JPG Hybridnat.JPG xboxportforward.JPG xboxsampletraffic.JPG xboxnatoutbound.JPG