]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/connections.cgi
connections.cgi: Fix broken NAT rules when there is an empty destination IP address
[ipfire-2.x.git] / html / cgi-bin / connections.cgi
index c7220f62d164b46dc2c63b34178cdc2e0df2f600..4eb9cd7bfe8a8cfadc953facfce9eee53e3acc5a 100644 (file)
@@ -238,6 +238,23 @@ if (-e "${General::swroot}/ovpn/settings") {
        }
 }
 
+# Add OpenVPN net for custom OVPNs
+if (-e "${General::swroot}/ovpn/ccd.conf") {
+       open(OVPNSUB, "${General::swroot}/ovpn/ccd.conf");      
+       my @ovpnsub = <OVPNSUB>;
+       close(OVPNSUB);
+
+       foreach (@ovpnsub) {
+               my ($network, $mask) = split '/', (split ',', $_)[2];
+               
+               $mask = ipv4_cidr2msk($mask) unless &General::validip($mask);
+
+               push(@network, $network);
+               push(@masklen, $mask);
+               push(@colour, ${Header::colourovpn});
+       }
+}
+
 open(IPSEC, "${General::swroot}/vpn/config");
 my @ipsec = <IPSEC>;
 close(IPSEC);
@@ -503,7 +520,8 @@ foreach my $line (@conntrack) {
        }
 
        my $sip_colour = ipcolour($sip);
-       my $dip_colour = ipcolour($dip);
+       # use colour of destination network for DNAT
+       my $dip_colour = $dip ne $dip_ret ? ipcolour($dip_ret) : ipcolour($dip);
 
        my $sserv = '';
        if ($sport < 1024) {
@@ -522,7 +540,7 @@ foreach my $line (@conntrack) {
        $ttl = format_time($ttl);
 
        my $sip_extra;
-       if ($sip ne $sip_ret) {
+       if ($sip_ret && $sip ne $sip_ret) {
                $sip_extra = "<span style='color:#FFFFFF;'>&gt;</span> ";
                $sip_extra .= "<a href='/cgi-bin/ipinfo.cgi?ip=$sip_ret'>";
                $sip_extra .= " <span style='color:#FFFFFF;'>$sip_ret</span>";
@@ -530,7 +548,7 @@ foreach my $line (@conntrack) {
        }
 
        my $dip_extra;
-       if ($dip ne $dip_ret) {
+       if ($dip_ret && $dip ne $dip_ret) {
                $dip_extra = "<span style='color:#FFFFFF;'>&gt;</span> ";
                $dip_extra .= "<a href='/cgi-bin/ipinfo.cgi?ip=$dip_ret'>";
                $dip_extra .= " <span style='color:#FFFFFF;'>$dip_ret</span>";
@@ -643,15 +661,17 @@ sub ipcolour($) {
        my ($ip) = $_[0];
        my $found = 0;
 
-       foreach my $line (@network) {
-               if ($network[$id] eq '') {
-                       $id++;
-               } else {
-                       if (!$found && ipv4_in_network($network[$id], $masklen[$id], $ip) ) {
-                               $found = 1;
-                               $colour = $colour[$id];
+       if ($ip) {
+               foreach my $line (@network) {
+                       if ($network[$id] eq '') {
+                               $id++;
+                       } else {
+                               if (!$found && ipv4_in_network($network[$id], $masklen[$id], $ip) ) {
+                                       $found = 1;
+                                       $colour = $colour[$id];
+                               }
+                               $id++;
                        }
-                       $id++;
                }
        }