# Port Forwarding

## What is port forwarding?

Technically, port forwarding is the use of Network Address Translation
(NAT) to map an IP address and port number to another IP address and
port number. Typically you need this function to be able to expose a
service running our your local network (LAN) to the Internet (WAN)
which otherwise would be impossible because your LAN uses private,
non-routable IP addresses; for example, if you are trying to run a
gaming server or a Web page server from your home network.

## Security Warnings

Be aware that the use of port forwarding may create additional
security holes into your local network. The local system(s) and
service(s) you are exposing to the Internet must be free from security
vulnerabilities, or this may allow a remote attacker to infiltrate
your network.

## LuCi Interface

* Log into the LuCi Web interface, which by default is at address https://192.168.10.1

* Select the `Network` >> `Firewall` menu.

![alt text](images/librecmc-selecting-firewall-menu.png "Selecting the
 Firewall menu entry")

* Select the `Port Forwards` tab.

![alt text](images/librecmc-selecting-port-forwards-tab.png "Selecting the
 Port Forwards tab")

* Under the `New Port forward` section, enter in the `Name` field a
  brief description of the port forward, e.g., "HTTP server" for an
  unencrypted Web page server.

* Select a protocol from the `Protocol` field. Most services you can
  run will be using the TCP protocol, but you can select `TCP+UDP` if
  you aren't sure.

* Usually, you will leave the `External zone` set to `wan`.

* Enter a port number in the `External port` field. Typically this
  will be the usual port number expected for a particular
  service. E.g., HTTP servers use port 80. You are free to use
  non-standard ports, but your remote clients may need to use special
  techniques to connect to the correct port.

* Usually, you will leave the `Internal zone` set to `lan`.

* Select an IP address in the `Internal IP address` drop down menu. If
  your server is using DHCP, you should see its hostname appear in the
  list. If your server is has it's private IP address set statically,
  select the `Custom` option at the bottom of the list, and enter in
  the correct IP address in the text field that appears. Note that if
  your server is using DHCP, you should be sure LibreCMC has a static
  lease created for it (TODO: link to Static Leases documentation).

* Enter a port number in the `Internal port` field. Typically this
  will be the same as the external port, unless you have set your
  server to work through a non-standard port, or you selected a
  non-standard external port earlier.

![alt text](images/librecmc-port-forwards-entering-parameters.png
 "Entering parameters for port forwarding")

* Press the `Add` button to the right.

* Press the `Save & Apply` button at the bottom of the page.

![alt text](images/librecmc-port-forwards-after-save-apply.png
 "Port Forwards view after Save & Apply")

## Port Numbers

The official IANA port number list is available at

[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml]

## Port Range

(TODO: option for configuring a range of ports simultaneously)
