Jak powiedzieć, na którym interfejsie zostanie uruchomione połączenie TCP?

10

Mam serwer z wieloma interfejsami Ethernet. Jaki jest najłatwiejszy sposób na określenie, przez który interfejs wychodzące połączenie TCP będzie wychodzić? Wyniki „netstat -rn” są dla mnie greckie, więc jeśli twoja odpowiedź brzmi „spójrz na lokalną tabelę routingu”, prosimy o szczegółowe i jasne.

brooks94
źródło

Odpowiedzi:

13

Dla mnie widzę, który interfejs mam tam za pomocą netstat -rnlubroute -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

Lub 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

W obu przypadkach na końcu widzę nazwę interfejsu, w tym przypadku jest to eth0

Informacje podane przez te polecenia są następujące (źródło tutaj ):

Miejsce docelowe - sieć docelowa lub docelowy host.

Brama - adres bramy lub *jeśli nie jest ustawiony.

Genmask - Maska sieci docelowej.

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

Flagi - Możliwe flagi to:

 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 - Domyślny maksymalny rozmiar segmentu dla połączeń TCP na tej trasie.

Okno - domyślny rozmiar okna dla połączeń TCP na tej trasie.

irtt - Initial RTT (Round Trip Time). Jądro używa tego do odgadnięcia najlepszych parametrów protokołu TCP bez oczekiwania na (prawdopodobnie wolne) odpowiedzi.

Iface - interfejs, do którego będą wysyłane pakiety dla tej trasy.

Inne pola mogą być:

Metryczny - odległość do celu (zwykle liczona w chmielu). Nie jest używany przez ostatnie jądra, ale może być potrzebny do routingu demonów.

Ref - liczba odniesień do tej trasy. (Nieużywany w jądrze Linuksa).

Użyj - liczba wyszukiwań trasy. W zależności od użycia -F i -C będzie to albo brakowało pamięci podręcznej trasy (-F), albo trafienia (-C).

HH (tylko buforowane) - liczba wpisów ARP i trasowanych pamięci podręcznych, które odnoszą się do sprzętowej pamięci podręcznej nagłówka dla buforowanej trasy. Będzie to -1, jeśli adres sprzętowy nie jest potrzebny do interfejsu trasy w pamięci podręcznej (np. Lo).

Arp (tylko buforowane) - czy adres sprzętowy dla buforowanej trasy jest aktualny.

Przejdźmy teraz do pytania. Najłatwiejszy sposób, jaki mogę teraz zapamiętać (jak zawsze jest kilka sposobów zrobienia tego samego), to użycie iptraf. Po prostu zainstaluj:

sudo apt-get install iptraf

i uruchom go z uprawnieniami roota: sudo iptraf

W menu iptrafwybierz Monitor ruchu IP, a następnie wybierz Wszystkie interfejsy . Powinno to pokazać wszystkie połączenia TCP i interfejs, z którym są powiązane. Jest oparty na terminalach, co jest dobre do celów monitorowania.

Luis Alvarado
źródło
Niezła odpowiedź, Luis. Możesz także użyć poleceniaroute
Panther
1
Zamiast powiedzieć, że jedź wygląd i zobaczyć, gdzie ma iść, prawidłowa odpowiedź powinna powiedzieć otrzymaniem informacji o routingu tabeli można zobaczyć, gdzie ruch dla danego adresu będzie iść.
psusi
8

Możesz wykonać zapytanie do tabel routingu jądra za pomocą ippolecenia. Jego route getpodkomenda powie ci dokładnie, w jaki sposób jądro przekieruje pakiet na adres docelowy:

 $ ip route get to 10.0.2.2
 10.0.2.2 dev eth0  src 10.0.2.15

natomiast

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

i

$ ip route get to 127.0.1.1
local 127.0.1.1 dev lo  src 127.0.0.1
zwets
źródło