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

    Wpad no pfsense

    Scheduled Pinned Locked Moved Portuguese
    32 Posts 4 Posters 9.3k 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.
    • I
      isaiasbertin
      last edited by

      boa noite pessoal

      estou configurando um wpad.dat, mas estou com duvida na configuração esta configuração que tenho esta funcionando

      
      function FindProxyForURL(url, host)
      {
      	var host_ip;
      		host_ip= dnsResolve(host);
      			if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
      				return "DIRECT";
      			if (isInNet(myIpAddress(), "192.168.15.0", "255.255.255.0"))
      				return "PROXY 192.168.15.1:3128";
      			else
      				return "DIRECT";
      }
      
      

      aqui já possui uma opção para ignorar as rede localhost, mas como posso para fazer se tenho alguns site que quero não passe pelo proxy e como configurar mais uma rede, pois este arquivo vou usar em duas rede

      a rede 192.168.15.0 usa o proxy 192.168.15.1:3128 já a rede 192.168.2.0 usa o proxy 192.168.2.1:3128

      a perguntas para os amigos é como posso estar configurando isso neste scripts.

      1 Reply Last reply Reply Quote 0
      • T
        tomaswaldow
        last edited by

        
        function FindProxyForURL(url,host){
        
          // resolve o ip do host
          var host_ip=dnsResolve(host);
        
          // If the requested website is hosted within the internal network, send direct.
          if (isPlainHostName(host) ||
            isInNet(host_ip, "10.0.0.0", "255.0.0.0") ||
            isInNet(host_ip, "172.16.0.0",  "255.240.0.0") ||
            isInNet(host_ip, "192.168.0.0",  "255.255.0.0") ||
            isInNet(host_ip, "127.0.0.0", "255.255.255.0"))
          return "DIRECT";
        
          // Dominio sem proxy
          //if (shExpMatch(host, "site.a.b.c") || shExpMatch(host, "site.x.y.z")) return "DIRECT";
        
          // IP sem proxy
          //if (myIpAddress(), "0.0.0.0.0", "255.255.255.0") return "DIRECT";
        
          // Regra deafult com proxy 
          return "PROXY 192.168.1.1:3128";
        }
        
        

        Esse que uso pra uma rede, só fazer as adaptações.
        Observe que se quiser usar uma regra de bypass precisa descomentar a linha removendo os "//";

        Tomas @ 2W Consultoria

        1 Reply Last reply Reply Quote 0
        • I
          isaiasbertin
          last edited by

          boa noite Tomas Waldow

          se o wpad for para uma outra rede sendo que o proxy é diferente sabes como posso fazer?

          é que tenho duas rede e cada é independente mais irá usar o pfsense como base.

          1 Reply Last reply Reply Quote 0
          • R
            reinaldo.feitosa
            last edited by

            Isaias tenho este funcionando para várias redes:

            
            function FindProxyForURL(url, host){
               var host_ip;
            
               host_ip= dnsResolve(host);
               if (isInNet(myIpAddress(), "192.168.7.0", "255.255.255.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "192.168.7.0", "255.255.255.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 192.168.7.1:3128";
               else if (isInNet(myIpAddress(), "192.168.12.0", "255.255.255.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "192.168.12.0", "255.255.255.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 192.168.12.1:3128";
               else if (isInNet(myIpAddress(), "192.168.13.0", "255.255.255.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "192.168.13.0", "255.255.255.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 192.168.13.1:3128";
               else if (isInNet(myIpAddress(), "192.168.14.0", "255.255.255.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "192.168.14.0", "255.255.255.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 192.168.14.1:3128";
               else if (isInNet(myIpAddress(), "192.168.15.0", "255.255.255.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "192.168.15.0", "255.255.255.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 192.168.15.1:3128";
               else if (isInNet(myIpAddress(), "192.168.16.0", "255.255.255.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "192.168.16.0", "255.255.255.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 192.168.16.1:3128";
               else if (isInNet(myIpAddress(), "172.16.0.0", "255.255.0.0"))
                  if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                     return "DIRECT";
                  else if (isInNet(host_ip, "172.16.0.0", "255.255.0.0"))
                     return "DIRECT";
                  else 
                     return "PROXY 172.16.0.1:3128";
               else
                  return "DIRECT";
            }
            
            
            1 Reply Last reply Reply Quote 0
            • I
              isaiasbertin
              last edited by

              Reinaldo bacana seu script

              você o tomas recomendo usar como, tenho sites e ips não não vão usar o proxy, é melhor usar no script ou fazer uma outro processo no pfsense se houver

              como posso usar aptar uma parte do Tomas

              
               // Dominio sem proxy
                //if (shExpMatch(host, "site.a.b.c") || shExpMatch(host, "site.x.y.z")) return "DIRECT";
              
                // IP sem proxy
                //if (myIpAddress(), "0.0.0.0.0", "255.255.255.0") return "DIRECT";
              
              

              podes dar uma dica

              1 Reply Last reply Reply Quote 0
              • T
                tomaswaldow
                last edited by

                
                function FindProxyForURL(url,host){
                
                  // If the requested website is hosted within the internal network, send direct.
                  if (isPlainHostName(host) ||
                    isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
                    isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0") ||
                    isInNet(dnsResolve(host), "192.168.0.0",  "255.255.0.0") ||
                    isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
                  return "DIRECT";
                
                  // Dominio sem proxy
                  //if (shExpMatch(host, "site.a.b.c") || shExpMatch(host, "site.x.y.z")) return "DIRECT";
                
                  // IP sem proxy
                  //if (myIpAddress(), "0.0.0.0.0", "255.255.255.0") return "DIRECT";
                
                  // Regra deafult com proxy em ordem de fail-ver 
                  return "PROXY 1.2.3.4:3128; PROXY 5.6.7.8:3128";
                }
                
                

                Pode usar esse, muda conforme precisa.
                Na ultima linha coloca as redes que vai usar, no caso ele tante o primeiro e se não encontra vai no segundo.

                E os ips que não vão usar cria uma linha fazendo o bypass para cada IP.

                Tomas @ 2W Consultoria

                1 Reply Last reply Reply Quote 0
                • I
                  isaiasbertin
                  last edited by

                  vou testar tomas

                  obrigado fera

                  1 Reply Last reply Reply Quote 0
                  • R
                    reinaldo.feitosa
                    last edited by

                    @isaiasbertin:

                    Reinaldo bacana seu script

                    você o tomas recomendo usar como, tenho sites e ips não não vão usar o proxy, é melhor usar no script ou fazer uma outro processo no pfsense se houver

                    como posso usar aptar uma parte do Tomas

                    
                     // Dominio sem proxy
                      //if (shExpMatch(host, "site.a.b.c") || shExpMatch(host, "site.x.y.z")) return "DIRECT";
                    
                      // IP sem proxy
                      //if (myIpAddress(), "0.0.0.0.0", "255.255.255.0") return "DIRECT";
                    
                    

                    podes dar uma dica

                    Tem várias formas pra fazer isso é uma questão de lógica.

                    Fiz uma alteração na primeira rede com o exemplo do Tomas junto.

                    
                    function FindProxyForURL(url, host){
                       var host_ip;
                    
                       host_ip= dnsResolve(host);
                       if (isInNet(myIpAddress(), "192.168.7.0", "255.255.255.0")) 
                          if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                             return "DIRECT";
                          else if (isInNet(host_ip, "192.168.7.0", "255.255.255.0"))
                             return "DIRECT";
                          else if (shExpMatch(host, "site.a.b.c") || shExpMatch(host, "site.x.y.z")) 
                             return "DIRECT";
                          else if myIpAddress() = "0.0.0.0.0"
                             return "DIRECT";
                          else
                             return "PROXY 192.168.7.1:3128";
                       else if (isInNet(myIpAddress(), "192.168.12.0", "255.255.255.0"))
                          if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                             return "DIRECT";
                          else if (isInNet(host_ip, "192.168.12.0", "255.255.255.0"))
                             return "DIRECT";
                          else 
                             return "PROXY 192.168.12.1:3128";
                       else if (isInNet(myIpAddress(), "192.168.13.0", "255.255.255.0"))
                          if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                             return "DIRECT";
                          else if (isInNet(host_ip, "192.168.13.0", "255.255.255.0"))
                             return "DIRECT";
                          else 
                             return "PROXY 192.168.13.1:3128";
                       else if (isInNet(myIpAddress(), "192.168.14.0", "255.255.255.0"))
                          if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                             return "DIRECT";
                          else if (isInNet(host_ip, "192.168.14.0", "255.255.255.0"))
                             return "DIRECT";
                          else 
                             return "PROXY 192.168.14.1:3128";
                       else if (isInNet(myIpAddress(), "192.168.15.0", "255.255.255.0"))
                          if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                             return "DIRECT";
                          else if (isInNet(host_ip, "192.168.15.0", "255.255.255.0"))
                             return "DIRECT";
                          else 
                             return "PROXY 192.168.15.1:3128";
                       else if (isInNet(myIpAddress(), "192.168.16.0", "255.255.255.0"))
                          if (isInNet(host_ip, "127.0.0.1", "255.255.255.255"))
                             return "DIRECT";
                          else if (isInNet(host_ip, "192.168.16.0", "255.255.255.0"))
                             return "DIRECT";
                    }
                    
                    

                    Eu separei o proxy por rede, mas poderia ser mesmo pra todas as redes. Seria o exemplo do Tomas com uma observação o proxy teria que ser a primeira linha, pois na ultima sem nenhum condição ele vai retornar o proxy para os ips e redes que passou para direct nas condições acima
                    o correto seria:

                    
                    function FindProxyForURL(url,host){
                    
                      // Regra deafult com proxy em ordem de fail-ver 
                      return "PROXY 1.2.3.4:3128; PROXY 5.6.7.8:3128";
                    
                      // If the requested website is hosted within the internal network, send direct.
                      if (isPlainHostName(host) ||
                        isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
                        isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0") ||
                        isInNet(dnsResolve(host), "192.168.0.0",  "255.255.0.0") ||
                        isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
                      return "DIRECT";
                    
                    

                    // Dominio sem proxy
                      //if (shExpMatch(host, "site.a.b.c") || shExpMatch(host, "site.x.y.z")) return "DIRECT";

                    // IP sem proxy
                      //if (myIpAddress(), "0.0.0.0.0", "255.255.255.0") return "DIRECT";

                    }

                    1 Reply Last reply Reply Quote 0
                    • I
                      isaiasbertin
                      last edited by

                      Bacana Reinaldo

                      vou fazer os teste feras.

                      1 Reply Last reply Reply Quote 0
                      • T
                        tomaswaldow
                        last edited by

                        Não está errado não, a regra default tem que ser a última, não pode ser a primeira.
                        Senão não faz sentido a outras linhas, pois elas verificam o destino se é local, etc.

                        A regra lá é em fail over, vai tentar um e caso não encontre tenta o segundo, sem precisar como "if" para ver que rede está.

                        Pode ver no site: http://findproxyforurl.com/example-pac-file/

                        Tomas @ 2W Consultoria

                        1 Reply Last reply Reply Quote 0
                        • R
                          reinaldo.feitosa
                          last edited by

                          @Tomas:

                          Não está errado não, a regra default tem que ser a última, não pode ser a primeira.
                          Senão não faz sentido a outras linhas, pois elas verificam o destino se é local, etc.

                          A regra lá é em fail over, vai tentar um e caso não encontre tenta o segundo, sem precisar como "if" para ver que rede está.

                          Pode ver no site: http://findproxyforurl.com/example-pac-file/

                          Tomas, analisando a lógica do java script ele retorna o valor da functcion no return e não no final da function como outra linguagens.

                          Se foce como o pascal por exemplo o return teria sempre o ultimo valor, por isso fiz esta confusão. Pelo que analisei no primeiro return que ele encontra ja termina a function com o retorno. Desta forma no meu script não precisa de tantos else if, pois eu usei isso pra isolar cada condição.

                          Vou rescrever o meu script e posto aqui

                          1 Reply Last reply Reply Quote 0
                          • T
                            tomaswaldow
                            last edited by

                            Então, eu não gosto desses "if", acho que acaba complicando.
                            Da forma que passei fica mais simples.

                            Tomas @ 2W Consultoria

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

                              @reinaldo.feitosa:

                              // Regra deafult com proxy em ordem de fail-ver
                                return "PROXY 1.2.3.4:3128; PROXY 5.6.7.8:3128";

                              aqui você está chamando a função return e não definindo um valor pra ela, por isso seu script parava sempre no primeiro teste.

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

                              Help a community developer! ;D

                              1 Reply Last reply Reply Quote 0
                              • T
                                tomaswaldow
                                last edited by

                                Marcello, este exemplo peguei do site: http://findproxyforurl.com/example-pac-file/

                                La consta como abaixo:
                                // DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
                                return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080";

                                Pra mim está funcionando.

                                Tomas @ 2W Consultoria

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

                                  No final, não no começo.

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

                                  Help a community developer! ;D

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    tomaswaldow
                                    last edited by

                                    Certo, entendi.

                                    Tomas @ 2W Consultoria

                                    1 Reply Last reply Reply Quote 0
                                    • I
                                      isaiasbertin
                                      last edited by

                                      colocar esta condição sempre no final do script certo

                                      // DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
                                      return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080";

                                      1 Reply Last reply Reply Quote 0
                                      • T
                                        tomaswaldow
                                        last edited by

                                        Sim, mas só se for usar mais de uma rede.
                                        Para uma rede só não precisa colocar os dois IPs.

                                        Para ma rede pode ser: return "PROXY 192.168.1.1:3128";

                                        Tomas @ 2W Consultoria

                                        1 Reply Last reply Reply Quote 0
                                        • R
                                          reinaldo.feitosa
                                          last edited by

                                          @marcelloc:

                                          @reinaldo.feitosa:

                                          // Regra deafult com proxy em ordem de fail-ver
                                            return "PROXY 1.2.3.4:3128; PROXY 5.6.7.8:3128";

                                          aqui você está chamando a função return e não definindo um valor pra ela, por isso seu script parava sempre no primeiro teste.

                                          Sim Marcelo, agora entendi, em outras linguagens o valor é definido e o return só acontece no final da function, por isso fiz confusão. Agora entendi que o return esta saindo da funciona então não precisa de tantos else if.

                                          1 Reply Last reply Reply Quote 0
                                          • I
                                            isaiasbertin
                                            last edited by

                                            Tomas para colocar mais de um ip fora do proxy

                                            if (myIpAddress(), "192.168.2.2", "255.255.255.0", "192.168.2.3", "255.255.255.0") return "DIRECT";

                                            é desta forma?

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