Construção de seu próprio Roteador com um Raspberry Pi

ao tentar descobrir por que a internet é lenta, pode ser difícil saber exatamente qual o dispositivo na rede é comer todos os largura de banda. Muitas soluções para este problema exigem que o software seja instalado em cada dispositivo para ser monitorado. Em vez disso, tentei construir um monitor personalizado de rede Raspberry Pi.

construir o seu próprio Router

um Router De Framboesa Pi 4 é um router bastante capaz nas circunstâncias certas.

mas primeiro, vamos ser claros em termos.

a switch shuffles data around the network. Um router ajuda a dirigir esse tráfego.

construir um” router”, neste contexto, significa que estaremos implementando DHCP, DNS e um Firewall.

If you don’t know what any of that means, don’t worry. Por agora, vamos apenas assumir que você tem um Raspberry Pi 4 (ver a lista de Partes na parte inferior). O bit” version 4″é importante porque tem um cartão de rede significativamente melhor (eth0) do que modelos anteriores (Gigabit). Isto aponta para a maior limitação de usar o RPi como um roteador: a largura de banda é limitada a 1000 Mbps.

largura de banda e débito são muitas vezes confundidos.

a faixa “largura” é a quantidade máxima de dados que podem fluir através do sistema (neste caso, da casa para a internet). A transferência mede a largura de banda utilizada a qualquer momento.

incidentalmente, este guia deve funcionar para qualquer sistema linux baseado em Debian que você deseja transformar em um roteador. Você poderia usar um hardware melhor para criar uma solução ainda mais eficaz. Eu escolhi um Pi4 porque a nossa velocidade de internet é apenas 30Mbps de qualquer maneira (DSL). Como eu descrevi no posto de monitoramento da rede, este Raspberry Pi 4 está provado ser muito mais do que suficiente para este caso. Seguem-se os produtos exactos que usei.se você é novo na Raspberry Pi, os populares CanaKits são um ótimo lugar para começar. Eu prefiro comprar o Raspberry Pi 4, adaptador de potência, cartões micro SD, e heatsinks separadamente. Isto não só é mais barato, como também reduz os resíduos electrónicos.

a seguir são links de afiliados para outras partes que eu usei neste projeto. Nunca ligo a um produto que não tenha usado pessoalmente.

tem uma ligação DSL/PPP?

Leia sobre as peculiaridades de usar um Raspberry Pi como roteador DSL.

é necessária uma segunda porta ethernet (ver a secção seguinte). Usei o conector USB 3.0 Gigabit, acima.

conectando-se à Internet

eu me referirei às interfaces de rede como wan e lan.

Se quiser que as coisas sejam copy-and-paste, poderá mudar o nome das suas interfaces de rede para corresponder. Por exemplo, lan é o nome para a mais rápida das duas interfaces (a interface de rede onboard, eth0, no meu caso). Para criar o nome estático, primeiro tipo ifconfig obter o endereço MAC da interface (depois de ether). Se você encontrou ether aa:bb:cc:dd:ee:ff e, em seguida, criar ou editar /etc/udev/rules.d/10-network.rules incluem:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan"

… e, em seguida, repita o processo para o wan interface.

a rede interna (LAN) precisa lidar com mais débito do que o WAN.

é por isso que a interface mais rápida é escolhida para a LAN.

neste ponto, pode ligar directamente a interface wan ao modem fornecido pelo seu ISP. Você pode querer colocar o modem em modo ponte transparente, se possível, uma vez que o Pi está assumindo a funcionalidade de roteamento (mais sobre isso).

enquanto estiver aqui, tome um momento para se certificar de que o WAN está configurado corretamente para obter um DHCP lease. Se você usar algum método diferente do DHCP padrão( por exemplo, PPOE), você terá que modificar este passo de acordo com suas necessidades. Mas na maioria dos casos, é suficiente criar um arquivo em /etc/network/interfaces.d/wan com o seguinte conteúdo:

auto wanallow-hotplug waniface wan inet dhcp

DHCP Server

With The Pi online, it’s time to let devices connect to the Pi.

neste exemplo, o router Raspberry Pi terá um endereço IP de 192.168.0.1.

tenha cuidado se alterar este IP!

Este exemplo usa a sub-rede 192.168.0/24. Se decidir alterar isto, certifique-se que escolhe entre o intervalo de sub-redes privadas válidas.

isto significa primeira criação ou edição /etc/network/interfaces.d/lan:

allow-hotplug laniface lan inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1

Now the LAN interface will have a static IP and treat itself as the router. Agora é hora de torná-lo capaz de atribuir endereços IP para outros dispositivos na rede. Executando um servidor DHCP, portanto, torná-lo-á tantos computadores podem se conectar ao Pi.

Primeiro, desative o dhcpd e instalar o isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

em Seguida, editar /etc/default/isc-dhcp-server, substituindo INTERFACESv4:

INTERFACESv4="lan"

Nós dissemos que o servidor DHCP de interface que contém a LAN. Agora ele precisa saber os parâmetros para a rede doméstica. Para continuar com o exemplo, vamos deixar o servidor atribuir endereços IP no intervalo de 192.168.0.100192.168.0.199 (mais sobre o porquê de, em um momento). Editar /etc/dhcp/dhcpd.conf a primeira alterar o nome de domínio e servidores de nome de domínio:

option domain-name "router.local";option domain-name-servers 8.8.8.8, 1.1.1.1;

.local sufixo é convenção para uma LAN, mas você é bem-vindo para substituir o router nome. Os servidores de nomes de domínio serão alterados em breve, mas são apontados para o google por agora.

adicione também o seguinte:

authoritative;subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.199; option routers 192.168.0.1; option subnet-mask 255.255.255.0;}

Isto diz ao servidor DHCP que pode atribuir endereços IP aos dispositivos que se ligam a ele dentro da Gama indicada. A razão para o intervalo relativamente pequeno é que podemos atribuir endereços IP estáticos fora desse intervalo. Por exemplo, você poderia fazer o mesmo endereço MAC para o lan acima e adicione a seção a seguir:

host router { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address 192.168.0.1;}

Adicionando o IP estático para o router, assim, significa que o servidor DHCP pode nunca ficar confuso e, acidentalmente, atribuir um endereço IP diferente. Em geral, a codificação dos endereços IP no servidor DHCP também centraliza a autoridade (em vez de codificar IPs estáticos em dispositivos específicos, que é muito mais frágil IME).se reiniciar o Raspberry Pi agora e ligar um computador à porta da lan, deverá encontrar um endereço IP no intervalo apropriado. Usando o Mac OSX, eu abri o painel de preferências da rede, e então a página de Hardware para encontrar o endereço MAC do meu laptop USB-C para o adaptador Ethernet. Então eu atribuí um IP estático (exatamente como acima) para esse endereço e reiniciei o servidor DHCP:

sudo systemctl restart isc-dhcp-server
connect to raspberry pi router
the MAC address came from the Hardware tab. Pressionando o botão “Renovar DHCP Lease” irá pedir ao servidor DHCP um novo endereço IP, efetivamente refrescando a conexão.

embora o endereço fixo esteja fora do intervalo acima, este tipo de atribuição de IP estático irá funcionar com qualquer dispositivo. Gosto de dar IPs estáticos a todos os meus dispositivos conhecidos e confiáveis que estão fora do alcance público. Isto faz o seguinte:

  • ajuda a identificar dispositivos conhecidos.
  • Permite a aplicação de regras de segurança para IPs conhecidos.
  • activa os servidores (isto é, a leitura da temperatura através de um sensor Arduino barato).

Se, por alguma razão, um computador não se conseguir ligar à rede doméstica, a execução do seu próprio servidor DHCP torna as coisas mais fáceis de depurar. A execução journalctl -xe | grep dhcpd mostra as tentativas dos dispositivos para se conectar à rede doméstica:

May 03 15:50:44 router dhcpd: DHCPREQUEST for 192.168.0.106 from xx:xx:xx:xx:xx via eth0May 03 15:50:44 router dhcpd: DHCPACK on 192.168.0.106 to xx:xx:xx:xx:xx via eth0

, E de tomar uma olhada em: /var/lib/dhcp/dhcpd.leases revela que os dispositivos de ter ligado ultimamente.

conectando dispositivos Wi-Fi

para isso, você precisará de um roteador ou ponto de acesso Wi-Fi.

a abordagem típica é usar o Wi-Fi de bordo. Principalmente em jogos os passos acima, exceto usando o wlan0 dispositivo sobre o Raspberry Pi para o lan interface e configuração de hostapd. No entanto, isso não é recomendado no contexto deste post. Deixar o Raspberry Pi servir como uma passagem entre duas interfaces ethernet é uma abordagem mais simples e mais rápida.

em vez disso, basta ligar um router Wi-Fi ao modo lan port no Raspberry Pi e, em seguida, colocar o router no ponto de acesso (t. c. p.bridge). Agora, o router não se importará se os clientes se conectam através de ethernet ou Wi-Fi.

eu sou um grande fã do Orbi roteadores — não só eles são extremamente rápidos, mas você pode conectar a estação base “internet” porta para o Raspberry Pi e ter uma dúzia de conexões com fio à sua disposição ao redor da casa:

o Encaminhamento de Tráfego

neste momento…

  • O Raspberry Pi pode conversar com a internet (WAN).os dispositivos da LAN podem falar uns com os outros.

… mas não há comunicação entre os dois.

Enter firewalld:

sudo apt install firewalld

Firewalld é a solução mais fácil que encontrei até o momento.tabelas IP e firewalls podem ser uma dor.

no mínimo, você precisará de uma casa e uma zona pública, e então mascarar o tráfego entre os dois. Isto apenas diz ao firewall que a interface lan é para a casa, e as interfaces wan/ppp0 são para o público.

sudo firewall-cmd --zone=home --add-interface=lansudo firewall-cmd --zone=public --add-interface=ppp0sudo firewall-cmd --zone=public --add-interface=wansudo firewall-cmd --zone=public --add-masqueradesudo firewall-cmd --zone=home --add-service=dnssudo firewall-cmd --zone=home --add-service=dhcp

neste ponto, os computadores ligados à LAN devem poder aceder à internet. Você poderia apenas executar sudo firewall-cmd --runtime-to-permanent agora para salvar tudo, mas pode haver alguns passos mais úteis (abaixo). Se a qualquer momento o tráfego da internet (ou outro) não estiver funcionando dentro da rede, execute journalctl -xe e procure por linhas como esta:

FINAL_REJECT: IN=ppp0 OUT= MAC= SRC=77.247.109.40 DST=...

neste caso, a regra está funcionando como esperado. Alguém de um endereço IP desconhecido tentou entrar em contato com a minha rede doméstica através da interfaceppp0 (i.e., da internet). Em outros casos, você pode precisar abrir o firewall para permitir certo tráfego.

Firewalld é mais fácil quando se utilizam regras baseadas em zonas. Você vai precisar de pelo menos duas zonas, que eu chamei de casa e público em vez de lan e wan (para corresponder Convenções do firewalld). Também tenho uma terceira zona de confiança (opcional) na minha configuração para a sub-rede kubernetes/docker. Assim, quando eu digito firewall-cmd --get-active-zones, eu vejo:

home interfaces: lan lopublic interfaces: wan ppp0trusted interfaces: docker0 cni0 sources: 10.244.0.0/24 10.202.0.0/24 10.96.0.0/24

as definições para zonas estão contidas em arquivos xml localizados em /etc/firewalld/zones/:

<?xml version="1.0" encoding="utf-8"?><zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="wan"/> <interface name="ppp0"/> <service name="ssh"/> <service name="http"/> <service name="https"/> <masquerade/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Home</short> <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="lan"/> <interface name="lo"/> <service name="ssh"/> <service name="mdns"/> <service name="samba-client"/> <service name="dhcpv6-client"/> <service name="dhcp"/> <service name="dns"/> <service name="http"/> <service name="https"/> <port port="5000" protocol="tcp"/> <port port="3000" protocol="tcp"/> <port port="9999" protocol="tcp"/> <port port="10250" protocol="tcp"/> <port port="10250" protocol="udp"/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Trusted</short> <description>All network connections are accepted.</description> <interface name="docker0"/> <interface name="cni0"/> <source address="10.244.0.0/24"/> <source address="10.202.0.0/24"/> <source address="10.96.0.0/24"/> <service name="dns"/> <service name="dhcp"/> <service name="dhcpv6-client"/> <service name="https"/> <service name="http"/></zone>

o Tráfego é classificado em zonas com base na interface ou de origem, tais como:

  • sudo firewall-cmd --zone=public --add-interface=ppp0
  • sudo firewall-cmd --zone=trusted --add-source=10.202.0.0/24

E uma zona pode receber tráfego para um serviço ou uma porta:

  • sudo firewall-cmd --zone=public --add-service=http
  • sudo firewall-cmd --zone=home --add-port=10250/tcp

Observe que essas alterações são temporárias. Isso permite testes seguros. Para torná-los permanentes, execute sudo firewall-cmd --runtime-to-permanent. Se não houver um Se você precisar de mais ajuda com firewalld, confira este artigo.

DNS Server & Reescrites

A DNS server can make this little router even better.

a tarefa do servidor DNS é responder com um endereço IP para um dado nome de domínio. Por exemplo, ele sabe a que endereço IP seu computador deve se conectar, a fim de alcançar google.com. muitas pessoas gostam de gerir os seus próprios por razões de segurança e Privacidade.

existem bloqueadores de anúncios por aí, por exemplo, que funcionam como servidores de DNS. Ao instalar Pi Hole ou AdGuard Home, você pode evitar que os computadores na rede sejam capazes de localizar publicidade/spam/domínios de malware. Ambas as duas ferramentas também suportam DNS reescritas, para que você possa mudar a “localização” de qualquer site.

uma Vez que você tenha instalado um dos dois, basta editar /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

Agora, todos os dispositivos que se conectam à rede será informado para utilizar este servidor de DNS.por que as regravações são tão úteis? Confira o seguinte post sobre a construção de um servidor doméstico. As reescritas permitem que o mesmo URL seja usado internamente e externamente, permitindo HTTPS em qualquer lugar. Por exemplo, usando AdGuard Casa para reescrever *.snowy-cabin.com192.168.0.100, qualquer tráfego que se origina dentro de uma rede doméstica para house.snowy-cabin.com nunca vai deixar a rede doméstica. Isto significa que o mesmo https:// URL pode ser usado para alcançar o proxy reverso, onde a terminação SSL acontece, garantindo uma comunicação segura para o tráfego público e privado.

id da publicação não encontrado: #8977

Cheat-folha

Para recapitular, aqui estão alguns conceitos-chave para a casa de servidores:

  • IPs Estáticos: editar /etc/dhcp/dhcpd.conf para adicionar um novo host, em seguida, reinicie isc-dhcp-server e renovar a concessão do cliente.
  • Port forwarding: run sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • nomes de domínio personalizados: use o servidor DNS para fazer o seu nome de domínio único funcionar interna e externamente.monitorização do tráfego de rede: instruções.

De segurança para a velocidade, há muitas razões para compreender a sua conexão de rede doméstica. Aprenda o básico de rede, bem como construir o seu próprio roteador para acelerar a internet em casa.

Tagged asDIY Projetos, Raspberry Pi Projectos
Escrito por

(zane) / Tecnicamente Feitiçaria

Este site começou como um lugar para documento de projetos DIY. Cresceu em uma coleção de projetos da IOT, tutoriais técnicos e guias de como. Leia mais sobre este site…

Deixe uma resposta

O seu endereço de email não será publicado.