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

    Wpad no pfsense

    Scheduled Pinned Locked Moved Portuguese
    32 Posts 4 Posters 9.5k 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.
    • 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
                                          • T
                                            tomaswaldow
                                            last edited by

                                            @isaiasbertin:

                                            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?

                                            Teste dessa forma ou faça um ip por linha.

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

                                            Tomas @ 2W Consultoria

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