@achingbrain/nat-port-mapper

Port mapping with UPnP and NAT-PMP
About
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) })) {
await gateway.map(1000, '192.168.1.123', {
protocol: 'tcp'
})
for await (const mapping of gateway.mapAll(3000, {
protocol: 'udp'
})) {
console.info(`mapped ${mapping.internalHost}:${mapping.internalPort} to ${mapping.externalHost}:${mapping.externalPort}`)
}
await gateway.unmap(1000)
const externalIp = await gateway.externalIp()
console.log('External IP:', externalIp)
await gateway.stop()
}
Example - NAT-PMP
import { pmpNat } from '@achingbrain/nat-port-mapper'
import { gateway4sync } from 'default-gateway'
const gateway = pmpNat(gateway4sync().gateway)
await gateway.map(1000, '192.168.1.123', {
protocol: 'tcp'
})
await gateway.map(3000, '192.168.1.123', {
externalPort: 2000,
protocol: 'udp'
})
await gateway.unmap(1000)
const externalIp = await gateway.externalIp()
console.log('External IP:', externalIp)
await gateway.stop()
Credits
Based on alxhotel/nat-api
Additional Information
Install
$ npm i @achingbrain/nat-port-mapper
API Docs
License
Licensed under either of
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.