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

10

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 sairá? Os resultados de "netstat -rn" são gregos para mim; portanto, se sua resposta for "consulte a tabela de roteamento local", seja detalhado e claro.

brooks94
fonte

Respostas:

13

Para mim, eu posso ver o interface I ter ali mesmo usando o netstat -rnouroute -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

Nos dois casos, posso ver o nome da interface no final, neste caso é eth0

As informações fornecidas por esses comandos são as seguintes (fonte encontrada aqui ):

Destino - a rede ou host de destino.

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

Máscara de rede - 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 máximo padrão do segmento para conexões TCP nesta rota.

Janela - tamanho da janela padrão para conexões TCP nessa rota.

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

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

Outros campos podem ser:

Métrico - a distância ao alvo (geralmente contada em saltos). Não é usado por kernels recentes, mas pode ser necessário pelo roteamento de daemons.

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

Use - Contagem de pesquisas para a rota. Dependendo do uso de -F e -C, serão erros de cache de rota (-F) ou hits (-C).

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

Arp (apenas em cache) - se o endereço de hardware para a rota em cache está atualizado.

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

sudo apt-get install iptraf

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

No menu de iptrafselecione Monitor de tráfego IP e, em seguida, escolha Todas as interfaces . Isso deve mostrar todas as conexões TCP e a qual interface elas estão relacionadas. É baseado em terminal, o que é bom para fins de monitoramento.

Luis Alvarado
fonte
Boa resposta Luis. Você também pode usar o comandoroute
Panther
1
Ao invés de dizer ir olhar e ver onde ele se vá, a resposta correta deveria dizer dado este informações da tabela de roteamento, você pode ver onde o tráfego para um determinado endereço irá percorrer.
18713 psusi #
8

Você pode consultar as tabelas de roteamento do kernel usando o ipcomando Seu route getsubcomando lhe dirá exatamente como o kernel encaminhará 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 que

$ 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
zwets
fonte