Eu tenho um roteador doméstico com conexão à Internet. Também tenho um computador que está em um local onde não consigo conectá-lo diretamente ao roteador. Felizmente, tenho dois pis de framboesa com os quais não sabia o que fazer.
Eu executei os seguintes comandos no PI #1 com base na resposta de @User1686 :
# Set static IP for eth0 interface
ip addr add 192.168.1.100/24 dev ppp0
# Set static IP for ppp0 interface
ip addr add 192.168.0.1/24 dev ppp0
# Enable IP forwarding
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
# Route packets to PI #2
ip route add 192.168.2.0/24 via 192.168.0.2 dev ppp0
# Masquerade all outgoing packets with his own IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
E execute os seguintes no PI #2:
# Set static IP for eth0 interface
ip addr add 192.168.2.1/24 dev eth0
# Set static IP for ppp0 interface
ip addr add 192.168.0.2/24 dev ppp0
# Enable IP forwarding
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
# Forward packets to PI #1
ip route add default via 192.168.0.1
ip route add 192.168.1.0/24 via 192.168.0.1 dev ppp0
# Masquerade all outgoing packets with his own IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Também habilitei o IP estático no meu computador para se conectar ao PI nº 2:
# Set static IP
ip addr add 192.168.2.100/24 dev eth0
# Forward packets to PI #2
ip route add default via 192.168.2.1
# Add DNS server
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf
Tive alguns problemas porque não consigo acessar alguns IPs e a Internet do meu computador. Aqui está uma tabela rápida do que eu tentei:
Comando | Pi #1 | Pi #2 | Computador | Qualquer dispositivo no HomeRouter |
---|---|---|---|---|
ping 192.168.0.1 | OK | OK | OK | NÃO |
ping 192.168.0.2 | OK | OK | OK | NÃO |
ping 192.168.1.1 | OK | OK | OK | OK |
ping 192.168.2.1 | OK | OK | OK | NÃO |
ping 192.168.1.100 | OK | OK | OK | OK |
ping 192.168.2.100 | OK | OK | OK | NÃO |
enrolar 8.8.8.8 | OK | OK | OK | OK |
curl google.com | OK | OK | OK | OK |
Com base na resposta de @ User1686 , meu computador agora pode se comunicar com outros dispositivos em meu roteador doméstico, mas agora eles podem se comunicar com meu computador ( ping 192.168.2.100
por exemplo).
Existe uma maneira de rotear pacotes sem editar a configuração do roteador?
Resumindo, todo dispositivo precisa de uma rota para toda rede que não seja local. Não basta apenas ter uma rota para um dispositivo – o dispositivo também precisa ter uma rota de volta para você.
Em algumas situações, ele pode já estar coberto pela rota "padrão" (por exemplo, HomeRouter←Pi#2 é alcançável pela rota padrão do Pi#2), mas não em todos os casos.
O roteador doméstico deve ter rotas para 192.168.0.0/24 e 192.168.2.0/24. No momento, ele recebe seus pings do Pi#2, mas não consegue responder (ou melhor, suas respostas passam pelo link WAN).
(Em ambos os casos, o roteador mais próximo , ou seja, Pi#1, precisa ser especificado como o "gateway".)
Pi #1 precisa de uma rota para 192.168.2.0/24. Você já tem isso.
Pi #2 precisa de uma rota para 199.168.1.0/24. Você já tem isso, tanto como rota explícita quanto (provavelmente) como rota padrão.
Por fim, o computador deve ter apenas uma rota 'padrão' via Pi #2 (ou seja, uma rota 0.0.0.0/0). No momento, provavelmente não há rotas, exceto a rota da sub-rede.
Se o roteador doméstico não suportar a configuração de rotas estáticas, você poderá usar o SNAT como uma solução alternativa – faça Pi#1 mascarar todos os pacotes com seu próprio endereço, por meio de iptables. No entanto, lembre-se de que o mascaramento só ajuda com conexões estabelecidas em apenas uma direção (saída); não ajudará no envio de "novos" pacotes de entrada.
Portanto, mantenha o uso de SNAT/MASQUERADE no mínimo absoluto e use o roteamento normal sempre que possível - por exemplo, se HomeRouter for o problema (não é possível fazer roteamento estático), use apenas SNAT no Pi # 1, na interface voltada para o HomeRouter ( ou seja, na borda da rede roteada). Você não precisa do SNAT adicional no Pi#2.
Se você precisar fazer conexões de entrada através da interface onde você é forçado a usar SNAT, a solução típica é usar DNAT (também conhecido como "encaminhamento de porta") - crie uma regra que corresponda a certas conexões com Pi # 1 e DNATs para o computador.
(Não precisa ser porta por porta - você também pode atribuir um segundo endereço IP inteiro para Pi#1 e usá-lo exclusivamente para DNAT literalmente tudo para esse endereço para o computador, como o recurso "DMZ" em roteadores.)
Como você já está usando
ip route
, também recomendoip addr add 192.168.2.100/24 dev eth0
em vez de ifconfig. (O maior problema que o ifconfig ainda tem (mesmo na versão mais recente) é que ele falha silenciosamente ao mostrar vários endereços IPv4 por interface, o que às vezes pode ser muito confuso.)