@achingbrain/nat-port-mapper

Enable NAT traversal by mapping public ports to ports on your computer using either UPnP or NAT-PMP.

Example: UPnP NAT

import { upnpNat } from '@achingbrain/nat-port-mapper'

const client = upnpNat()

for await (const gateway of client.findGateways({ signal: AbortSignal.timeout(10000) })) {
// Map public port 1000 to private port 1000 with TCP
await gateway.map(1000, '192.168.1.123', {
protocol: 'tcp'
})

// Map port 3000 to any available host name
for await (const mapping of gateway.mapAll(3000, {
protocol: 'udp'
})) {
console.info(`mapped ${mapping.internalHost}:${mapping.internalPort} to ${mapping.externalHost}:${mapping.externalPort}`)
}

// Unmap previously mapped private port 1000
await gateway.unmap(1000)

// Get external IP
const externalIp = await gateway.externalIp()

console.log('External IP:', externalIp)

// Unmap all mapped ports and cancel any in-flight network operations
await gateway.stop()
}

Example: NAT-PMP

import { pmpNat } from '@achingbrain/nat-port-mapper'
import { gateway4sync } from 'default-gateway'

const gateway = pmpNat(gateway4sync().gateway)

// Map public port 1000 to private port 1000 with TCP
await gateway.map(1000, '192.168.1.123', {
protocol: 'tcp'
})

// Map public port 2000 to private port 3000 with UDP
await gateway.map(3000, '192.168.1.123', {
externalPort: 2000,
protocol: 'udp'
})

// Unmap previously mapped private port 1000
await gateway.unmap(1000)

// Get external IP
const externalIp = await gateway.externalIp()

console.log('External IP:', externalIp)

// Unmap all mapped ports and cancel any in-flight network operations
await gateway.stop()

Credits

Based on alxhotel/nat-api

Additional Information

Index

Interfaces

Type Aliases

Functions