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?

clifgray
fonte
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.
Talvez isto? learn.adafruit.com/…
zengr

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

RobM
fonte
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.

Manteigas
fonte
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.

Frepa
fonte
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!

Bruce Kives
fonte
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.

RobM
fonte