Qual IP uma interface usa quando o host atua como cliente?
Digamos que eu configurei a eth0 com 2 endereços IP: 192.168.1.7 e 192.168.1.8
O comando route mostra algo assim:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.240.0 0.0.0.0 255.255.240.0 U 256 0 0 eth0
...
Isso basicamente significa que quando tento me conectar a qualquer host da 192.168.240.0
rede ele usa a interface eth0. Ok, mas... Qual endereço IP dessa interface?
Se o host atuar como um servidor e um cliente se conectar ao meu computador usando o endereço IP 192.168.1.7
que entendo que a eth0 usará 192.168.1.7
para se comunicar com o cliente, mas e se eu for o cliente?
EDITAR
Os endereços IP são inventados, não consigo adicionar outro endereço IP a uma interface no meu Ubuntu WSL porque recebo este erro:
$ ip address add 192.168.1.7/24 dev eth0
RTNETLINK answers: Permission denied
A saída de ip r s
é algo assim:
$ ip r s
none 224.0.0.0/4 dev eth0 proto unspec metric 256
none 255.255.255.255 dev eth0 proto unspec metric 256
none 224.0.0.0/4 dev eth1 proto unspec metric 256
none 255.255.255.255 dev eth1 proto unspec metric 256
...
EDITAR 2
Atualizei para WSL2 e agora o comando para adicionar endereços IP funciona (com sudo).
$ ip -4 a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.249.181/20 brd 192.168.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.7/24 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.8/24 scope global secondary eth0
valid_lft forever preferred_lft forever
Responder1
Para Linux, a resposta à sua pergunta édado aqui:
O endereço de origem inicial de um pacote de saída é escolhido de acordo com a seguinte série de regras.
A aplicação pode solicitar um determinado IP, o kernel usará a dica src do caminho de rota escolhido ou, na falta desta dica, o kernel escolherá o primeiro endereço configurado na interface que esteja na mesma rede que o endereço de destino ou o roteador nexthop.
Responder2
O cliente procurará as ROTAS correspondentes ao endereço ao qual está tentando se conectar. Se, como no seu exemplo, houver mais de uma rota correspondente, ele escolherá a entrada de rota com a métrica mais alta e enviará o pacote para fora da interface encontrada na tabela de rotas, usando o endereço IP dessa interface.
Você truncou a saída da rota e não disse a que estava se conectando - então não posso dizer qual interface será.
No servidor... bem, as coisas ficam um pouco mais complicadas lá. Tenho hosts Centos e Redhat com múltiplas interfaces na mesma sub-rede. Eles responderão no mesmo endereço/interface para o qual os pacotes foram enviados. Mas também tenho sistemas Ubuntu e Debian recentes que revisitarão a tabela de roteamento para encontrar a interface e o endereço a serem usados, ignorando o endereçamento no pacote do cliente. O cliente irá ignorar os pacotes que retornam de um endereço IP com o qual não está se comunicando.