[Solved] Multiple CP Not Working

  • Hi, i have a CP setup up and working but when i add a new one to a different VLAN the new Captive portal is able to authenticate but squid deny connection 403.

  • Rebel Alliance Developer Netgate

    That's a squid problem, not a captive portal problem. Try posting on the Cache/Proxy board.

  • Vlan 101-103 are on “CP1” and Vlan 108 is on “CP2”

    0_1530620574326_squi1.JPG 0_1530620580093_squi2.JPG

  • Why did you post your CP settings of one of your CP zones ?

    @jimp said in Multiples CP Not Working:

    That’s a squid problem, not a captive portal problem.

  • 0_1530631036764_cp1.JPG

  • The problem is that the code in /usr/local/bin/check_ip.php is incorrect.
    del /usr/local/bin/check_ip.php and use the following code.

    #!/usr/local/bin/php-cgi -q
     * check_ip.php
     * part of pfSense (https://www.pfsense.org)
     * Copyright (c) 2016-2017 Rubicon Communications, LLC (Netgate)
     * Copyright (c) 2013-2016 Marcello Coutinho
     * All rights reserved.
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     * http://www.apache.org/licenses/LICENSE-2.0
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
    global $g;
    // stdin loop
    if (!defined(STDIN)) {
    	define("STDIN", fopen("php://stdin", "r"));
    if (!defined(STDOUT)) {
    	define("STDOUT", fopen('php://stdout', 'w'));
    while (!feof(STDIN)) {
    	$check_ip = trim(fgets(STDIN));
    	$dbs = glob("{$g['vardb_path']}/captiveportal*.db");
    	$status = NULL;
    	foreach ($dbs as $db) {
    		if(!strpos($db, "_radius")) {
    			$status = squid_check_ip($db, $check_ip);
    			if (isset($status)){
    	if (!is_null($status)) {
    		fwrite(STDOUT, "OK user={$status}\n");
    	} else {
    		fwrite(STDOUT, "ERR\n");
    function squid_check_ip($db, $check_ip) {
    	exec("/usr/local/bin/sqlite3 {$db} \"SELECT ip FROM captiveportal WHERE ip='{$check_ip}'\"", $ip);
    	if ($check_ip == $ip[0]) {
    		exec("/usr/local/bin/sqlite3 {$db} \"SELECT username FROM captiveportal WHERE ip='{$check_ip}'\"", $user);
    		return $user[0];

  • Can't find /usr/local/bin/check_ip.php
    It's dealing with files related to the captive portal.

    Is this a file part of a package ?

  • @gertjan With squid. What is your pfsense version?

  • The latest :
    2.4.3-RELEASE-p1 (amd64)
    built on Thu May 10 15:02:52 CDT 2018
    FreeBSD 11.1-RELEASE-p10

  • @gertjan If you can not find this file, you do not have squid installed

  • I know.
    This thread talks about a Squid problem, not a captive portal problem.
    See also what @jimp said ;)

  • @magokbas Thanks, it worked!

Log in to reply