Tenho notado uma tendência ultimamente. Ao invés de substituir um roteador quando ele literalmente pára de funcionar, eu precisei agir mais cedo – trocar de equipamento porque um roteador antigo não conseguia mais acompanhar o aumento da velocidade da Internet disponível na área. (Nota, estou devidamente agradecido por este problema.) Como exemplo mais recente, um monte de roteadores Netgear ProSafe 318G falharam comigo pela última vez, pois pequenas empresas passaram de 1.5-9mbps conexões T1 tradicionais para 50mbps coaxiais (cabo).
Sim, coaxo-não de fibra. Mesmo o coaxial provou ser demais para a antiga série ProSafe. Estes dispositivos não falharam apenas em acompanhar, eles caíram de cara. Frequentemente, os roteadores antigos caíram resultados de teste de velocidade de 9mbps com a conexão antiga para 3mbps ou menos com a conexão de 50mbps. Obviamente, isso não voa.
Hoje em dia, a resposta parece ser cada vez mais os roteadores sem fio. Estes tendem a ser longos em interfaces Web de plástico de aspecto escorregadio e cores vivas, mas curtos em características técnicas e fiabilidade. O que é um sistema mercenário a fazer? Bem, no seu núcleo, qualquer coisa com duas interfaces físicas de rede pode ser um roteador. E hoje, há muitas e muitas caixas genéricas relativamente rápidas, baratas e (super importante!) totalmente sólidas por aí.
Então, finalmente chegou o momento. Diante do envelhecimento do hardware e novas ofertas ao consumidor que não atendiam às minhas necessidades, decidi construir meu próprio roteador. E se o cenário de conectividade morphing de hoje o deixa numa posição semelhante, acontece que tanto o edifício como a construção são bastante rápidos.
Porquê fazê-lo da maneira mais difícil
Muitos de vocês estão provavelmente murmurando, “certo, pfSense, claro”. Alguns de vocês podem até estar a pensar em suavizar ou desembaraçar o GN. Eu brinquei com a maioria das distros de firewall por aí, mas decidi ir mais básico, mais antigo: uma instalação simples, apenas CLI do Ubuntu Server e algumas regras do iptables.
Admittedly, esta provavelmente não é a abordagem mais prática para todos os leitores, mas fez sentido para mim. Eu tenho um pouco de experiência finalizando o iptables e o próprio kernel Linux para alta taxa de transferência na escala da Internet, e quanto menos recursos brilhantes, gráficos e cliques forem colocados entre mim e a tabela do firewall, menos problemas eu tenho que sair do caminho e menos coisas novas não aplicáveis ao meu trabalho eu tenho que aprender. Qualquer regra que eu já saiba criar em iptables para gerenciar o acesso aos meus servidores, eu também sei como aplicar no meu firewall- se o meu firewall está rodando a mesma distro que os meus servidores são.
Também, eu trabalho bastante com OpenVPN, e eu quero poder continuar configurando tanto seus servidores quanto seus clientes da maneira que eu já confio. Algumas distros de firewall têm suporte a OpenVPN embutido e outras não, mas mesmo aquelas com built-ins tendem a esperar que as coisas funcionem de forma diferente do que eu. Mais uma vez, quanto mais o sistema ficar fora do meu caminho, mais feliz ficarei.
Como um bônus adicional, sei que posso muito facilmente manter tudo completamente atualizado no meu novo e completamente vanilla router Ubuntu. É tudo suportado diretamente pela Canonical, e pode (e tem) todas as atualizações automáticas ativadas. Adicione o ocasional cron job para reiniciar o router (para obter novos kernels), e eu sou golden.
Hardware, hardware, hardware
Vamos passar pelo how-to numa peça futura, mas hoje é importante estabelecer porque é que um router-build DIY pode ser a melhor opção. Para fazer isso, você primeiro precisa entender o cenário geral de hoje.
No mundo do consumo, os routers têm, na sua maioria, pequenas CPUs MIPS de pequeníssima dimensão debaixo do capô, sem muita RAM (para o dizer de forma suave). Estes roteadores se diferenciam amplamente uns dos outros com base na interface: Quão brilhante é? Quantos recursos técnicos ele tem? Os usuários podem descobrir facilmente?
No extremo superior do mercado SOHO, você começa a ver algumas CPUs ARM de grau smartphone-grade e muito mais RAM. Esses roteadores – como a série Nightgear Nighthawk, um dos quais nós estaremos martelando em multiplos núcleos, velocidades de relógio mais altas, e muito mais RAM. Eles também possuem etiquetas de preço muito mais alto do que a concorrência mais barata. Eu peguei um Linksys EA2750 por $89, mas o Netgear Nighthawk X6 que consegui com ele foi quase três vezes mais caro (mesmo em venda de férias!) por $249.
Still, eu queria ir por um caminho diferente. Um monte de máquinas sem ventilador x86-64 interessantes e razoavelmente baratas começaram a aparecer no mercado ultimamente. O truque para construir um roteador é encontrar um com várias DNIs. Você pode encontrar um par de apostas bastante seguras na Amazon, mas eles são processadores mais antigos baseados em Atom, e eu queria um Celeron mais novo. Depois de alguns bons e velhos processos de pesquisa na Internet, finalmente eu tomei o mergulho no Alibaba e pedi um novo Mini PC Partaker da Shenzhen Inctel Technology Company. Depois de $240 pelo próprio roteador e outros $48 por um SSD Kingston de 120GB de Newegg, eu tinha gasto cerca de $40 a mais no Homebrew Special do que eu tinha no Nighthawk. Valeria a pena?
Um desafiador aparece
Antes de começarmos os testes, vamos dar uma rápida olhada visual nos concorrentes.
Que o Falcão Nocturno é, em comparação com os outros, ENORME e imponente (ainda mais do que a imagem o faz parecer). Na verdade, é significativamente maior do que o meu Homebrew Special, que é um PC totalmente funcional, de uso geral, que você poderia usar como um desktop perfeitamente competente. É como se a DC Comics pedisse a H.R. Giger para dar uma mão desenhando um roteador sem fio para o Batman.
O próprio Homebrew Special é um pouco adorável. Ele tem um LED azul e um vermelho dentro da caixa, e à noite, a luz de ambos derrama indiretamente de suas aberturas de resfriamento, dando à pilha de rede um ar festivo de festa. Se houvesse algum ventilador para causar uma cintilação ele me deixaria louco, mas como é um brilho suave e constante, eu realmente gosto dele.
The Linksys and the Buffalo, por outro lado, parecem exatamente o que eles são roteadores baratos. No entanto, vale a pena notar que o estilo nos Linksys é uma grande melhoria em relação ao passado da marca. Parece mais algo profissional e menos como um brinquedo infantil. (Mas chega de estilização – é hora de colocar esses pobres roteadores na manopla.)
O primeiro desafio óbvio é um simples teste de largura de banda. Você coloca um computador no lado da LAN e um computador no lado da WAN, e você executa uma pequena e elegante ferramenta chamada iperf através do meio. Simples, à direita?
Bem, isso daria um artigo curto e enfadonho. A própria rede mede gigabit, os três roteadores gigabit medem gigabit, e o roteador de 100 megabit mede 100 megabit.
Na realidade, um teste tão simples nem sequer começa a contar a história. A única razão para fazer isso pode ser para mostrar como é inútil. Os fabricantes de roteadores estão se tornando mais conscientes de que as pessoas realmente testam seu produto, e nenhum fabricante quer que seu produto esteja em qualquer lugar a não ser no topo de algo como o gráfico do roteador de pequenas redes. À luz, os fabricantes estão ativamente perseguindo estatísticas hoje em dia.
O problema é que as estatísticas são apenas estatísticas. Ser capaz de atingir um número elevado num teste de rendimento puro é melhor do que nada, mas está muito longe de toda a história. Eu aprendi essa lição da maneira difícil enquanto trabalhava para um fornecedor T-1 no início dos anos 2000. Os seus modems Adtran extremamente caros podiam lidar bem com o uso normal da Internet por 50 a 100 pessoas, mas um único usuário rodando Limewire ou algum outro cliente P2P traria tudo isso em um piscar de olhos. (O conserto na época: colocar um roteador Netopia de $150 barato, mas incrível, na frente daquele caro modem Adtran. Problema resolvido.)
Even para roteamento relativamente simples – nenhuma inspeção profunda de pacotes, nenhuma varredura de streaming malware ou detecção de intrusão, nenhuma modelagem – a CPU e a RAM disponível para o roteador são importantes tanto acima como além da capacidade de saturar o link da Internet. O compartilhamento de arquivos peer-to-peer é a atividade mais brutal que uma rede verá hoje em dia (seja bittorrent, uma das variantes Gnutella ou eDonkey, ou o sistema de download peer-to-peer de uma empresa de jogos). Eu já tinha acabado de jogar WoW quando o sistema de distribuição P2P da Blizzard foi introduzido, mas meu colega de quarto, na época, não estava. No dia do seu lançamento, o novo sistema de download de WoW não foi utilizado sem nenhum tipo de estrangulamento. Ele alegremente tentou encontrar e manter conexões com literalmente milhares de clientes ao mesmo tempo, e minha rede doméstica foi abaixo como Gilbert Godfried sendo atacado por Terry Tate. Meu colega de quarto e eu tínhamos palavras.
Baseado em tal experiência passada, eu não quero apenas “testar” minimamente os meus desafiantes e chamar isso de dia, eu quero realmente fazê-los suar. Então, para fazer isso, vou atingi-los com cargas de trabalho que enfatizam três áreas problemáticas: saturar o link de rede, fazer e quebrar conexões TCP/IP individuais muito rapidamente, e manter um grande número de conexões TCP/IP individuais abertas ao mesmo tempo.
Eu tenho uma botnet no meu bolso, e estou pronto para abaná-la
Considerei brevemente a possibilidade de configurar algum tipo de monstruosidade hedionda, alimentada por Docker, com dezenas de milhares de containers Linux com endereços IP individuais, todos clamando por conexões e/ou servindo páginas web. Então eu caí em mim. No que diz respeito aos routers, não há diferença entre manter ligações a milhares de endereços IP individuais ou apenas a milhares de portas no mesmo endereço IP. Eu gastei um pouco de tempo transformando o servidor web favorito de Lee Hutchinson nginx em um ridículo monstro Lovecraftian com 10.000 cabeças e um apetite por destruição.
Para cada roteador, eu usei o ApacheBench para testar o download de um jpeg com três tamanhos diferentes de arquivo (10K, 100K, e 1M) em quatro níveis diferentes de concorrência (10, 100, 1.000, e 10.000 clientes simultâneos). Isso nos dá 12 testes no total, sem contar nosso teste iperf inicial, e vale a pena vê-los todos como uma espécie de espectro.
Na maioria dos aspectos, esse arquivo de 10K é mais desafiador. O tamanho pequeno do arquivo significa que você pode entregar muito mais arquivos individuais a cada segundo antes de saturar a interface, o que significa fazer e quebrar muito mais conexões TCP, o que é uma sobrecarga para a CPU do roteador. Por outro lado, o arquivo de 1M significa que você tem a garantia de manter mais conexões abertas nos níveis de concorrência mais altos. Vale a pena ver como os roteadores lidam com todo o espectro, porque cada nível faz um trabalho bastante decente de modelagem de um desafio bastante comum que um roteador pode precisar lidar (baixando ou enviando um grande número de e-mails, lidando com o compartilhamento de arquivos peer-to-peer, ou navegação na Web em geral de muitos usuários) se levado a um nível extremo.
Ultimamente, eu acabei precisando não só sintonizar o nginx, mas o próprio kernel do Linux, a fim de entregar de forma confiável o tipo de throughput que eu estava procurando. Os routers em si são “stock” – mesmo o meu Homebrew Special foi deixado por afinar – mas os servidores de teste, Menhir, e Monolith (cada um com AMD FX-8320 8-core CPU, 32GB DDR3 RAM, e Ubuntu Trusty OS patched completamente actualizado) precisavam de alguma massagem bastante séria para lidar com esse tipo de carga.
Com tanta loucura, você quer ter certeza do que seus servidores e rede reais são capazes de fazer antes de pular para qualquer conclusão sobre roteadores que você coloca entre eles. Para começar, primeiro testei o Menhir por si só na interface localhost (sem rede nenhuma) e depois testei entre os servidores através do meu switch de rede apenas (um Netgear ProSafe 16-port gigabit, caso você esteja se perguntando).
Os resultados do localhost não poderiam ter sido melhores – um throughput muito maior do que gigabit para cada teste. Na verdade, eu tive que limitar manualmente a escala do eixo Y do gráfico ou você teria dificuldade em ver os testes reais. O teste de rede direta não foi muito ruim, mas obviamente estamos começando a atingir alguns limites na parte superior. Não tenho certeza se o componente em dificuldades é o próprio switch ou as interfaces de rede onboard em ambos os servidores, mas algo não está completamente à altura do desafio. Mas é bom o suficiente para se trabalhar com ele. Está na hora de finalmente engajar os roteadores.
Vamos nos preparar para o ronco!
Eu estava um pouco nervoso. Já me senti bastante afectuoso com o meu pequeno dispositivo caseiro – afinal, fui eu que o construí. Eu sabia que ele dominaria facilmente o búfalo mais velho que eu cavei de uma gaveta e os Linksys, que era literalmente a coisa mais barata no Staples com uma interface gigabit. Mas poderia vencer aquele martelo a vapor atómico guiado a laser de um Falcão da Noite? Eu achei que sim, mas não tinha certeza.
Quando os testes de download foram terminados, não havia mais perguntas sobre o especial homebrew. Sim, poderia vencer o Falcão da Noite… e sair bocejando depois. Além de um pequeno mergulho no nível de conexões concorrentes de 10K (que desafia a CPU com as conexões mais feitas e quebradas), ele teve um desempenho quase idêntico ao da própria conexão de rede direta.
O Nighthawk, aliás, é realmente um ótimo roteador SOHO que eu tenho implantado bastante. No entanto, ele caiu quase imediatamente. Para os megabytes que baixam 10 de cada vez, ele foi de pescoço e pescoço. Com um desafio a mais, o desempenho começou a cair abruptamente.
Os Linksys, sem surpresa, não tiveram um bom desempenho. Mesmo uma tarefa tão simples como baixar 10 arquivos ao mesmo tempo reduziu seu rendimento para quase metade do que o ingênuo teste do iperf mostrou. As coisas só pioraram a partir daí, e ele não conseguiu nem mesmo completar vários testes. Pelo lado positivo, a Linksys faz um belo trabalho de demonstrar que o seu roteador realmente importa.
Finalmente, o valente pequeno Búfalo merece algum grito. Apesar de custar menos do que os Linksys quando era novinho em folha (oito anos atrás, lembre-se) e definhar em uma gaveta de escrivaninha por cinco anos, ele saiu do proverbial banco de bar e na verdade venceu os Linksys em metade dos testes. O Búfalo teve esse sucesso apesar de uma interface de rede que foi classificada para um décimo da velocidade. Isso é moxie. Da próxima vez que alguém pegar uma facada barata em produtos chineses feitos na hora, eu vou gritar “Lembre-se do Buffalo!”
Antes de chegar a qualquer conclusão, no entanto, as velocidades de upload precisam ser contabilizadas.
Por sorte, nada realmente mudou sobre as relações entre os roteadores aqui. O Homebrew ainda parece que não está sequer lá, quase completamente compatível com uma conexão de rede direta. O Falcão da Noite continua a dominar totalmente os Linksys, e o pequeno búfalo ainda está fazendo o seu melhor obsoleto. Em termos absolutos, você pode ver que tanto o Falcão da Noite quanto os Linksys estão fazendo um pouco melhor no upload do que estavam no download, mas não é nada para escrever para casa. Este resultado permanece o mesmo: o Especial Homebrew continua com a rede (estranhamente, mesmo fazendo melhor que uma conexão direta no teste de arquivo 10.000 conexões/10K), o Nighthawk vale claramente seu preço em comparação com o Linksys, e o Linksys é, bem, barato.
Com este gráfico final, nós temos um novo conjunto de resultados, embora as barras coloridas de salmão, que são bastante estáveis em um pouco mais de 200mbps através do gráfico. Esse é o Especial Homebrew Special flexionando seu músculo criptográfico. Ele tem um servidor OpenVPN rodando. Para esse teste, o servidor WAN-side, Menhir, está conectado ao servidor OpenVPN do roteador a bordo do OpenVPN. O tráfego para o lado LAN do Homebrew Special é roteado através do túnel VPN, então Menhir está atingindo o endereço IP LAN do Monolith (o servidor do lado LAN) por meio de uma impressionante criptografia de 2048 bits, baseada em SSL. Dado que ainda ninguém está oferecendo nenhuma conexão de Internet acima de 200mbps na minha área, isso faz meu nerd criptográfico interno dançar com alegria. Eu poderia literalmente criptografar cada byte do meu tráfego de Internet, em qualquer direção, sem penalidade de performance.
Uma advertência de fechamento rápido
Por mais impressionante que seja o meu pequeno Homebrew Special, há uma coisa que falta, que todos os outros três concorrentes oferecem: acesso sem fio. Eu poderia adicionar um cartão wireless ao Homebrew e fazê-lo servir wireless, mas atualmente eu não tenho planos de fazê-lo. Estou muito familiarizado com o que está disponível para cartões sem fio para PC, e todos eles cheiram mal no gelo. Até mesmo dispositivos baratos como o Linksys ou o Buffalo fariam um smackdown para cobertura e alcance wireless, e o Nighthawk não está nem na mesma liga. É realmente um martelo de vapor atômico guiado a laser quando se trata de alcance, cobertura e conectividade simultânea sem fio. (Eu tenho um deles cobrindo mais de 50 usuários em uma instalação de 53.000 pés quadrados de canto a canto agora mesmo.)
Com isso dito, nada o impede de usar um WAP (Wireless Access Point) separado estritamente para lidar com tarefas Wi-Fi. Na minha casa, isso é um par de WAPs Ubiquiti “hockey puck”, um para cada andar da casa. São um pouco mais de trabalho para gerir do que o Nighthawk, mas o par deles custa metade do que custa. Eles são dispositivos Linux bem padrão que podem ser SSH’ed diretamente para e são gerenciados a partir de uma pequena aplicação web bem legal que você pode rodar… você adivinhou, diretamente no Homebrew Special. (Migrando o Ubiquiti Server da minha estação de trabalho para o Homebrew Special será uma das minhas primeiras tarefas após esta peça, e eu vou promovê-lo para uso ativo em frente à minha rede de escritório em casa.)
Em nome do rigor, devemos observar uma limitação compartilhada, algo por todos os equipamentos de rede de consumo que eu já gerenciei: o desejo de reiniciar após quase qualquer mudança. Algumas dessas reinicializações demoram mais de um minuto. Eu não tenho a menor idéia do porquê, mas seja qual for a razão, o Homebrew Special não é afetado por esse padrão da indústria. Se fizeres uma mudança, aplica-la, estás feito. E se precisar de reiniciar o Especial? Voltará a subir dentro de 12 segundos. (Eu o cronometrei contando os pings que caíram.)
Então se os números o influenciaram, e você quer construir seu próprio Especial Homebrew, tudo o que é preciso é um PC com duas interfaces físicas de rede. Esse pode ser um mini PC especial como o que eu usei aqui, ou pode ser qualquer caixa velha que você tenha deitado ao redor e que você possa enfiar duas placas de rede. Não deixe que o primeiro screenshot o intimide. Construir o teu próprio router verdadeiramente rápido não é assim tão difícil de apanhar o jeito. E se você está clamando por um roadmap, na verdade, vamos delinear o processo desde “aqui é um computador normal” até “aqui é um roteador, e aqui está como você configura-o” em breve.
Jim Salter (@jrssnet) é um autor, orador público, dono de uma pequena empresa, administrador de sistemas mercenários, e pai de três – não necessariamente nessa ordem. Ele teve seu primeiro gosto real de código aberto rodando Apache em seu próprio servidor dedicado FreeBSD 3.1 em 1999, e tem sido um defensor ferrenho do FOSS desde então. Ele também criou e mantém http://freebsdwiki.net e http://ubuntuwiki.net.
.