Networking

為什麼我的主機收不到通過 tun0 發送的數據包?

  • July 15, 2016

我設置了一個 tun0 介面,它允許這樣發送數據包:

HOST (aaaa::1) —-> tun0 —-> SLIP —-> 路由器 (aaaa::200:0:0:1)

路由器接收數據包,並可以發回一個網頁(上面有一個小型網路伺服器),然後我可以在主機上的瀏覽器和wireshark中看到:

3205    2129.960625056  aaaa::1 aaaa::200:0:0:1 TCP 80  49192 → 80 [SYN] Seq=0 Win=28800 Len=0 MSS=1440 SACK_PERM=1 TSval=579845 TSecr=0 WS=128
3206    2129.977020758  aaaa::200:0:0:1 aaaa::1 TCP 64  80 → 49192 [SYN, ACK] Seq=0 Ack=1 Win=48 Len=0 MSS=48
3207    2129.977056613  aaaa::1 aaaa::200:0:0:1 TCP 60  49192 → 80 [ACK] Seq=1 Ack=1 Win=28800 Len=0

但是,當我嘗試執行以下操作時:

路由器 (aaaa::200:0:0:1) —-> SLIP —-> tun0 —-> HOST (aaaa::1)

主機不接收數據包 (UDP)。我已經將wireshark設置為在tun0上擷取,我可以看到數據包進入了介面……

2164    454.682603267   aaaa::200:0:0:1 aaaa::1 UDP 73  8765 → 5678  Len=25

但是,當我使用 netcat 進行監控時

$$ aaaa::1 $$:5678,我看不到任何數據包到達。 我相當確信這與如何在 tun 介面上設置路由和轉發有關,但我對此知之甚少,無法弄清楚這一點。

這是設置 tunslip 介面時的輸出:

slip connected to ``127.0.0.1:60001''
opened tun device ``/dev/tun0''
ifconfig tun0 inet `hostname` mtu 1500 up
ifconfig tun0 add aaaa::1/64
ifconfig tun0 add fe80::0:0:0:1/64
ifconfig tun0

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
         inet addr:127.0.1.1  P-t-P:127.0.1.1  Mask:255.255.255.255
         inet6 addr: fe80::1/64 Scope:Link
         inet6 addr: aaaa::1/64 Scope:Global
         UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:500 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

這是ip route show table local的輸出:

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 
local 127.0.1.1 dev tun0  proto kernel  scope host  src 127.0.1.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 172.23.0.0 dev wlx0013ef1b001c  proto kernel  scope link  src 172.23.251.64 
local 172.23.251.64 dev wlx0013ef1b001c  proto kernel  scope host  src 172.23.251.64 
broadcast 172.23.255.255 dev wlx0013ef1b001c  proto kernel  scope link  src 172.23.251.64 

所以這很尷尬,但我忘記了我在主機上配置了防火牆,這意味著所有傳入的連接都被阻止了。關閉防火牆,一切正常。

引用自:https://serverfault.com/questions/789622