Ruby Gem for NAT-PMP

This is a client implementation of NAT-PMP

For a server implementation suitable for Linux see Stallone

Upon request NAT-PMP can open either a UDP or TCP port on the gateway and bidirectionally relay traffic to a specific external server.

Usage

The GEM includes a command-line utility as well as Ruby classes and can be used in several ways

To open a mapping from the command line

To open a mapping on specific ports use:

natpmp -p 1234

This command will hold the port open for the requested time, whereafter it may be closed. To extend the mapping simply re-open it using the same port number.

To run a command with a mapping

To run a command with specific port mappings:

natpmp -p 1234 'echo using the mapping && sleep 5'

The mapping will be held open until the command completes. The command string may contain the tokens %H, %P, %h and %p which will be substituted for the remote (uppercase) and local (lowercase) host (h) and ports (p). The ports can be automatically assigned by the command.

Example Ruby Code

To open a port and run code using it:

require 'natpmp'
NATPMP.map 633, 13033, 10, :tcp do |map|
  ... # the mapping will be renewed until this exits
end

Command Line Utility

The command line utility has the following options:

usage: natpmp [options] [command]
Open a port on a NAT-PMP gateway. Options:
    -t, --type TYPE                  Type: tcp, udp (default: tcp)
    -p, --port PORT                  Private port (default: auto)
        --ttl TIME                   TTL if no command (default 7200 sec)
    -P, --public PUBPORT             External port (default: auto)
    -v, --verbose                    Verbose
        --version                    Version
In the command string the following substitutions will be made:
  %p the local port
  %h the local IP address
  %P the gateway port
  %H the gateway IP address
(Use %% to avoid this)
The mapping will be closed on completion of the command
    -?, --help                       Display this screen