[Resolvido] Problemas com SQUID e várias VLANs



  • 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.



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



  • 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.



  • @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.



  • Infelizmente não funcionou marcelloc.

    alguma outra sugestão?

    abs



  • @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.






  • 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.


 

© Copyright 2002 - 2018 Rubicon Communications, LLC | Privacy Policy