Understanding PS3 NAT Types

After spending a little time investigating online gaming on the PS3, there appears to be a lot of conflicting information with regards to what NAT is and how the PS3 classifies your NAT type. Everyone who plays online seems to spend a lot of their time (instead of actually playing games) trying to achieve a different NAT type, or thinking their NAT type is why they keep getting shot.

NAT or Network Address Translation is something which people generally can’t avoid and has become the norm in computer networking. For a device to be able to access content on the Internet they need a public IP address. There aren’t enough public IP addresses (until IPv6 is fully embraced, which is still a way off) to give every one of your devices a public address which mandates a form of translation.

As well as public IP addresses, we also have private IP addresses (defined in RFC 1918) which are 10.0.0.0/8, 192.168.0.0/16 and 172.16.0.0/12. These IP addresses aren’t routable on the Internet as everyone is able to use the same address ranges. NAT allows multiple private IP addresses to be translated into a single public IP address to allow devices to access the Internet:

The RG (Residential Gateway) is your modem or router that is connected to your ISP (Internet Service Provider) using a range of different access technologies from DSL to Cable to Ethernet. The RG is allocated a public IP address which is routable on the Internet and each of your devices behind the RG is allocated a private IP address by the RG.

When a device wants to talk to a website on the Internet, the RG will translate the 192.168.1.x address into the 191.20.1.22 public IP address which is called NAT. The disadvantage (or advantage as some people see it) with NAT, is that your internal devices aren’t able to receive unsolicited inbound connections. This provides a level of security (the RG should also provide a stateful firewalling function in combination with NAT) which can cause issues for some applications which rely on other users connecting to you.

Normally, a RG won’t allow inbound connections and if someone attempts to connect to your device from the Internet then the request will be dropped or ignored by the firewalling function. Inbound port forwarding allows you to tell the RG to accept inbound connections and forward them to an internal device. There are a number of different techniques to allow inbound port forwarding: DMZ, UPnP and static port forwarding. Depending on the model of your RG depends on what is available to you. However, each of them doesn’t come without security risks as you are allowing external untrusted connections into your “trusted” home network.

DMZ: Some RGs have the ability to setup a DMZ host which tells the RG to forward any inbound connections to the DMZ host. This (in my opinion) is the more riskier approach from a security perspective as it allows any device on the Internet to bombard your internal device with any packets it wants, on any port (not just the required ports).

UPnP: Universal Plug and Play is a protocol which allows auto-configuration of devices. Part of UPnP is the Internet Gateway Device Protocol (IGD) which allows devices and applications to manipulate your RG to open up inbound ports automatically on a demand basis. This is deemed an insecure protocol, but a useful one, so it is up to the user to determine if they want this flexibility at the cost of security. UPnP has been known to be problematic in some scenarios to get working due to flakey implementations.

Static Port Forwarding: This is probably the most secure method but provides the least flexibility as you are required to configure your RG to statically setup port forwarding. The process is dependent on the actual game you are playing as they use different ports as well as your make/model of RG as they have different processes.

Both DMZ and Static Port Forwarding will require a form of private static IP address assigned to your PS3 either through a static IP or a hardcoded DHCP allocation.

PS3 NAT Types

In the network settings of the PS3, it uses 3 different NAT types to classify how the PS3 is connected to the Internet:

Type 1: The PS3 is sitting directly on the Internet with a public IP address. This setup doesn’t require NAT or inbound port forwarding and is used in scenarios where the PS3 is the only device wanting to use the Internet connection. This isn’t that common as most users share their Internet connection with other devices in their home.

Type 2: This is the most common and ideal type where the PS3 is sitting behind a RG that is performing NAT. The PS3 will have a private IP address which is translated to a private or public IP address by the RG.

Type 3: This usually implies you have a problem in the way the PS3 is accessing the Internet. This may be caused by a firewall or port restrictions. This isn’t ideal and will result in a sub-optimal gaming experience.

The difference between a Type 2 and Type 1 NAT is usually physical and can’t be changed by settings alone. If you have a Type 2 or higher NAT type then you are connected correctly and can have an optimal gaming experience.

In-Game NAT Types

The second type of NAT is within games like “Call of Duty: Black Ops” or “Call of Duty: Modern Warfare 2” which has 3 different classifications (“Open”, “Moderate” and “Strict”) which defines how your RG deals with inbound port forwarding and NAT. This can affect your ability to join or host games, the following matrix shows who can match with who:

Games like “Call of Duty” work on a decentralised approach where one of the players is picked as the host. The host generally requires a fast broadband connection as all the other players will connect to them. You will need an “Open” NAT type to be able to host as inbound connections are required.

Strict: You will get a “Strict” NAT type if your RG is using Port Address Translation (PAT) which is part of NAT. PAT happens when you have multiple PS3 devices sharing the same public IP address. When a PS3 attempts to connect to a host it allocates a source port for the communication – if it is the only device using this source port then NAT will use this source port as well. However, if multiple devices use the same source port then the PAT function will change the source port. This is what causes a “Strict” NAT type and can limit your ability to join games and other features like in-game chat.

In the above example “PS3 1” uses source port 3074 and “PS3 2” uses the same source port. The RG can only allocate 3074 once, so will assign it to the first connection and “PS3 2” will be unable to use the same source port so the RG uses PAT to change it to an unallocated dynamic port. “PS3 2” will appear to have a “Strict” NAT type as the source port has been changed.

A “Strict” NAT type doesn’t always happen if you have two gaming devices, it can also happen if your RG has stale NAT entries which makes it think the port is already being used – this is how a NAT type can switch from “Open” to “Strict” and why people say when they reload their RG, their NAT goes back to “Open”.

Open: This is the most ideal type and implies you have configured inbound port forwarding towards your PS3. The PS3 is also the only device using the required source ports which means PAT isn’t happening. You will be able to join or host games with any other player.

Moderate: A lot of people with a “Moderate” NAT type strive to achieve an “Open” NAT type. The difference between “Moderate” and “Open” is if you are forwarding ports towards your PS3. You can follow specific online instructions for your RG to setup inbound port forwarding for the required ports to achieve an “Open” NAT type (assuming your ISP isn’t blocking inbound ports).

That concludes this brief article on the different types of NAT in relation to the PS3. If anyone has any comments or feedback then please leave a comment below.

This entry was posted in General. Bookmark the permalink.

5 Responses to Understanding PS3 NAT Types

  1. ro says:

    so i went an change the nat from strict or moderate yesterday an it wrked fine,nextday its back 2 moderate i my playstation broken

  2. Kris Dodd says:

    Okay, well my PS3, my tablet and my computer all connect to my modem, I’m not sure if this is the problem, but my NAT has always been open and then as soon as I got my internet back through a different company, it was strict, please explain.

  3. Kris Dodd says:

    Also, I have Nat type 2 but its still strict.

  4. acesass says:

    your ps3 needs a different ip from say your laptop or pc if it uses the same one will be moderate or strict.also you need to alter the dmz in your router to the ip your ps3 using to get nat type open.

  5. pgibson says:

    My router happens to run OpenBSD, this was the only guide online I could find that could give me a clue what I was doing wrong. I also learned a bit more about NAT! I never knew that port address translation existed, after about 40 minutes looking through man pages, I figured out the ‘static-port’ option. It works perfectly now! Much thanks to Chris!

    In case y’all are interested:

    [ root@********* +4F314C18 etc ]$pfctl -sr
    . . .
    pass in inet proto tcp from any to (fxp1) port = www flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = www flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = https flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = https flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = smtps flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = smtps flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = 983 flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = 983 flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = 5223 flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = 5223 flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port 10071:10080 flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port 10071:10080 flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = 9293 flags S/SA keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = 9293 flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass in inet proto udp from any to (fxp1) port = 3478 keep state rdr-to 192.168.2.146
    pass out inet proto udp from 192.168.2.146 to any port = 3478 keep state nat-to (fxp1) round-robin static-port
    pass in inet proto udp from any to (fxp1) port = 3479 keep state rdr-to 192.168.2.146
    pass out inet proto udp from 192.168.2.146 to any port = 3479 keep state nat-to (fxp1) round-robin static-port
    pass in inet proto udp from any to (fxp1) port = 3658 keep state rdr-to 192.168.2.146
    pass out inet proto udp from 192.168.2.146 to any port = 3658 keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = 10070 flags S/SA keep state rdr-to 192.168.2.146
    pass in inet proto udp from any to (fxp1) port = 10070 keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = 10070 flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass out inet proto udp from 192.168.2.146 to any port = 10070 keep state nat-to (fxp1) round-robin static-port
    pass in inet proto tcp from any to (fxp1) port = 3074 flags S/SA keep state rdr-to 192.168.2.146
    pass in inet proto udp from any to (fxp1) port = 3074 keep state rdr-to 192.168.2.146
    pass out inet proto tcp from 192.168.2.146 to any port = 3074 flags S/SA keep state nat-to (fxp1) round-robin static-port
    pass out inet proto udp from 192.168.2.146 to any port = 3074 keep state nat-to (fxp1) round-robin static-port
    pass in inet proto udp from any to (fxp1) port = 81 keep state rdr-to 192.168.2.146
    pass out inet proto udp from 192.168.2.146 to any port = 81 keep state nat-to (fxp1) round-robin static-port
    pass in inet proto udp from any to (fxp1) port = 3075 keep state rdr-to 192.168.2.146
    pass out inet proto udp from 192.168.2.146 to any port = 3075 keep state nat-to (fxp1) round-robin static-port
    . . .

    In my setup; fxp1 is the NIC connected to my ISP and 192.168.2.146 is the IP address of my PS3.
    Probably not useful to most people, but hopefully it finds a fellow BSD nerd ;)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>