
Esta é minha primeira pergunta sobre superusuário, então peço desculpas se não estiver à altura.
Estou executando o pop!_OS 19.10 (baseado no Ubuntu 19.10) e estou tentando entender seu comportamento de rede. Dada a interface de rede eth0
, adicionei as seguintes sub-redes:
ip addr add dev eth0 192.168.2.18/24
ip addr add dev eth0 192.168.3.18/24
A interface agora tem a seguinte aparência (endereço MAC alterado)
1: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.18/24 scope global enp0s31f6
valid_lft forever preferred_lft forever
inet 192.168.3.18/24 scope global enp0s31f6
valid_lft forever preferred_lft forever
Usando nc
, posso enviar dados entre os endereços IP 192.168.2.18
e 192.168.3.18
.
##################################################################################
# nc -v -l 192.168.2.18 8080
Listening on [pop-os] (family 2, port 8080)
Listening on pop-os 8080
Connection received on pop-os 55361
Hello World!
##################################################################################
# nc -v -s 192.168.3.18 192.168.2.18 8080
Connection to 192.168.2.18 8080 port [tcp/http-alt] succeeded!
Hello World!
##################################################################################
# ss -4 -n
tcp ESTAB 0 0 192.168.3.18:55361 192.168.2.18:8080
tcp ESTAB 0 0 192.168.2.18:8080 192.168.3.18:55361
Questão 1:Estou certo em presumir que os endereços dentrosub-redes separadasnomesma interfacesempre podem se comunicar entre si (a menos que sejam bloqueados por um firewall)? Isso ocorre porque o Kernel examina a tabela de roteamento e vê que pode simplesmente conectar localmente as duas redes? Ou seja:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Agora eu testei isso, porque estava pesquisando Kernel IP-Forwarding e liaqui:
No entanto, se o encaminhamento estiver desativado, o kernel primeiro verificará de qual interface o pacote veio. Se não vier da mesma interface, o kernel irá descartá-lo.
Porém, também posso me conectar 192.168.2.18
através da minha outra interface wlan0
, usando o endereço 192.168.1.73
. Eu tenho o encaminhamento de IP desativado.
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.2.18:8080 192.168.1.73:40405
tcp ESTAB 0 0 192.168.1.73:40405 192.168.2.18:8080
Questão 2:Por que os endereços IP em diferentes sub-redes e interfaces podem se comunicar sem o encaminhamento de IP habilitado? É porque eles pertencem ao mesmo host? Onde esse comportamento é definido? Ou seja, as regras de encaminhamento de IP só entrariam em vigor quando os pacotes começassem a sair do host?
Responder1
Pergunta nº 1: Estou certo ao presumir que endereços em sub-redes separadas na mesma interface sempre podem se comunicar entre si (a menos que sejam bloqueados por um firewall)? Isso ocorre porque o Kernel examina a tabela de roteamento e vê que pode simplesmente conectar localmente as duas redes? Ou seja:
Sim. Isso não é causado pelas entradas de "sub-rede" que você encontrou, mas sim pelas entradas de "endereço local" que estão em uma tabela de roteamento separada (a tabela 'local'). A antiga ferramenta de 'rota' provavelmente esconde essas entradas deliberadamente, mas também está desatualizada e incapaz de mostrar completamente as informações de roteamento mantidas pelos kernels Linux modernos, então use:
ip -4 route show table local
ip -6 ro ls tab local
(Nota: Isso é específico do Linux. Em BSDs, geralmente há apenas uma tabela de roteamento e netstat -rn
mostraria rotas especiais com o l
sinalizador definido. Em outros sistemas operacionais, pode até ser apenas um comportamento integrado e não necessariamente exposto como rotas em todos.)
Além disso, os endereços nem precisam estar na mesma interface, pois os pacotesnunca realmente use a interface física. Em vez disso, o kernel se comporta como se seus próprios endereços fossem simplesmente roteados peloloopbackinterface 'lo'.
Pergunta nº 2: Por que endereços IP em diferentes sub-redes e interfaces podem se comunicar sem o encaminhamento de IP habilitado? É porque eles pertencem ao mesmo host? Onde esse comportamento é definido? Ou seja, as regras de encaminhamento de IP só entrariam em vigor quando os pacotes começassem a sair do host?
Sim, é porque pertencem ao mesmo host. (No Linux eles também precisam estar no mesmo namespace de rede, por exemplo, no mesmo contêiner.)
As regras de encaminhamento de IP entram em ação quando um pacote érecebidoatravés de uma interface sem loopback (por exemplo, veio pela Ethernet para o endereço MAC local), mas seu IP de destino não é reconhecido como pertencente ao host.
Os pacotes gerados localmente, por definição, não estão sendo "encaminhados" (eles são "saídos" porque possuem um endereço IP de origem local), portanto, as regras de encaminhamento não se aplicam.