Usando o Raspberry Pi como roteador?


50

Alguém já usou o Raspberry Pi como um dispositivo de roteamento?

Principalmente, quero usá-lo para monitorar minha rede, e seria ótimo se tivesse uma entrada e uma saída para Ethernet, mas não tem, por isso estou pensando se é muito eficaz monitorar a rede com a entrada Ethernet. e, em seguida, usando um dongle USB como roteador Wi-Fi. Alguém já fez algo como isso? Isso diminui muito a velocidade da Internet?


3
Depende da velocidade da sua conexão à Internet. O meu é 100Mb, então eu tenho certeza que ele iria retardá-lo;)
— John La Rooy

3
Eu tenho uma conexão de internet de 30 Mbps e, neste momento, com 5 Mbps de tráfego, meu raspberry pi inline com snort consome ~ 50-95% da CPU e 85% de memória. Minha configuração ainda não foi ajustada, mas quero mostrar alguns números reais.
— Pipe

alguém não como alocação de largura de banda funciona com um roteador personalizado usando raspberry pi? tipo, eu tenho uma velocidade de conexão de internet de 3 Mbps, tenho 10 usuários. você pode explicar como será dividido? a velocidade de 3 Mbps. Obrigado. Espero que você entenda. :)
— kirbs

2
Olá kirbs. Evite fazer uma pergunta em outra pergunta. Em vez disso, abra uma nova pergunta com o link Perguntar na parte superior da página. Obrigado.

Respostas:


30

Eu tenho usado meu modelo B como um roteador com modelagem de tráfego, usando apenas a porta Ethernet que ele acompanha. Aqui está uma rápida e suja sobre como:

  1. Habilite o encaminhamento IPv4 , para que seu Pi atue como um roteador encaminhando qualquer tráfego recebido
  2. Configure seu Pi com a configuração de rede estática para que não seja influenciado pelas alterações de DHCP sugeridas abaixo. Aqui estão os conteúdos do meu /etc/network/interfacescomo referência:

    # pi@flux:/home/pi/projects/adsl/rrdlogger (master *)
    # cat /etc/network/interfaces 
    auto lo
    
    iface lo inet loopback
    #iface eth0 inet dhcp
    iface eth0 inet static
            address 192.168.1.1
            netemask 255.255.255.0
            gateway 192.168.1.254    # IP of my ADSL router box
    
    allow-hotplug wlan0
    iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp
    
  3. Agora altere as configurações de DHCP da sua rede para que o gateway / roteador padrão seja o seu Pi. Isso provavelmente significa alterar as configurações da caixa do roteador ADSL existente. No meu exemplo acima, o endereço IP do meu Pi é 192.168.1.1.

Quando seus dispositivos se reconectarem à rede, eles serão informados de que seu Pi é o gateway da Internet e todo o tráfego conectado à Internet será enviado a ele. O seu Pi, por sua vez, retransmitirá todo esse tráfego para o roteador usual. Pode ser necessário desconectar e reconectar seus dispositivos para que essas alterações entrem em vigor.

Agora você pode criar ou instalar uma ferramenta para fazer seu monitoramento, como o vnstat .

Modelagem de tráfego

Quanto à modelagem de tráfego, aqui está outro guia rápido e sujo que fará uso de minha própria variante pessoal de formador de maravilhas .

Para que isso seja útil, você precisa saber a velocidade da sua conexão à Internet. Geralmente, você pode encontrar isso na interface da web do roteador (original), mas na falta de obter uma estimativa usando um teste de velocidade .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0imprimirá o status atual da modelagem de tráfego. Obviamente, o status esperado é que não há modelagem, o que significa que existe uma única regra em vigor, chamada pfifo_fast:

    • ( eth0é o nome do adaptador de rede com fio em um modelo B. Consulte ifconfigos nomes das interfaces no seu sistema)
    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
     Sent 1908 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0
    
  4. sudo ./wondershaper eth0 3000 370, Onde:

    • 3000é a velocidade de downlink da minha conexão à Internet em kbit . Então 3Mbit == 3000kbit
    • 370 é a velocidade de conexão da minha conexão à Internet, em kbit novamente.
  5. sudo ./wondershaper eth0 agora deve mostrar muito mais saída:

    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 0
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 40: parent 1:40 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 10: parent 1:10 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 20: parent 1:20 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 30: parent 1:30 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc ingress ffff: parent ffff:fff1 ---------------- 
     Sent 768 bytes 12 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    class htb 1:1 root rate 370000bit ceil 370000bit burst 10Kb cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 3459453 ctokens: 540531
    
    class htb 1:10 parent 1:1 leaf 10: prio 1 rate 370000bit ceil 370000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 540531 ctokens: 540531
    
    class htb 1:20 parent 1:1 leaf 20: prio 2 rate 246000bit ceil 246000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 813000 ctokens: 813000
    
    class htb 1:30 parent 1:1 leaf 30: prio 3 rate 74000bit ceil 74000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 2702687 ctokens: 2702687
    
    class htb 1:40 root leaf 40: prio 0 rate 100000Kbit ceil 100000Kbit burst 512Kb cburst 1600b 
     Sent 3486 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 15 borrowed: 0 giants: 0
     tokens: 654609 ctokens: 1250
    

Seu tráfego de rede de saída agora está sendo modelado pelo seu Pi e seu tráfego de entrada está sendo diminuído levemente para garantir que o Pi, e não sua caixa de roteamento original, tenha controle de tráfego.

Para desativar a modelagem, basta executar sudo ./wondershaper eth0 clear. Você pode alterar as taxas de uplink e downlink sem limpar primeiro, mas isso não prejudica.

Atualização: Você também precisa desativar a transmissão de redirecionamentos de ICMP , pois precisamos que todo o tráfego passe pelo Pi para que a configuração ocorra. Acontece que o kernel do Linux é inteligente o suficiente para descobrir que os clientes em sua rede doméstica poderiam conversar diretamente com a caixa ADSL, em vez de direcionar o tráfego pelo Pi, e isso é informado a cada oportunidade. Os clientes então enviam o tráfego diretamente para sua caixa ADSL, e o Pi não tem chance de moldá-lo. Desative-o imediatamente, perdido (quando você reiniciar novamente):

echo 0 | sudo tee /proc/sys/net/ipv4/conf/*/send_redirects

Atualize o seguinte para definir isso durante a inicialização: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Agradecemos a https://unix.stackexchange.com/a/58081/22537 por esta dica)

Você também pode estar interessado em minhas notas pessoais sobre a configuração de um gateway Linux: http://www.robmeerman.co.uk/unix/gateway


como você define o nome e a senha da rede wifi à qual outros dispositivos podem se conectar?
— fommil

Um ótimo guia. Tenho uma pergunta sobre sua wondershapersugestão: o limite é por cliente ou em geral?
— 6603 Bob

@fommil: Meu guia acima supõe que você ainda use o modem / roteador / ponto de acesso WiFi fornecido pelo seu ISP, mas que você o configure de modo que todos os clientes que se conectem recebam a mensagem "Enviar tráfego para o Pi". Isso geralmente é feito inserindo o endereço IP do seu Pi (estático!) Nas configurações de DHCP da sua caixa ISP. Normalmente, em um campo chamado "Gateway", "Gateway padrão" ou talvez "Rota padrão".
— RobM

@ Bob: Os números digitados são o total do seu link de internet. O script mais maravilhoso que as tentativas de compartilhar isso com todos os seus clientes com base na demanda . Portanto, se apenas um cliente estiver usando a Internet, ele deverá receber 100% dela. Se outro cliente for iniciado, após um pouco de "tempo de acomodação" (~ 10 segundos) acabará usando 50% cada, e assim por diante.
— RobM

Perfeito. Apenas uma observação para @fommil, nenhum dos meus roteadores (e eu presumo que muitos outros sejam iguais) fornece uma maneira fácil de definir o gateway atribuído via DHCP. Acabei desligando o DHCP no roteador e configurando um servidor DHCP no Pi - é um processo bastante simples (procure um guia, se quiser).
— Bob

10

Tendo um pouco de background de rede, a primeira coisa que vem à mente é usá-lo como uma caixa de Snort e, então, você não precisa se preocupar em ter apenas uma interface. Você configuraria seu switch / roteador para encaminhar todo o tráfego para o Pi, mas também passá-lo para o dispositivo final. Isso é conhecido como monitor de porta de switch, mas seu dispositivo pode não suportá-lo. Você pode precisar de uma opção gerenciada para fazer isso. Snort analisaria o tráfego e apresentaria um relatório. Mais informações em Snort http://www.snort.org/

O bom desse tipo de configuração é que seu Pi está sentado ao lado, assistindo tudo o que está sendo executado pelo comutador, em vez de ficar alinhado com os dados. Se você tiver uma falha de software dessa maneira, o tráfego ainda poderá fluir, mas não será monitorado. Com o que você está descrevendo com duas interfaces, seu programa falha, sua rede falha.

Isso não usa o pi como roteador, mas permite monitorar e relatar o tráfego que está se movendo pela sua rede.


7

Eu usei o Raspberry Pi para roteamento e funcionou bem. Como você diz, você precisa de pelo menos mais uma interface de rede, pois o Raspberry Pi possui apenas uma porta Ethernet. Você pode adicionar outra interface conectada à porta USB. Eu usei um modem GSM e um stick Wi-Fi.

Coisas a serem observadas:

  • Use um hub USB alimentado. Os dispositivos Wi-Fi e GSM exigem mais energia do que o que as portas USB do Raspberry Pi podem fornecer.
  • Se você comprar dispositivos Wi-Fi, obtenha um com bom suporte ao Linux. Você quer um que funcione no modo de ponto de acesso e nem todos os manípulos funcionam. Verifique em linuxwireless.org .

Aqui está meu post sobre roteamento e outro sobre como configurar um ponto de acesso Wi-Fi . Este guia me ajudou com a configuração de roteamento. O material de roteamento não é muito específico para o Raspberry Pi; qualquer coisa que funcione no Linux em geral deve ser possível. Os detalhes dependem um pouco de qual distribuição você usa.


4

Estou usando o Raspberry Pi como roteador há cerca de um mês, sem problemas. Eu tenho uma porta de acesso Wi-Fi comercial real, não um roteador Wi-Fi doméstico, então usei isso. Eu também tenho um conversor USB-Ethernet que foi "emprestado" do Wii. Isso vai para a LAN doméstica e a Ethernet interna do Raspberry Pi vai para a WAN / Internet.

Vá buscar uma cópia do IPFire para o Raspberry Pi. Você deseja a versão ARM, sem um console serial e a versão estável mais recente. Clique na guia ARM. Faça o download da "Imagem para a arquitetura armv5tel".

Inicialize com isso. Conecte uma TV e teclado HDMI. Responda às primeiras perguntas. O restante da configuração pode ser feito a partir de um navegador na rede doméstica, para que você não precise da TV ou do teclado depois disso.

Não foi muito difícil e funcionou como um campeão! Aqui estão as instruções formais: http://wiki.ipfire.org/en/hardware/arm/rpi

Uma última coisa. Se você for usar um dongle Wi-Fi com alimentação USB, verifique a fonte de alimentação do seu Raspberry Pi. Uma fonte de alimentação USB de 700 mA pode ser suficiente para alimentar o Raspberry Pi, mas não deixa muito para alimentar o Wi-Fi. Use um hub USB energizado ou energize o Raspberry Pi com uma fonte de alimentação USB de 1 a 2 A.
Boa sorte!


1

(Este adendo segue a minha resposta anterior , que foi um guia sobre como configurar o seu Pi como gateway da Internet da sua LAN)

Não contente em monitorar meu uso geral da Internet, escrevi uma ferramenta que monitora o uso da Internet de cada dispositivo na minha LAN. Isso me permite ver o uso instantâneo em uma janela do console e gerar gráficos de uso histórico para que eu possa ver o que aconteceu da noite para o dia.


Rhodes , uma ferramenta para monitorar o uso histórico e em tempo real da rede de dispositivos LAN (com base no endereço MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Amostra de saída do console:

193 kiB/s TX     17 kiB/s RX   0004edbf98c0   home.gateway (Billion Electric Co.)
  0 kiB/s TX      0 kiB/s RX   2002af18dc15   Samsung Galaxy Tab 10.1, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c01197b   Nintendo 3DS:XL, Robert
  0 kiB/s TX      0 kiB/s RX   34af2c3af204   Nintendo 3DS:XL, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c9cfffd   Nintendo WiiU
  0 kiB/s TX      0 kiB/s RX   6045bd9c9dbc   Xbox360 Slim
  0 kiB/s TX      0 kiB/s RX   745e1c56c297   Pioneer SX-LX57
 13 kiB/s TX    109 kiB/s RX   7831c1be0c34   Az Pro (Macbook Pro)
  0 kiB/s TX      0 kiB/s RX   80ea96e6214e   Roberts-AirPort-Time-Capsule
  0 kiB/s TX      0 kiB/s RX   88308a770370   Samsung Galaxy S3, Vicky
189 kiB/s TX    211 kiB/s RX   b827eb8fc0f3   Flux (Raspberry Pi)
  2 kiB/s TX     39 kiB/s RX   b8e8563acb34   Macbook Pro, Vicky
  0 kiB/s TX      0 kiB/s RX   d022be2c26ef   Samsung Galaxy Note 3, Rob
  0 kiB/s TX      0 kiB/s RX   f82fa89368ea

A primeira coluna mostra a quantidade de dispositivos que estão transmitindo, o que geralmente significa fazer o upload para a Internet. A exceção é o próprio roteador ADSL (home.gateway na amostra acima) que transmite dados recebidos do ISP do dispositivo que o solicitou (ou seja, downloads). Obviamente, ele também transmite uploads para a Internet, mas faz isso usando seu modem ADSL, que não está na LAN e, portanto, não é visível para esta ferramenta.

A outra exceção seria o próprio Raspberry Pi ("Flux" no exemplo acima), que naturalmente transmite todos os dados que gerencia, nas duas direções.

Mas, além dessas exceções, os números TX (transmissão) se referem ao upload e os números RX (recebimento) ao download. A terceira coluna é o endereço MAC do dispositivo (sem os separadores ":" ou "-" usuais). A quarta coluna mostra o nome legível por humanos do dispositivo, se for conhecido.

Os gráficos são gerados em execução ./index.py, cujo objetivo é ser chamado de um servidor da Web como lighttpd(com index.pyadicionado à index-file.namesconfiguração em /etc/lighttpd/lighttpd.conf). Você pode simplesmente executá-lo manualmente e ele irá gerar algumas imagens e imprimir HTML em STDOUT. Então, você deseja redirecioná-lo para um arquivo que você pode abrir em um navegador:

./index.py > index.html

Em seguida, abra index.html no seu navegador preferido.

Requisitos de instalação (todos podem ser instalados com apt-get install):

  • tcpdump - Ferramentas de linha de comando para capturar e descrever o tráfego de rede
  • rrdtool - Ferramenta Round Robin Database, registros e gráficos de dados de séries temporais
  • rrdcached - Round Robin Database Caching Daemon, serviço que reduz as despesas gerais ao trabalhar simultaneamente com vários arquivos RRD.
  • pypy-upstream (uma rápida implementação da linguagem de programação Python)

    • Você pode usar o Python padrão que você gosta: python rhodes.py( pypyé uma implementação alternativa da linguagem de programação Python que faz a compilação Just-In-Time (JIT), para que scripts de longa duração usem menos ciclos de CPU ao custo de mais memória)

Nota de uso : A ferramenta 'tcpdump' usada por este script requer privilégios de root para acessar o tráfego bruto da rede. Isso é alcançado iniciando sudo tcpdumpquando o script é iniciado, para que você seja solicitado a digitar sua senha. Pessoalmente, adicionei uma regra NOPASSWD para /etc/sudoersque nunca seja solicitado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.