2 LuCI - Lua Configuration Interface
4 Copyright 2008 Steven Barth <steven@midlink.org>
5 Copyright 2010 Jo-Philipp Wich <xm@subsignal.org>
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
11 http://www.apache.org/licenses/LICENSE-2.0
16 local sys = require "luci.sys"
17 local dsp = require "luci.dispatcher"
21 m = Map("firewall", translate("Traffic Redirection"),
22 translate("Traffic redirection allows you to change the " ..
23 "destination address of forwarded packets."))
25 m.redirect = dsp.build_url("admin", "network", "firewall")
27 if not m.uci:get(arg[1]) == "redirect" then
28 luci.http.redirect(m.redirect)
32 local has_v2 = nixio.fs.access("/lib/firewall/fw.sh")
35 m.uci:foreach("firewall", "zone",
37 local n = s.network or s.name
40 for i in n:gmatch("%S+") do
49 s = m:section(NamedSection, arg[1], "redirect", "")
53 s:tab("general", translate("General Settings"))
54 s:tab("advanced", translate("Advanced Settings"))
56 back = s:taboption("general", DummyValue, "_overview", translate("Overview"))
58 back.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "redirect")
60 name = s:taboption("general", Value, "_name", translate("Name"))
64 src = s:taboption("general", Value, "src", translate("Source zone"))
67 src.template = "cbi/firewall_zonelist"
69 proto = s:taboption("general", ListValue, "proto", translate("Protocol"))
71 proto:value("tcpudp", "TCP+UDP")
72 proto:value("tcp", "TCP")
73 proto:value("udp", "UDP")
75 dport = s:taboption("general", Value, "src_dport", translate("External port"),
76 translate("Match incoming traffic directed at the given " ..
77 "destination port or port range on this host"))
78 dport.datatype = "portrange"
79 dport:depends("proto", "tcp")
80 dport:depends("proto", "udp")
81 dport:depends("proto", "tcpudp")
83 to = s:taboption("general", Value, "dest_ip", translate("Internal IP address"),
84 translate("Redirect matched incoming traffic to the specified " ..
86 to.datatype = "ip4addr"
87 for i, dataset in ipairs(luci.sys.net.arptable()) do
88 to:value(dataset["IP address"])
91 toport = s:taboption("general", Value, "dest_port", translate("Internal port (optional)"),
92 translate("Redirect matched incoming traffic to the given port on " ..
94 toport.optional = true
98 target = s:taboption("advanced", ListValue, "target", translate("Redirection type"))
102 dest = s:taboption("advanced", Value, "dest", translate("Destination zone"))
105 dest.template = "cbi/firewall_zonelist"
107 src_dip = s:taboption("advanced", Value, "src_dip",
108 translate("Intended destination address"),
110 "For DNAT, match incoming traffic directed at the given destination "..
111 "ip address. For SNAT rewrite the source address to the given address."
114 src_dip.optional = true
115 src_dip.datatype = "ip4addr"
117 src_mac = s:taboption("advanced", Value, "src_mac", translate("Source MAC address"))
118 src_mac.optional = true
119 src_mac.datatype = "macaddr"
121 src_ip = s:taboption("advanced", Value, "src_ip", translate("Source IP address"))
122 src_ip.optional = true
123 src_ip.datatype = "ip4addr"
125 sport = s:taboption("advanced", Value, "src_port", translate("Source port"),
126 translate("Match incoming traffic originating from the given " ..
127 "source port or port range on the client host"))
128 sport.optional = true
129 sport.datatype = "portrange"
130 sport:depends("proto", "tcp")
131 sport:depends("proto", "udp")
132 sport:depends("proto", "tcpudp")
134 reflection = s:taboption("advanced", Flag, "reflection", translate("Enable NAT Loopback"))
135 reflection.rmempty = true
136 reflection:depends({ target = "DNAT", src = wan_zone })
137 reflection.cfgvalue = function(...)
138 return Flag.cfgvalue(...) or "1"