#!/usr/bin/perl # Display a form for editing or creating a NAT rule require './ipfilter-lib.pl'; &ReadParse(); $rules = &get_ipnat_config(); if ($in{'delsel'}) { # Special case - deleting selected rules @nums = sort { $b cmp $a } split(/\0/, $in{'d'}); if (@nums) { &lock_file($rules->[$nums[0]]->{'file'}); foreach $n (@nums) { &delete_rule($rules->[$n]); } &flush_file_lines(); &unlock_file($rules->[$nums[0]]->{'file'}); &webmin_log("delsel", "nat", undef, { 'count' => scalar(@nums) }); } &redirect(""); exit; } if ($in{'newmap'} || $in{'newrdr'}) { &ui_print_header(undef, $text{'nat_title1'}, ""); $rdr = $in{'newrdr'} ? 1 : 0; $rule = { 'action' => $rdr ? 'rdr' : 'map', 'active' => 1, 'toip' => '0.0.0.0', 'tomask' => 32 }; } else { $rule = $rules->[$in{'idx'}]; &ui_print_header(undef, $text{'nat_title2'}, ""); $rdr = $rule->{'action'} eq 'rdr' ? 1 : 0; } if (!$rdr) { # Javascript for disabling fields print <<EOF; <script> function from_change(dis) { var f = document.forms[0]; for(i=0; i<f.elements.length; i++) { e = f.elements[i]; if (e.name.substring(0, 4) == "from" && e.name != "frommode" && e.name != "fromip" && e.name != "frommask") { e.disabled = dis; } } } </script> EOF } print &ui_form_start("save_nat.cgi", "post"); print &ui_hidden("new", $in{'newmap'} || $in{'newrdr'}),"\n"; print &ui_hidden("idx", $in{'idx'}),"\n"; print &ui_hidden("before", $in{'before'}),"\n"; print &ui_hidden("after", $in{'after'}),"\n"; @tds = ( "width=20%", undef ); print &ui_table_start($text{'nat_header1'}, "width=100%", 2); # Comment print &ui_table_row($text{'edit_cmt'}, $rule->{'cmt'} =~ /\n/ ? &ui_textarea("cmt", $rule->{'cmt'}, 3, 50) : &ui_textbox("cmt", $rule->{'cmt'}, 50), undef, \@tds); # Enabled print &ui_table_row($text{'edit_active'}, &ui_radio("active", $rule->{'active'} ? 1 : 0, [ [ 1, $text{'edit_active1'} ], [ 0, $text{'edit_active0'} ] ])); # NAT mode if ($rdr) { print &ui_table_row($text{'nat_action'}, $text{'action_rdr'}); print &ui_hidden("action", "rdr"),"\n"; } else { print &ui_table_row($text{'nat_action'}, &ui_select("action", $rule->{'action'}, [ [ "map", $text{'action_map'} ], [ "bimap", $text{'action_bimap'} ], [ "map-block", $text{'action_map-block'} ] ])); } print &ui_table_end(),"<p>\n"; if (!$rdr) { # Show section for source print &ui_table_start($text{'nat_header2'}, "width=100%", 2); # NAT interface print &ui_table_row($text{'nat_iface'}, &interface_choice("iface", $rule->{'iface'}, 1)); # Source mode and address print &ui_table_row($text{'nat_frommode'}, &ui_radio("frommode", $rule->{'from'} ? 1 : 0, [ [ 0, &text('nat_frommode0', &ipmask_input("from"))."<br>", "onClick='from_change(true)'" ], [ 1, $text{'nat_frommode1'}, "onClick='from_change(false)'" ] ])); ($ft, $pt) = &object_input($rule, "from"); print &ui_table_row($text{'edit_from'}, $ft); print &ui_table_row($text{'edit_portfrom'}, $pt); ($ft, $pt) = &object_input($rule, "fromto"); print &ui_table_row($text{'edit_to'}, $ft); print &ui_table_row($text{'edit_portto'}, $pt); print &ui_table_end(),"<p>\n"; # Show section for destination print &ui_table_start($text{'nat_header3'}, "width=100%", 2); # Destination address print &ui_table_row($text{'nat_tomode'}, &ui_radio("tomode", $rule->{'tostart'} ? 1 : $rule->{'toip'} eq '0.0.0.0' && $rule->{'tomask'} == 32 ? 2 : 0, [ [ 2, $text{'nat_tomode2'}."<br>" ], [ 0, &text('nat_tomode0', &ipmask_input("to"))."<br>" ], [ 1, &text('nat_tomode1', &ui_textbox("tostart", $rule->{'tostart'}, 15), &ui_textbox("toend", $rule->{'toend'}, 15)) ] ])); # Port mapping print &ui_table_row($text{'nat_portmap'}, &ui_radio("portmapmode", $rule->{'portmap'} ? 1 : 0, [ [ 0, $text{'nat_portmap0'}."<br>" ], [ 1, &text('nat_portmap1', &protocol_input("portmap", $rule->{'portmap'}, 0, 1), &ui_checkbox("portmapnoauto", 1,"", $rule->{'portmapfrom'}), &ui_textbox("portmapfrom", $rule->{'portmapfrom'}, 5), &ui_textbox("portmapto", $rule->{'portmapto'}, 5)) ] ])); # Proxy mapping print &ui_table_row($text{'nat_proxy'}, &ui_radio("proxymode", $rule->{'proxyport'} ? 1 : 0, [ [ 0, $text{'nat_proxy0'}."<br>" ], [ 1, &text('nat_proxy1', &ui_textbox("proxyport", $rule->{'proxyport'}, 5), &ui_textbox("proxyname", $rule->{'proxyname'}, 5), &protocol_input("proxyproto", $rule->{'proxyproto'}, 0, 0)) ] ])); print &ui_table_end(),"<p>\n"; # Show section for other options print &ui_table_start($text{'nat_header4'}, "width=100%", 2); print "<table>\n"; print "<tr> <td>",&ui_checkbox("proto", 1, $text{'nat_proto'}, $rule->{'proto'}),"</td>\n"; print "<td>",&protocol_input("protoproto", $rule->{'proto'}, 0, 1), "</td> </tr>\n"; print "<tr> <td colspan=2>",&ui_checkbox("frag", 1, $text{'nat_frag'}, $rule->{'frag'}),"</td> </tr>\n"; print "<tr> <td>",&ui_checkbox("mssclamp", 1, $text{'nat_clampmss'}, $rule->{'mssclamp'}),"</td>\n"; print "<td>",&ui_textbox("mss", $rule->{'mssclamp'}, 5)," ", "$text{'nat_bytes'}</td> </tr>\n"; # Proxy mapping print "<tr> <td>",&ui_checkbox("oproxy", 1, $text{'nat_oproxy'}, $rule->{'oproxyport'}),"</td>\n"; print "<td>",&text('nat_oproxy1', &ui_textbox("oproxyport", $rule->{'oproxyport'}, 5), &ui_textbox("oproxyname", $rule->{'oproxyname'}, 5), &protocol_input("oproxyproto", $rule->{'oproxyproto'}, 0, 0)),"</td> </tr>\n"; print &ui_table_end(); } else { # Show section for source print &ui_table_start($text{'nat_header5'}, "width=100%", 2); # NAT interface print &ui_table_row($text{'nat_iface'}, &interface_choice("iface", $rule->{'iface'}, 1)); # Packets to redirect print &ui_table_row($text{'nat_redir'}, &ipmask_input("from")); # Destination ports print &ui_table_row($text{'nat_dports'}, &ui_radio("dportsmode", $rule->{'dport2'} ? 1 : 0, [ [ 0, &text('nat_dports0', &ui_textbox("dport", $rule->{'dport1'}, 10)) ], [ 1, &text('nat_dports1', &ui_textbox("dport1", $rule->{'dport1'}, 10), &ui_textbox("dport2", $rule->{'dport2'}, 10)) ] ])); print &ui_table_row($text{'nat_rdrproto'}, &protocol_input("rprproto", $rule->{'rdrproto'}, 0, 1)); print &ui_table_end(),"<p>\n"; # Show section for destination print &ui_table_start($text{'nat_header6'}, "width=100%", 2); print &ui_table_row($text{'nat_rdrip'}, &ui_textarea("rdrip", join("\n", @{$rule->{'rdrip'}}), 3, 50)); print &ui_table_row($text{'nat_rdrport'}, &ui_textbox("rdrport", $rule->{'rdrport'}, 10)); print &ui_table_end(),"<p>\n"; # Show section for other options print &ui_table_start($text{'nat_header4'}, "width=100%", 2); print "<table>\n"; print "<tr> <td colspan=2>",&ui_checkbox("round-robin", 1, $text{'nat_robin'}, $rule->{'round-robin'}),"</td> </tr>\n"; print "<tr> <td colspan=2>",&ui_checkbox("frag", 1, $text{'nat_frag'}, $rule->{'frag'}),"</td> </tr>\n"; print "<tr> <td>",&ui_checkbox("mssclamp", 1, $text{'nat_clampmss'}, $rule->{'mssclamp'}),"</td>\n"; print "<td>",&ui_textbox("mss", $rule->{'mssclamp'}, 5)," ", "$text{'nat_bytes'}</td> </tr>\n"; print &ui_table_end(); } if ($in{'newmap'} || $in{'newrdr'}) { print &ui_form_end([ [ 'create', $text{'create'} ] ], "100%"); } else { print &ui_form_end([ [ 'save', $text{'save'} ], [ 'delete', $text{'delete'} ] ], "100%"); } if (!$rdr) { $dis = $rule->{'from'} ? "false" : "true"; print "<script>from_change($dis);</script>\n"; } &ui_print_footer("", $text{'index_return'}); # ipmask_input(prefix) sub ipmask_input { local ($pfx) = @_; return &ui_textbox($pfx."ip", $rule->{$pfx."ip"}, 15)." / ". &ui_textbox($pfx."mask", $rule->{$pfx."mask"}, 15); }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
CHANGELOG | File | 896 B | 0644 |
|
apply.cgi | File | 271 B | 0755 |
|
backup_config.pl | File | 604 B | 0755 |
|
bootup.cgi | File | 252 B | 0755 |
|
cluster.cgi | File | 2.01 KB | 0755 |
|
cluster_add.cgi | File | 1.78 KB | 0755 |
|
cluster_delete.cgi | File | 522 B | 0755 |
|
config | File | 155 B | 0644 |
|
config-freebsd | File | 149 B | 0644 |
|
config-solaris-10-ALL | File | 177 B | 0644 |
|
config.info | File | 669 B | 0644 |
|
config.info.ca | File | 717 B | 0644 |
|
config.info.de | File | 743 B | 0644 |
|
config.info.nl | File | 741 B | 0644 |
|
convert.cgi | File | 341 B | 0755 |
|
edit_nat.cgi | File | 7.83 KB | 0755 |
|
edit_rule.cgi | File | 9.81 KB | 0755 |
|
index.cgi | File | 8.42 KB | 0755 |
|
install_check.pl | File | 337 B | 0755 |
|
ipfilter-lib.pl | File | 39.32 KB | 0755 |
|
log_parser.pl | File | 928 B | 0755 |
|
module.info | File | 198 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 129 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 183 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 180 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 232 B | 0644 |
|
module.info.ca | File | 121 B | 0644 |
|
module.info.cs | File | 0 B | 0644 |
|
module.info.cs.auto | File | 121 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 117 B | 0644 |
|
module.info.de | File | 97 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 239 B | 0644 |
|
module.info.es | File | 0 B | 0644 |
|
module.info.es.auto | File | 118 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 117 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 182 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 123 B | 0644 |
|
module.info.fr | File | 0 B | 0644 |
|
module.info.fr.auto | File | 132 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 166 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 121 B | 0644 |
|
module.info.hu | File | 0 B | 0644 |
|
module.info.hu.auto | File | 150 B | 0644 |
|
module.info.it | File | 0 B | 0644 |
|
module.info.it.auto | File | 130 B | 0644 |
|
module.info.ja | File | 0 B | 0644 |
|
module.info.ja.auto | File | 179 B | 0644 |
|
module.info.ko | File | 0 B | 0644 |
|
module.info.ko.auto | File | 140 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 144 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 134 B | 0644 |
|
module.info.ms | File | 0 B | 0644 |
|
module.info.ms.auto | File | 125 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 123 B | 0644 |
|
module.info.nl | File | 26 B | 0644 |
|
module.info.nl.auto | File | 109 B | 0644 |
|
module.info.no | File | 0 B | 0644 |
|
module.info.no.auto | File | 126 B | 0644 |
|
module.info.pl | File | 0 B | 0644 |
|
module.info.pl.auto | File | 117 B | 0644 |
|
module.info.pt | File | 0 B | 0644 |
|
module.info.pt.auto | File | 116 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 122 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 128 B | 0644 |
|
module.info.ru | File | 0 B | 0644 |
|
module.info.ru.auto | File | 166 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 126 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 125 B | 0644 |
|
module.info.sv | File | 0 B | 0644 |
|
module.info.sv.auto | File | 122 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 202 B | 0644 |
|
module.info.tr | File | 0 B | 0644 |
|
module.info.tr.auto | File | 154 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 186 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 198 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 149 B | 0644 |
|
module.info.zh | File | 0 B | 0644 |
|
module.info.zh.auto | File | 110 B | 0644 |
|
module.info.zh_TW | File | 0 B | 0644 |
|
module.info.zh_TW.auto | File | 116 B | 0644 |
|
move.cgi | File | 427 B | 0755 |
|
natmove.cgi | File | 432 B | 0755 |
|
save_nat.cgi | File | 5.06 KB | 0755 |
|
save_rule.cgi | File | 4.88 KB | 0755 |
|
setup.cgi | File | 6.12 KB | 0755 |
|
unapply.cgi | File | 235 B | 0755 |
|