
O ambiente é FreeBSD em sua maior parte e se parece com isto:
HOST_A <-> ROUTER <-> LOKI <-> HOST_B
No mínimo, eu gostaria de poder executar ping no ROUTER do HOST_B.
- O ROUTER recebeu o IP 10.0.0.1
- LOKI é uma máquina multi-homed que recebe os IPs 10.0.0.2 e 192.168.200.1
- HOST_B recebe o IP 192.168.200.3
- HOST_A recebe o IP 10.0.0.3
Eu configurei a rede como acima e adicionei gateway_enable="YES" ao rc.conf do loki
netstat -r no LOKI produz:
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 10.0.0.1 UGS em0
10.0.0.0 link#1 U em0
10.0.0.2 link#1 UHS lo0
loki link#2 UH lo0
192.168.200.0 link#3 U ue0
192.168.200.1 link#3 UHS lo0
que parece uma boa tabela de roteamento e parece funcionar em todas as direções.
netstat -r em HOST_B produz:
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.200.1 UGS em0
hostb link#2 UH lo0
192.168.200.0 link#1 U em0
192.168.200.3 link#1 UHS lo0
que se parece com outra boa tabela de roteamento, mas só consegue ver LOKI.
Resumindo:
- LOKI é capaz de executar ping em HOST_A, HOST_B e ROUTER
- HOST_B é capaz de executar ping em LOKI, mas não em ROUTER ou HOST_A
Algumas notas adicionais: de HOST_B
ping 10.0.0.1 100% packet loss
No wireshark no LOKI, ao executar ping em 10.0.0.1 de HOST_B:
120 40.549564000 192.168.200.3 10.0.0.1 ICMP 98 Echo (ping) request id=0x5a0e, seq=92/23552, ttl=63 (no response found!)
Parece-me que nada está sendo roteado do LOKI para o ROUTER. o que estou perdendo?
Confirmei que o encaminhamento de IP estava ocorrendo comentando gateway_enable="YES" em /etc/rc.conf e reiniciando.
Então, executei os seguintes comandos no loki:
sudo tcpdump -i em0 -nS
sudo tcpdump -i ue0 -nS
para monitorar a atividade nas duas placas de rede.
do hostb, executei:
ping 10.0.0.1
a interface ue0 em 192.168.200.1 relatou:
14:44:21.870865 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 21509, seq 0, length 64
nada foi relatado na interface em0 em 10.0.0.2.
Eu então corri:
sudo sysctl -w net.inet.ip.forwarding=1
e com certeza, em0 relatou:
14:58:14.745369 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 25861, seq 0, length 64
Mas não, responda como o que recebo com um ping loki do hostb:
14:44:15.724200 IP 192.168.200.3 > 192.168.200.1: ICMP echo request, id 21253, seq 4, length 64
14:44:15.724207 IP 192.168.200.1 > 192.168.200.3: ICMP echo reply, id 21253, seq 4, length 64
Se eu fizer ping no roteador do loki, está tudo bem:
15:04:55.637839 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 46852, seq 3, length 64
15:04:55.638324 IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 46852, seq 3, length 64
Alguma idéia de como encontrar a resposta?
Responder1
Por que LOKI e HOST_A estão conectados por um roteador quando estão na mesma sub-rede? É realmente um roteador ou é apenas um switch? (Pelos seus comentários posteriores, embora o dispositivo seja um roteador, ele atua apenas como uma chave entre LOKI e HOST_A).
Qual é a tabela de roteamento em HOST_A e ROUTER? Se fosse tentar chegar a 192.168.200.1, por que deveria usar LOKI como destino?
A menos que a tabela de roteamento desses dispositivos saiba usar LOKI para a sub-rede 192, eles apenas encaminharão para o gateway padrão.
Como alternativa, você pode querer investigar a instalação do NAT no LOKI. Para muitos serviços, ele pode encapsular o tráfego do HOST_B como tráfego do LOKI. Como outras máquinas podem chegar lá, ela pode receber o tráfego e encaminhá-lo de volta para HOST_B.
Responder2
Parece-me que LOKI está fazendo exatamente o que você espera. Ele recebeu um ping
pacote de solicitação ue0
e o retransmitiu para em0
. Se recebesse uma ping
resposta em em0
, ele a retransmitiria para ue0
.
O problema é o ROTEADOR. Ele recebe uma ping
solicitação 192.168.200.3
do lado da LAN (mas isso não importa). Quando envia uma ping
resposta para 192.168.200.3
, ele analisa sua tabela de roteamento. O lado da LAN é 10.0.0.0/24
(ou similar), então o pacote de resposta é enviado para o gateway padrão do ROUTER, que é o lado da WAN na Internet pública.
O ROUTER usa tradução de endereço de rede (NAT) para falsificar uma 10.0.0.0/24
rede atrás do seu único endereço IP público verdadeiro (atribuído ao lado WAN do ROUTER, pelo seu ISP). Os endereços RFC1918 são privados e não podem ser expostos à Internet pública, e sempre viverão atrás do NAT.
Você poderia colocar uma rota estática em ROUTER para fazer seu ping
experimento funcionar, mas isso ainda estará isolado da Internet pública. Você pode ativar o NAT no LOKI; nesse caso, você terá NAT duplo para a Internet (o que funciona bem, mas é bastante inútil). Se você precisar apenas de um firewall de segundo nível, considere tornar o LOKI um firewall de ponte e executá-lo 10.0.0.0/24
em ambas as NICs. Se você deseja hospedar serviços voltados para a Internet e possui apenas um endereço IP público, será forçado a usar regras de encaminhamento de porta no ROUTER.
Responder3
Algo precisa ser configurado para encaminhar pacotes da Rede A para a Rede B. Loki, sendo dual homed, poderia fazer isso, mas não é automático. Ao fazer isso, você configurará o Loki como um roteador e deverá usar o Loki como gateway padrão para o Host B. Outra opção é definir uma rota permanente na tabela de roteamento do Host B especificando Loki como destino para o tráfego 10.xxx .