If you can't get your nat open using UPnP or port forwarding and it still is moderate or strict i found out my windows firewall didn't have mw3 ports added so i added them and now with UPnP enabled its open.
Just copy and paste this in powershell as admin and check the advanced firewall settings to see if MW3 is listed in both inbound and outbound, and you are good to go.
Hope it helps some!
$tcpPorts = '3074', '3075', '27015-27030', '27036-27037'
New-NetFirewallRule -DisplayName "MW3" -Direction Inbound -Protocol TCP -LocalPort $tcpPorts -Action Allow
New-NetFirewallRule -DisplayName "MW3" -Direction Outbound -Protocol TCP -LocalPort $tcpPorts -Action Allow
$udpPorts = '3074', '4380', '27000-27036'
New-NetFirewallRule -DisplayName "MW3" -Direction Inbound -Protocol UDP -LocalPort $tcpPorts -Action Allow
New-NetFirewallRule -DisplayName "MW3" -Direction Outbound -Protocol UDP -LocalPort $tcpPorts -Action Allow