Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Servicio Portal Cautivo queda colgado

    Scheduled Pinned Locked Moved Español
    5 Posts 2 Posters 1.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      COFroot
      last edited by

      Buenas tardes.
      Tenemos 2 años con nuestro pfsense con portal cautivo y autenticación por FreeRadius
      Tenemos CRON para que se reinicie el servidor una vez por semana y Service Watchdog por si un servicio no levanta.
      El caso es que algunos días el servicio de portal cautivo aun estando ejecutándose se queda colgado y no deja la navegación de los dispositivos que se conectan. Debemos reiniciarlo manualmente y es algo molestoso

      Tenemos alrededor de 130 usuarios y 15 AP

      Que comentarios nos tienen

      Gracias

      1 Reply Last reply Reply Quote 0
      • J
        javcasta
        last edited by

        Hola.

        Sin logs y debug seria adivinar la causa del problema.

        Un doc de pfSense de solución de problemas con Captive Portal.

        https://doc.pfsense.org/index.php/Captive_Portal_Troubleshooting

        Mientras averiguan la causa del problema, yo intentaria programar un Cron cada día a una hora, para parar el Captive Portal
        El comando seria, para una zona del captive portal llamada zona1

        /usr/local/sbin/pfSsh.php playback svc stop captiveportal zona1
        
        

        [2.3.2-RELEASE][root@pfSense.localdomain]/scripts: /usr/local/sbin/pfSsh.php playback svc stop captiveportal zona1

        Starting the pfSense developer shell….

        Attempting to issue stop to captiveportal service...

        captiveportal has been stopped.

        Y luego otro cron a la misma hora y un minuto después, iniciar Captive Portal

        /usr/local/sbin/pfSsh.php playback svc start captiveportal zona1
        
        

        [2.3.2-RELEASE][root@pfSense.localdomain]/scripts: /usr/local/sbin/pfSsh.php playback svc start captiveportal zona1

        Starting the pfSense developer shell….

        Attempting to issue start to captiveportal service...

        captiveportal has been started.

        Si tienes más zonas en captive portal, deberás crear un cron de parada y otro de inicio por cada zona.

        También puedes probar con sólo un Cron que reincie el Captive Portal con la opción restart (a veces parar un servicio, dejar pasar un delay de sgs, y volver a lanzarlo es más seguro, todo es probar)

        /usr/local/sbin/pfSsh.php playback svc restart captiveportal zona1
        

        [2.3.2-RELEASE][root@pfSense.localdomain]/scripts: /usr/local/sbin/pfSsh.php playback svc restart captiveportal zona1

        Starting the pfSense developer shell….

        Attempting to issue restart to captiveportal service...

        captiveportal has been restarted.

        Salu2

        Javier Castañón
        Técnico de comunicaciones, soporte y sistemas.

        Mi web: https://javcasta.com/

        Soporte scripting/pfSense https://javcasta.com/soporte/

        1 Reply Last reply Reply Quote 0
        • C
          COFroot
          last edited by

          Gracias Javier
          Excelente tu aporte
          No hemos dado cuenta que esto sucede cuando el DHCP leases esta al tope en direcciones IP arrendadas hasta con la sesiones expiradas. Es entonces que sucede esto. El pfSense queda con el servicio portal cautivo colgado.
          Lo que hemos hecho es manualmente borrar las sesiones expiradas.
          Estamos buscando como hacer este proceso automáticamente con el CRON si es posible

          Saludos.

          1 Reply Last reply Reply Quote 0
          • J
            javcasta
            last edited by

            Hola

            @COFroot:

            Gracias Javier
            Excelente tu aporte
            No hemos dado cuenta que esto sucede cuando el DHCP leases esta al tope en direcciones IP arrendadas hasta con la sesiones expiradas. Es entonces que sucede esto. El pfSense queda con el servicio portal cautivo colgado.
            Lo que hemos hecho es manualmente borrar las sesiones expiradas.
            Estamos buscando como hacer este proceso automáticamente con el CRON si es posible

            Saludos.

            Un script que acabo de implementar para que borre los dhcp leases con fecha de expiración menor al día de hoy del sistema

            Está en fase beta (es decir que lo he probado y me ha funcionado, pero conviene contrastarlo con más usuarios de pfSense)

            /*
             * release_old_dhcp_leases.php
             * By @Javcasta - Javier Castañon - https://javcasta.com/ 
             */
            
            $leasesfile = "/var/dhcpd/var/db/dhcpd.leases";
            exec("cat /var/dhcpd/var/db/dhcpd.leases", $salida);
            
            //echo "lineas: " . count($salida) . "\n";
            $today = date('Y/m/d');
            
            // Stop DHCPD
            //killbyname("dhcpd");
            echo "Stop dhcpd service... \n";
            exec("/usr/local/sbin/pfSsh.php playback svc stop dhcpd");
            sleep(5);
            
            // Read existing leases
            $newleases_contents = array();
            $i = 0;
            $marca = '}';
            
            while ($i < count($salida)) {
            	if (strpos($salida[$i],"lease ") !== false && strpos($salida[$i], " {") !== false ) {
            		$posendsdate = $i+2;
            		$endsdate = explode(" ", $salida[$posendsdate]);
            		//echo ">>>>> " . $endsdate[4] . "\n";
            		//si la fecha ends es < today NO
            		if ($endsdate[4] > $today || $endsdate[4] == $today) {
            			$newleases_contents[] = $salida[$i];
            			/* Skip to the end of the lease declaration */
            			do {
            				//echo "vamos por $i: $salida[$i] \n";
            				$i++;
            				$newleases_contents[] = $salida[$i];			
            			} while ($i < count($salida) && strpos($salida[$i], $marca) !== true);
            		}
            	} else {
            		//$newleases_contents[] = $salida[$i];
            	}
            	$i++;
            }
            //print_r(array_values($newleases_contents));
            $fd = fopen($leasesfile, 'w');
            fwrite($fd, implode("\n", $newleases_contents));
            fclose($fd);
            echo "Start dhcpd service... \n";
            exec("/usr/local/sbin/pfSsh.php playback svc start dhcpd"); 
            ?>
            
            

            El script release_old_dhcp_leases.php es para ejecutarse vía shell, así que hay que alojarlo en una carpeta (en la raiz o en otra carpeta, yo suelo usar /scripts , pero cada cual que use la que desee).

            El comando para ejecutarlo en un cron (suponiendo que se aloje en la carpeta /scripts )

            /usr/local/bin/php /scripts/release_old_dhcp_leases.php

            Salu2

            Javier Castañón
            Técnico de comunicaciones, soporte y sistemas.

            Mi web: https://javcasta.com/

            Soporte scripting/pfSense https://javcasta.com/soporte/

            1 Reply Last reply Reply Quote 0
            • J
              javcasta
              last edited by

              Hola

              Por cierto, como he observado que hay "editores de posts ajenos al autor del post en este foro", ya sea por errores humanos o del sistema … :) , conviene que la fuente de los scripts que publico sean de mi web .

              El script de este post lo tengo en:

              https://www.javcasta.com/pfsense-release_old_dhcp_leases-php-beta/

              Salu2

              Javier Castañón
              Técnico de comunicaciones, soporte y sistemas.

              Mi web: https://javcasta.com/

              Soporte scripting/pfSense https://javcasta.com/soporte/

              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.