The UniFi Controller has no UI configuration to assign an additional IP for the UniFi Security Gateway (USG). Hopefully this will be added from Ubiquiti in the future.
Date: 25.12.2017
Controller Version: 5.6.26
Firmware: 4.4.12.5032482
After many hours of reading, try and error I was able to solve this task. This guide is focused on people with network basics, therefore I will not cover technically explanations.
UPDATE: Important, set only the values for the second IP inside config.gateway.json the settings like Port Forwarding for the first IP have to configured on the webinterface.
Attention: After following this guide you will see the first IP inside the USG Overview/Details pane and the second IP inside the Config pane in the webinterface. This looks like a bug UniFi Controller which can be ignored.
Goal:
NAT Public IP 10.0.0.2 on Port 80/TCP to internal server 192.168.0.2 on Port 8080/TCP.
Solution:
Overview:
- Test if the Port is closed
- Add the additional IP to the gateway
- Create a DNAT rule from WAN to LAN
- Create a SNAT rule from LAN to WAN
- Create a Firewall rule to allow traffic from WAN to LAN
- Apply changes
- Test if the Port is now open
NOTE: You can also add this with CLI commands but it will not persist after changes made from the Web-Interface.
Step 1
Test with NMAP from WAN/Internet
nmap -n -Pn -p 80 10.0.0.2
If this Port is open you should check your network setup because something is responding to 80/TCP and the next steps will potentially lead to undesired results.
Step 2-4
We need to create or append config.gateway.json inside the UniFi Controller. Place this file inside the site configuration, e.g. for the default page but the file inside “data/sites/default”
Content of config.gateway.json:
{ "interfaces": { "ethernet": { "eth0": { "address": [ "10.0.0.1/29", "10.0.0.2/29" ], "firewall": { "in": { "name": "WAN_IN" }, "local": { "name": "WAN_LOCAL" }, "out": { "name": "WAN_OUT" } } } } }, "service": { "nat": { "rule": { "3000": { "description": "DNAT 10.0.0.2 TCP/8080 to 192.168.0.2", "destination": { "address": "10.0.0.2", "port": "80" }, "inbound-interface": "eth0", "inside-address": { "address": "192.168.0.2", "port": "8080" }, "log": "enable", "protocol": "tcp", "type": "destination" }, "5000": { "description": "SNAT 192.168.0.2 TCP/8080 to 10.0.0.2", "log": "enable", "outbound-interface": "eth0", "outside-address": { "address": "10.0.0.2", "port": "80" }, "protocol": "tcp", "source": { "address": "192.168.0.2", "port": "8080" }, "type": "source" } } } }, "firewall": { "name": { "WAN_IN": { "default-action": "drop", "rule": { "1000": { "action": "accept", "description": "NAT 10.0.0.2 TCP/8080 to 192.168.0.2", "destination": { "address": "192.168.0.2", "port": "8080" }, "log": "enable", "protocol": "tcp" }, } } } } }
Step 5
Now it’s time to apply these rules to the USG. To do this log in to your UniFi Controller and force provisioning
Step 6
Test with NMAP from WAN/Internet
nmap -n -Pn -p 80 10.0.0.2
Hi,
can u help me out, what if a got two NAS Server in the background and I can reach each with a separate public IP, but when I configure ddns at the NAS, just on will work and the 2nd will route me if I am inside the lan always to the gateway? best
PS: Great Post!
We solved this problem yesterday in a remote session. The additional notes where added to the article.
Hairpin NAT isn’t specified here. Any examples?