From 8dfe2fb5bfc6c45b8194c3a73f071ff4968a9903 Mon Sep 17 00:00:00 2001 From: Steve Lewis AB7PA Date: Mon, 23 May 2022 13:52:54 -0700 Subject: [PATCH] expand NAT mode info for port forwarding etc --- ...port-forward.png => ports-direct-mode.png} | Bin .../_images/ports-nat-mode.png | Bin 0 -> 51996 bytes arednGettingStarted/advanced_config.rst | 112 +++++++++++------- 3 files changed, 71 insertions(+), 41 deletions(-) rename arednGettingStarted/_images/{08-port-forward.png => ports-direct-mode.png} (100%) create mode 100755 arednGettingStarted/_images/ports-nat-mode.png diff --git a/arednGettingStarted/_images/08-port-forward.png b/arednGettingStarted/_images/ports-direct-mode.png similarity index 100% rename from arednGettingStarted/_images/08-port-forward.png rename to arednGettingStarted/_images/ports-direct-mode.png diff --git a/arednGettingStarted/_images/ports-nat-mode.png b/arednGettingStarted/_images/ports-nat-mode.png new file mode 100755 index 0000000000000000000000000000000000000000..dc1589365ea8914b0f7415e9bdf0fa50a7accd3f GIT binary patch literal 51996 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. When you connect a device to your node's LAN, not only should it have an IP address in the LAN IP address range, but it is best practice for LAN devices to obtain their DNS Server information *automatically* from the node. Be aware that if a LAN device does not use the DNS Server entry provided by the node to which it is connected, then that device will be unable to resolve hostnames on the mesh network. Also, hard-coding a device's DNS Server entry with the mesh node's IP address could result in unexpected failures if that device is moved to another mesh node or network. -If you enabled the *LAN Access Point* feature mentioned previously, edit the access point's SSID, channel, encryption method, and password. Click *Save Changes* to write your information to the node's configuration, and a node reboot will also be required. Now wireless devices can connect to your node through this new WiFi AP, and their DHCP IP address will be assigned by the node's DHCP server. If your node hardware has two radios, for example the *Mikrotik hAP ac lite* with both 2.4 and 5.8 GHz radios in a single unit, the *LAN Access Point* section will always be visible whether or not your *Mesh RF* interface is enabled. +If you enabled the *LAN Access Point* feature mentioned previously, edit the access point's SSID, channel, encryption method, and password. Click *Save Changes* to write your information to the node's configuration, and a node reboot will also be required. Now wireless devices can connect to your node's LAN wirelessly, and their DHCP IP address will be assigned by the node's DHCP server. If your node hardware has more than one unused radio, for example the *Mikrotik hAP ac lite* with both 2.4 and 5.8 GHz radios in a single unit, the *LAN Access Point* section will always be visible whether or not your *Mesh RF* interface is enabled. WAN Column ^^^^^^^^^^ @@ -147,72 +147,102 @@ No VLAN tag It is important to understand AREDN |trade| VLANs when configuring network smart switches for Internet access, tunneling, or DtD linking of nodes. There are some useful tutorials available on the AREDN |trade| website for configuring VLAN-capable switches: `Video `_ or `Text+Images `_. Also, on the AREDN |trade| GitHub site there is more information about node VLANs that have been preconfigured in the firmware images for specific types of radio hardware. For additional information visit this link: `Ethernet Port Usage `_ -Port Forwarding, DHCP, and Services ------------------------------------ +Port Forwarding, DHCP, Services, and DNS Aliases +------------------------------------------------ -Click the **Port Forwarding, DHCP, and Services** link to navigate to these settings. This section provides a way for you to configure LAN network address reservations and service advertisements on your node. If your LAN network uses ``NAT`` mode, you may also need to define port forwarding rules. +Click the **Port Forwarding, DHCP, and Services** link to navigate to these settings. This provides a way for you to configure LAN network address reservations and service advertisements on your node. The page works differently based on the LAN Mode (Direct or NAT) that you are using on your node. -.. image:: _images/08-port-forward.png - :alt: Port Forwarding, DHCP, and Services +Direct Mode Operation +^^^^^^^^^^^^^^^^^^^^^ + +.. image:: _images/ports-direct-mode.png + :alt: Ports - Direct Mode Operation :align: center | -If your node is running its default DHCP server on the LAN network, it will automatically provide IP addresses to connected hosts. Look under the **Current DHCP Leases** heading to see the existing hosts and their assigned IP address. +In ``Direct`` mode the LAN hosts are directly accessible from the mesh since no address translation or port forwarding is involved. -.. attention:: The hostnames of computers connected to the mesh at large must be unique. Typically you should prefix your amateur radio callsign to the computer's hostname in order to have the best chance of it being unique on the mesh network. +DHCP Address Reservations + If your node has its DHCP server enabled, it will automatically provide IP addresses to connected hosts. Look under the **Current DHCP Leases** heading to see the existing hosts and their assigned IP addresses. -Since DHCP leases are dynamic and can change over time, there may be a reason why a host's assigned IP address should be made permanent. This is especially useful if that host will provide an application, program, or service through your node to the mesh network at large. You can permanently reserve that host's DHCP address by clicking the *Add* button at the right of the row in the *DHCP Leases* list. You will see that host now appears in the list under the **DHCP Address Reservations** heading above the list of leases. + .. attention:: The hostnames of computers connected to the mesh at large must be unique. Typically you should prefix your amateur radio callsign to the computer's hostname in order to have the best chance of it being unique on the mesh network. -There may be some devices on which you are not able to set the hostname prefixed by your callsign. Once you add that device to your **DHCP Address Reservations**, however, click the *Hostname* box to edit the hostname what will be propagated across the mesh network. You may also want to assign a specific IP Address to the device by selecting it from the drop-down list. If you have a device which needs to be reachable on its host node, but which should not be accessed across the mesh network, click the *Do Not Propagate* checkbox to prevent OLSR from propagating that information to the mesh. + Since DHCP leases are dynamic and can change over time, there may be a reason why a host's assigned IP address should be made permanent. This is especially useful if that host will provide an application, program, or service through your node to the mesh network at large. You can permanently reserve that host's DHCP address by clicking the *Add* button at the right of the row in the *Current DHCP Leases* list. You will see that host now appears in the list under the **DHCP Address Reservations** heading above the list of leases. + + There may be some devices on which you are not able to set the hostname prefixed by your callsign. Once you add that device to your **DHCP Address Reservations**, however, click the *Hostname* box to edit the hostname what will be propagated across the mesh network by your node. You may also want to assign a specific IP Address to the device by selecting it from the drop-down list. If you have a device which needs to be reachable on its host node, but which should not be accessed across the mesh network, click the *Do Not Propagate* checkbox to prevent OLSR from propagating that information to the mesh. + + Once you have entered the values for your DHCP Reservation, click *Add* to add it to the list. You may also remove an existing reservation by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your changes to the node's configuration. Advertised Services -^^^^^^^^^^^^^^^^^^^ + *Advertised Services* include the required applications, programs, or functions that are available to devices on the mesh network. The purpose of the network is to transport data for the services which are being used. Network services may include keyboard-to-keyboard chat or email programs, document sharing applications, Voice over IP phone or video conferencing services, streaming video from surveillance cameras, and a variety of other network-enabled features. Services can run on the node itself or on any of its LAN-connected devices. -*Services* include the required applications, programs, or functions that are available to devices on the mesh network. The purpose of the network is to transport data for the services which are being used. Network services may include keyboard-to-keyboard chat or email programs, document sharing applications, Voice over IP phone or video conferencing services, streaming video from surveillance cameras, and a variety of other network-enabled features. Services can run on the node itself or on any of its LAN-connected devices. + Remember that AREDN |trade| nodes have limited system resources with which to run services, so installing add-on services directly on the mesh node should be avoided because the node could become unstable if sufficient resources are not available for normal operation, particularly on devices with only 32 MB of memory. It is a best practice to run services on an external computer connected to the node's LAN network. In the example above you can see that an external host has been given a reserved DHCP address, and it is also running the *MeshChat* program as a service that is advertised on the network through this node. Use the following steps to create an Advertised Service. -Remember that AREDN |trade| nodes have a limited amount of system resources with which to run services, so installing add-on services directly on the mesh node should be avoided because the node will become unstable and the mesh network can fail if insufficient RAM is available for the node to function, particularly on devices with only 32 MB of memory. It is a best practice to run services on an external computer connected to the node's LAN network. In the example above you can see that an external host has been given a reserved DHCP address, and it is also running the *meshchat* program as a service that is advertised on the network through this node. Use the following steps to create an advertised service. + Name + Enter a service name in the *Name* field. -Name - Enter a service name in the *Name* field. + Link + Check this box if your want your advertised service to display an active link in the web browser. This allows mesh users to navigate to your service by clicking the link in their web browser. -Link - Check this box if your want your advertised service to display an active link in the web browser. This allows mesh users to navigate to your service by clicking the link. + Protocol + Enter the protocol to use in the field between *Link* and *URL*. Common protocols include ``http`` for website services and ``ftp`` for file transfer services. Other services may use other protocols. -Protocol - Enter the protocol to use in the field between *Link* and *URL*. Common protocols include ``http`` for website services and ``ftp`` for file transfer services. Other services may use other protocols. + URL + From the dropdown list select the node or host on which this service is running. If you defined DNS Aliases as described below, you can also select a host alias from the dropdown list. -URL - From the dropdown list select the node or host on which this service is running. + Port + Enter the network port on which the host is listening for service connections. There may be several applications provided through a single web server on a node or host using a single port, and in that case a valid application *Path* must be entered after the port number (as in the example above). In other cases the network port alone uniquely identifies the application or program that is listening for user connections to that service. You can find additional information at the following link: `Network Ports `_. -Port - Enter the network port on which the service is listening for user connections. There may be several applications provided through a single web server on a node or host using a single port, and in that case a valid application *Path* must be entered after the port number (as in the example above). In other cases the network port alone uniquely identifies the application or program that is listening for user connections to that service. You can click this link for additional information about `network ports `_. - -Once you have entered the values for your advertised service, click *Add* to add the service to the **Advertised Services** list. You may also remove an existing advertised service by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your changes to the node's configuration. + Once you have entered the values for your advertised service, click *Add* to add the service to the **Advertised Services** list. You may also remove an existing advertised service by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your changes to the node's configuration. A reboot is not required, and your new settings should take effect within thirty seconds. Port Forwarding -^^^^^^^^^^^^^^^ - -If you are using ``NAT`` for your LAN mode, then *Port Forwarding* rules are the only way other devices have for connecting to your services. To create a port forwarding rule, select the network **Interface** on which the traffic will enter your node. Select the Protocol **Type** used by the incoming packets (TCP, UDP, or Both). Enter the **Port** number that the external request is using to connect to your service. When your node receives traffic on the selected interface, protocol, and port, that request will be routed to the **LAN IP** address and **LAN Port** on which the service host is listening for incoming requests. - -Once you have entered these values, click *Add* to add the rule to the **Port Forwarding** list. You may also remove an existing rule by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your port forwarding changes to the node's configuration. - -See your node's **Help** file for additional insights on how this configuration section changes based on the LAN mode of your node. Click this link for more information on `Port Forwarding `_. + In Direct mode you will only be allowed to select the WAN interface so Port Forwarding is only meaningful for WAN-connected nodes. Enter the Outside Port being passed to your node from its upstream gateway, select a LAN host to process the requests, and enter the LAN Port on that host which is listening for those requests. Finally, click *Add* to add the port forwarding rule. You may also remove an existing rule by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your port forwarding changes to the node's configuration. More information can be found at this link for `Port Forwarding `_. DNS Aliases -^^^^^^^^^^^ + **DNS Aliases** provide a way for you to create a hostname alias for a services computer. This can be useful if you want a computer or device on your node's LAN network to be identified by something other than its actual hostname. Your DNS Alias will be propagated across the network even if the actual hostname has *Do Not Propagate* checked in its DHCP Reservation, allowing you to hide the actual hostname while still advertising the alias on the mesh. -**DNS Aliases** provide a way for you to create a mesh alias or synonym for a services computer. This can be useful if you want a computer or device on your node's LAN network to be identified by something other than its actual hostname. + To create an alias, enter an **Alias Name**. The alias should be prefixed with your callsign in order to follow the naming convention used when defining any unique host on the network. Then use the dropdown selector to choose the name or *IP Address* of the existing host for which you are defining the alias. Once you have entered these values, click *Add* to add the alias to the list. You may also remove an existing alias by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your changes to the node's configuration. -To create an alias, enter an **Alias Name**. The alias should be prefixed with your callsign in order to follow the naming convention used when defining any unique host on the network. Then use the drop-down selector to choose the name or **IP Address** of the existing host for which you are defining the alias. Once you have entered these values, click *Add* to add the alias to the **DNS Aliases** list. You may also remove an existing alias by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your changes to the node's configuration. + Once an alias is defined, the **DNS Aliases** become available for creating *Advertised Services*. This feature can be used for virtual domain email servers, virtual machine identifiers, virtual web site URLs, and many other services. -Aliases in Direct Mode - When your node is using ``Direct Mode`` for its LAN, *DNS Aliases* allow your computer or device to be reachable by its alias from across the mesh network. This provides functionality similar to DNS *CNAME* records, so the computer will respond to network requests using its real hostname as well as any aliases that are defined for it. +NAT Mode Operation +^^^^^^^^^^^^^^^^^^ - Once they are defined the **DNS Aliases** become available for creating *Advertised Services* by choosing the alias from the host drop-down selector. This feature can be used for virtual domain email servers, virtual machine identifiers, virtual web site URLs, and many other services. +.. image:: _images/ports-nat-mode.png + :alt: Ports - NAT Mode Operation + :align: center -Aliases in NAT Mode - *DNS Aliases* work differently in ``NAT Mode``. Aliases **cannot** be propagated across the mesh when using ``NAT Mode``. They are only visible within the local LAN network on the node. ``NAT Mode`` aliases **cannot** be used when defining an *Advertised Services* listing. They can only be used as an alternate hostname for a computer or device on the nodes' LAN. +| + +If you are using ``NAT`` for your LAN mode, then hosts on the LAN are isolated from both the Wifi and WAN interfaces by a firewall. This makes them inaccessible from either of these interfaces unless Port Forwarding is configured. In this mode all outgoing LAN traffic has its source address modified to be the Mesh RF IP address of the node. This is the same way that most home routers use an ISP Internet connection. + +Port Forwarding + Port forwarding rules can redirect inbound connections from the Wifi, WAN, or both interfaces and forward them to an IP address and port on the LAN. The destination port need not be the same unless you are forwarding a range of ports as explained below. + + To create a port forwarding rule, select the network *Interface* on which the traffic will enter your node. Select the *Protocol Type* used by the incoming packets (TCP, UDP, or Both). Enter the *Outside Port* number that the external request is using to connect to your service. When your node receives traffic on the selected interface, protocol, and port then that request will be routed to the *LAN IP* address and *LAN Port* of the host which is listening for incoming requests for that service. + + Once you have entered these values, click *Add* to add the rule to the **Port Forwarding** list. You may also remove an existing rule by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your port forwarding changes to the node's configuration. + + Example: + On the LAN of a mesh node called ``ad5oo-mobile`` there is an IP camera with an IP address of 172.27.0.240 which is running its own web display. To make that camera available to everyone on the mesh, create a port forwarding rule on the WiFi interface whose Outside Port is any unused port on your node (for example ``8100``) with an LAN IP of 172.27.0.240 and LAN Port of ``80``. This takes all connections to port ``8100`` on ``ad5oo-mobile`` and redirects them to port ``80`` on 172.27.0.240. In a web browser on a remote computer connected to the mesh you could go to ``http://ad5oo-mobile:8100`` to view the IP camera. + + If you want to forward a range of ports, the *Outside Port* field will accept a hyphen-separated range in the form "xxxx-xxxx". When doing this, set the LAN Port to the low value of the port range. + + If you want to forward every port that is not already in use to a single computer on the LAN, choose that host's IP Address from the **DMZ Server** dropdown. There can be only one DMZ Server. Be aware that this bypasses the firewall in the node, so the DMZ server should run its own firewall to prevent unauthorized access. + + Note that port forwarding to an FTP server, which uses both ports 20 and 21, can be done with a single rule using port 21 if the ftp client is capable of using passive ftp mode. Web browsers are able to do this and handle ftp downloads seamlessly. + +Advertised Services + In ``NAT`` mode Advertised Services will not be accessible until at least one port forwarding rule or a DMZ server has been defined as described above. Advertised Services are entered as they are for Direct mode, except that the URL field is always that of your node which is handling network address translation. The port number should be the one used as the *Outside Port* in the forwarding rule through which the service will be accessed. In the last field you can enter an optional path if needed, such as the name of a specific folder on a web server or a directory on an ftp server. + + Click *Add* to add the service to the **Advertised Services** list. You may also remove an existing service by clicking the *Del* button. Click the **Save Changes** button to write your changes to the node's configuration. + +DHCP Address Reservations + DHCP Address Reservations make a LAN device's IP address permanent so it can be used consistently when defining Port Forwarding rules, and they are added the same way as in Direct mode. If a LAN device is currently connected and has been given an IP address by DHCP then it will appear under *Current DHCP Leases*. If you click the *Add* button next to the lease then it will be added to the DHCP Reservations list. You may also remove an existing reservation by clicking the *Del* button to delete it from the list. Click the **Save Changes** button to write your changes to the node's configuration. When using ``NAT`` mode the IP addresses of LAN devices are **never** propagated across the mesh, so the *Do Not Propagate* checkbox will not appear on this page. + +DNS Aliases + DNS Aliases work differently in ``NAT`` mode. Aliases **cannot** be propagated across the mesh, and they **cannot** be used when defining an *Advertised Service*. They can only be used as an alternate name for a device on the nodes’ LAN. Tunnel Server -------------