There are three NAT statuses that your node can attain. They determine the types of consumers the node can connect with. The statuses are:
Open β this status indicates that the node is capable of establishing connections with any type of consumer.
Moderate β this status indicates that the node is capable of establishing connections with most types of consumers.
Strict β this status indicates the node can only establish connections with Open NAT type consumers.
How Is the Status Determined?
Through the TequilAPI endpoint /tequilapi/nat/type
, the NodeUI component is gathering information from the node in order to determine the NAT type. After it has performed a series of checks, its results will be one of the following NAT types:
none ("None").
fullcone ("Full Cone").
rcone ("Restricted Cone").
prcone ("Port Restricted Cone").
symmetric ("Symmetric").
For more information about the NAT definitions above, please refer to Internet Society RFC 3489.
NodeUI Conversion
Once the NAT type is detected, NodeUI is converting it into a human readable format with a more detailed description. Below are the conversion of NAT types into a human readable format types:
All connections are counted for none, fullcone, rcone NAT types.
Most connections are counted only for prcone.
Limited connections are counted only for symmetric NAT type.
Unknown marked if we failed to detect NAT type using user services.
Example of such conversion below:
export const nat2Human = (type: string): NatHumanInfo => {
switch (type) {
case 'none':
return { connectionAcceptance: 'All', label: 'None', variant: 'ok' }
case 'fullcone':
return { connectionAcceptance: 'All', label: 'Full Cone', variant: 'ok' } case 'rcone':
return { connectionAcceptance: 'All', label: 'Restricted Cone', variant: 'ok' }
case 'prcone':
return { connectionAcceptance: 'Most', label: 'Port Restricted Cone', variant: 'ok' }
case 'symmetric':
return { connectionAcceptance: 'Limited', label: 'Symmetric', variant: 'warning' }
default:
return { connectionAcceptance: 'Unknown', label: 'Unknown', variant: 'error' }
}
}