Sanal arayüzlerde trafik nasıl yakalanır?


12

Hata ayıklama amacıyla Linux sanal arabirimlerindeki trafiği yakalamak istiyorum. Ben deneyler yapıyorlar veth, tunve dummytürleri arayüzü; her üçünde de bir tcpdumpşey göstermekte zorlanıyorum .

Sahte arayüzü nasıl ayarlayacağım:

ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up

Bir terminalde aşağıdakileri izleyin tcpdump:

tcpdump -i dummy10

Bir saniye içinde şununla dinle nc:

nc -l 99.99.99.1 2048

Üçte birinde, aşağıdakilerle bir HTTP isteği yapın curl:

curl http://99.99.99.1:2048/

Terminal 2'de curlistekten gelen verileri görebilsek de , hiçbir şey görünmüyor tcpdump.

Bir Tun / Tap öğreticisi , yerel bir arabirimde çalışırken çekirdeğin gerçekten paket göndermeyebileceği bazı durumları açıklar:

Tshark'ın çıktısına baktığımızda, hiçbir şey görmüyoruz. Arayüzden trafik gelmiyor. Bu doğrudur: arayüzün IP adresine ping attığımız için, işletim sistemi "kabloda" hiçbir paketin gönderilmesine gerek olmadığına ve çekirdeğin kendisi bu ping'lere yanıt verdiğine doğru karar verir. Bunu düşünürseniz, başka bir arayüzün IP adresine (örneğin eth0) ping attığınızda tam olarak ne olur: hiçbir paket gönderilmez. Bu kulağa bariz gelebilir, ama ilk başta bir karışıklık kaynağı olabilir (benim içindi).

Ancak bunun TCP veri paketleri için nasıl geçerli olabileceğini görmek zordur.

Belki tcpdumparayüze farklı bir şekilde bağlanmalıdır?


TCP paketlerinde bunun neden olduğunu görmek zor değil. Pingler gibi, bunlar çekirdekte işlenir. Aynı şey oluyor.
derobert

@derobert Pinglerde, çekirdek yanıt verebilir. Veri paketleri durumunda, uygulamanın onlara yanıt verebilmesi için arabirimin "üzerinden" geçmeleri gerektiğini düşünmüştüm.
solidsnack

1
Uygulamalar, okuma, yazma, vb. Kullanarak çekirdeğe konuşur. Birçok ağ uygulamasının arabirimlerin var olduğunun farkında olması bile gerekmez. Trafiğin bunlardan birinin üzerinden geçmesini sağlamak için, çekirdeğin yerel olmayan olarak görmesi gerekir. Örneğin, bir OpenVPN tüneli kurun, sonra tun0 üzerinden giden trafiği yakalayabilirsiniz. (Elbette, tun0, uygulamaların çekirdeğiyle konuşması, kullanıcı arazisinde bir ağ arabirimi uygulaması için OpenVPN'in yaptığı şeydir.)
derobert

Yanıtlar:


8

Trafik loarayüzün üzerinden geçiyor .

Bir kutuya IP eklendiğinde, bu adres için bir yol 'yerel' tabloya eklenir. Bu tablodaki tüm yollar trafiği geri döngü arabirimi üzerinden yönlendirir.

'Yerel' tablonun içeriğini aşağıdakilerle görüntüleyebilirsiniz:

ip route show table local

Hangi benim sistemde şöyle:

local 10.230.134.38 dev tun0  proto kernel  scope host  src 10.230.134.38 
broadcast 10.230.134.38 dev tun0  proto kernel  scope link  src 10.230.134.38 
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 172.17.0.0 dev docker0  proto kernel  scope link  src 172.17.42.1 
local 172.17.42.1 dev docker0  proto kernel  scope host  src 172.17.42.1 
broadcast 172.17.255.255 dev docker0  proto kernel  scope link  src 172.17.42.1 
broadcast 192.168.0.0 dev enp6s0  proto kernel  scope link  src 192.168.0.20 
local 192.168.0.20 dev enp6s0  proto kernel  scope host  src 192.168.0.20 
broadcast 192.168.0.255 dev enp6s0  proto kernel  scope link  src 192.168.0.20 

Böylece temelde herhangi bir trafik gönderirseniz 10.230.134.38, 127.0.0.0/8, 127.0.0.1(yedekli) , 172.17.42.1veya 192.168.0.20, trafik bu IP'leri farklı bir arabirimde gerçekten olmasına rağmen, geri döngü arayüzü üzerinden yönlendirilir alacak.


1

tcpdumpAna bilgisayardaki herhangi bir arabirimle kullanabilirsiniz ( tcpdump -i any ...)


0

Bu, ikinci bir sistemi çağırarak mümkün olmalıdır (bu ana bilgisayardaki bir VM bile olabilir).

Sen kullanabilirsiniz DNATiçinde OUTGOINGzincirinin natmasa ve çekirdek kontrol etmez bir arayüze paketleri yönlendirir. Onları oraya yansıtmalısınız:

iptables -t nat -A OUTPUT -p tcp -d 99.99.99.1 --dport 2048 \
  -j DNAT --to-destination 1.2.3.4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.