Conexão entre sub-redes em diferentes interfaces sem encaminhamento de IP

Conexão entre sub-redes em diferentes interfaces sem encaminhamento de IP

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.18e 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.18atravé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 -rnmostraria rotas especiais com o lsinalizador 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.

informação relacionada