Como saber em qual interface uma conexão TCP será ativada?

9

Eu tenho um servidor com várias interfaces ethernet. Qual é a maneira mais fácil de saber em qual interface uma conexão TCP de saída vai acabar? Os resultados de "netstat -rn" são gratos para mim, então se sua resposta for "olhe para a tabela de roteamento local", por favor, seja detalhado e claro.

    
por brooks94 13.03.2013 / 16:25

2 respostas

11

Para mim, posso ver qual interface eu tenho usando o netstat -rn ou route -n

cyrex@cyrex:~$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.48.0.1      0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.48.0.0      0.0.0.0         255.255.224.0   U         0 0          0 eth0

ou netstat -r

cyrex@cyrex:~$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192-48-0-1.dyn. 0.0.0.0         UG        0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
192.48.0.0      *               255.255.224.0   U         0 0          0 eth0

Em ambos os casos, posso ver o nome da interface no final, neste caso, é eth0

A informação dada por este comando é a seguinte (Fonte encontrada here ) :

Destino - A rede de destino ou o host de destino.

Gateway - O endereço do gateway ou * se nenhum for definido.

Genmask - A máscara de rede da rede de destino.

 255.255.255.255 for the host destination.
 0.0.0.0 for the default route.  

Sinalizadores - os sinalizadores possíveis incluem:

 U (route is up)  
 H (target is a host)  
 G (using gateway)  
 R (reinstate route for dynamic routing)  
 D (dynamically installed by daemon or redirect)  
 M (modified from routing daemon or redirect)  
 A (installed by addrconf)  
 C (cache entry)  
 ! (reject route)  

MSS - Tamanho de segmento máximo padrão para conexões TCP nesta rota.

Janela - Tamanho da janela padrão para conexões TCP nesta rota.

irtt - RTT inicial (tempo de ida e volta). O kernel usa isso para adivinhar os melhores parâmetros do protocolo TCP sem esperar por respostas (possivelmente lentas).

Iface - Interface para a qual os pacotes para esta rota serão enviados.

Outros campos podem ser:

Métrica - a distância até o alvo (geralmente contada em saltos). Ele não é usado por kernels recentes, mas pode ser necessário por daemons de roteamento.

Ref - Número de referências a esta rota. (Não usado no kernel do Linux.)

Usar - contagem de pesquisas para a rota. Dependendo do uso de -F e -C, isso será um erro de cache de rota (-F) ou ocorrências (-C).

HH (somente em cache) - O número de entradas ARP e rotas em cache que se referem ao cache de cabeçalho de hardware para a rota em cache. Isso será -1 se um endereço de hardware não for necessário para a interface da rota em cache (por exemplo, lo).

Arp (somente em cache) - Se o endereço de hardware para a rota em cache está ou não atualizado.

Agora, para a questão em questão. A maneira mais fácil de me lembrar agora (como sempre, existem várias maneiras de fazer a mesma coisa) é usar iptraf . Basta instalá-lo:

sudo apt-get install iptraf

e execute-o com privilégios de root: sudo iptraf

No menu de iptraf selecione Monitor de Tráfego IP e escolha Todas as Interfaces . Isso deve mostrar a você todas as conexões TCP e a qual interface elas estão relacionadas. É baseado em terminal, o que é bom para fins de monitoramento.

    
por Luis Alvarado 13.03.2013 / 16:56
7

Você pode consultar as tabelas de roteamento do kernel usando o comando ip . Seu subcomando route get dirá exatamente como o kernel roteará um pacote para um endereço de destino:

 $ ip route get to 10.0.2.2
 10.0.2.2 dev eth0  src 10.0.2.15

enquanto

$ ip route get to 192.168.3.5
192.168.3.5 via 10.0.2.2 dev eth0  src 10.0.2.15

e

$ ip route get to 127.0.1.1
local 127.0.1.1 dev lo  src 127.0.0.1
    
por zwets 13.03.2013 / 20:48