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

    [Resolvido] Problemas com SQUID e várias VLANs

    Scheduled Pinned Locked Moved Portuguese
    7 Posts 2 Posters 640 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.
    • R
      rafakoller
      last edited by

      Boa tarde.

      Estou tento um problema inusitado.
      Pode ser que haja alguma forma mais simples de fazer isso, de forma que resolva e, por isso, recorro à comunidade para pensarmos juntos.
      Eis o meu cenário:
      Uma rede com 200 pontos remotos, e cada ponto desse, possui uma rede com classe /24, todos interligados a mim via fibra (sim, é uma rede metro).
      O hardware do servidor é bom e não apresenta gargalos de processamento, memória, etc (uso de MBUF não chega a 1% e a tabela de estados também).
      Precisei trabalhar com VLANs na rede, e cada um dos pontos possui uma VLAN diferente, o que cria uma interface associada à minha LAN para cada VLAN.
      No cada interface criada pela VLAN, é o gateway correspondente do ponto. Por exemplo: VLAN 20, interface 192.168.20.1/24.
      O DHCP na rede interna do ponto remoto aponta esta interface como gateway.
      Tudo funciona mil maravilhas, ping para todos os lados.
      Na hora de habilitar o proxy é que vem o problema.
      Após configurar todas VLANs, interfaces, todo tráfego testado, habilitei as interfaces no proxy.
      Aos poucos, conforme fomos fazendo as ativações, tudo foi subindo e funcionando perfeitamente, até que em um determinado ponto, comecei a ter problemas com o serviço do squid que não subia mais.
      Analisando os logs, me deparei com um erro de configuração, na leitura de uma instrução específica do squid.conf: "acl localnet src"
      Esta instrução lista todas as redes autorizadas a utilizar o proxy, inclusive as equivalentes às interfaces criadas pelas VLANs.
      O problema é que no arquivo, ela lista todas as redes certinho, todas separadas por um espaço, porém no log, o erro está informando que há um ip incorreto, e ao analisá-lo, percebi que a linha que lista as redes equivalentes às interfaces (acl localnet src), está incompleta, cortando parte da instrução, gerando um determinado erro:

      
      /pkg_edit.php: O comando '/usr/local/sbin/squid -k reconfigure -f /usr/local/etc/squid/squid.conf' retornou o código de saída '1', a saída foi '2018/04/18 20:44:02| aclIpParseIpData: Bad host/IP: '192.16' in '192.16', flags=0 : (8) hostname nor servname provided, or not known FATAL: Bungled /usr/local/etc/squid/squid.conf line 207: acl localnet src 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 ...>>  adiantando ...>>192.168.98.0/24 192.168.99.0/24 192.168.100.0/24 192.168.101.0/24 192.16
      
      

      Percebam que ele dá um erro de ip desconhecido e corta uma classe no final da instrução.
      Quando eu reduzo a quantidade de interfaces liberadas no proxy, ele funciona normalmente…

      Deduzo quê:
      Por algum motivo (bug talvez), ele limita a quantidade de caracteres na instrução "acl localnet src", limitação esta que não acontece no arquivo squid.conf, uma vez que eu abri ele pra conferir, e as instruções estão lá, certinhas...

      Afim de tentar um plano B, alterei manualmente, colocando uma classe por linha, como exemplificado aqui: http://www.squid-cache.org/Doc/config/acl/ porém não tive muito êxito pois toda vez que preciso fazer alguma liberação, alteração, onde se faz necessária a aplicação dos serviços, ele modifica novamente o arquivo voltando ao estado de erro.

      Alguém já passou por situações semelhantes e conseguiu resolver de alguma forma que não fosse segmentar a carga em servidores diferentes?

      Alguém sabe como posso modificar o core, de maneira que a instrução seja gravada no squid.conf individualmente, por linha (não por espaço como é feita), assim como instrui o squid.org?

      Abraço a todos.

      1 Reply Last reply Reply Quote 0
      • marcellocM
        marcelloc
        last edited by

        desmarca a opção de allow localnet e cadastra no squid uma faixa de ip que englobe todos , ex 192.168.0.0/16

        Treinamentos de Elite: http://sys-squad.com

        Help a community developer! ;D

        1 Reply Last reply Reply Quote 0
        • R
          rafakoller
          last edited by

          Obrigado pela força.

          Não encontrei a opção que vc mencionou.
          Na ACL já está uma range que engloba todos.

          Não posso unificar a interface por conta das VLANs de cada ponto.

          …

          1 Reply Last reply Reply Quote 0
          • marcellocM
            marcelloc
            last edited by

            @rafakoller:

            Obrigado pela força.

            Não encontrei a opção que vc mencionou.

            Esta opção:
            Allow Users on Interface
            If checked, the users connected to the interface(s) selected in the 'Proxy interface(s)' field will be allowed to use the proxy.
            There will be no need to add the interface's subnet to the list of allowed subnets.

            Na ACL já está uma range que engloba todos.

            @rafakoller:

            Não posso unificar a interface por conta das VLANs de cada ponto.

            Quis dizer fazer um acl com todas as redes "englobadas" e uma unica acl. A configuração das interfaces permanece intacta.

            Treinamentos de Elite: http://sys-squad.com

            Help a community developer! ;D

            1 Reply Last reply Reply Quote 0
            • R
              rafakoller
              last edited by

              Infelizmente não funcionou marcelloc.

              alguma outra sugestão?

              abs

              1 Reply Last reply Reply Quote 0
              • marcellocM
                marcelloc
                last edited by

                @rafakoller:

                alguma outra sugestão?

                Comenta no código(squid.inc)  a linha que gera a configuração que da erro no squid e declara ela de forma estática ou no custom_options ou no proprio código do squid.

                Pelo menos no código que eu vi, essa linha só é gerada quanto a opção de allow subnets está marcada.

                squid_acl.PNG_thumb
                squid_acl.PNG
                squid_acl_opcao.PNG
                squid_acl_opcao.PNG_thumb

                Treinamentos de Elite: http://sys-squad.com

                Help a community developer! ;D

                1 Reply Last reply Reply Quote 0
                • R
                  rafakoller
                  last edited by

                  Grande marcelloc.

                  Obrigado pela LUZ !!!

                  Deu certo da seguinte forma (alterando o arquivo squid.inc)

                  
                  	if ($settings['allow_interface'] == 'on') {
                  		$src = '';
                  		foreach ($real_ifaces as $iface) {
                  			list($ip, $mask) = $iface;
                  			$ip = long2ip(ip2long($ip) & ip2long($mask));
                  			$mask = 32 - log((ip2long($mask) ^ ip2long('255.255.255.255')) +1, 2);
                  			if (!preg_match("@$ip/$mask@", $src)) {
                  				// XXX: Do not add invalid subnets (Bug #4331, Bug #4526)
                  				if (is_subnet("{$ip}/{$mask}")) {
                                                          # $src .= " $ip/$mask"; // alterado para atender a rede METRO
                  					$src .= "acl localnet src $ip/$mask\n";
                  				} else {
                  					log_error("[squid] 'Allow Users on Interface' ACL skipped for '{$ip}/{$mask}' since it is not a valid subnet.");
                  				}
                  			}
                  		}
                  		if (!empty($src)) {
                  			$conf .= "# Allow local network(s) on interface(s)\n";
                  			#$conf .= "acl localnet src $src\n"; // alterado para atender a rede METRO
                                          $conf .= "$src\n";
                  			$valid_acls[] = 'localnet';
                  		}
                  	}
                  
                  

                  Com esta alteração, ao invés das ranges de IPs das interfaces ficarem lado a lado no squid.conf, elas ficam uma sobre a outra, sendo liberadas individualmente.

                  o que era:

                  
                  acl localnet src 192.168.10.0/24 192.168.11.0/24 192.168.12.0/24 ...
                  
                  

                  ficou assim:

                  
                  acl localnet src 192.168.10.0/24 
                  acl localnet src 192.168.11.0/24 
                  acl localnet src 192.168.12.0/24 
                  ...
                  
                  

                  Obrigado pela dica.

                  abs.

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