1

我正在尝试通过网络上的一些简单的 tun/tap 示例工作,但遇到了一些麻烦。简而言之,我正在尝试:

  1. 创建一个tun接口并给它一个地址
  2. 使用一些代码打开 tun 接口,打印接收到的数据包
  3. 用 netcat 发送一些数据包
  4. 使用wireshark和打印它们的代码观察数据包

我在(3)和(4)方面遇到了麻烦。本教程说,在较旧的 linux 版本中,您可以使用 ping,但显然情况不再如此,所以我正在尝试使用 netcat。我的假设是我没有正确发送数据 - 具体来说,使用 netcat 我必须针对特定端口,所以我给它一个任意端口以及 tun 接口的地址。

由于wireshark 和这两个程序都没有看到任何东西,我认为是数据包的发送不正确。有没有比使用 netcat 更好的方法?

tun接口:

$ ifconfig tun2
tun2      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.7.1  P-t-P:192.168.7.2  Mask:255.255.255.255
          UP POINTOPOINT 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:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

写入一些数据包,没有观察到错误

$ echo -n 'fooooo' | nc 192.168.7.1 5555
$
$ echo -n `cat index.html` | nc 192.168.7.1 5555
$

Wireshark(和程序控制台)什么都不显示:

$sudo tshark -i tun2
....

我已经为(2)尝试了两种不同的代码,它们都应该打印出接收到的数据包:

更新:

在上面的第二个链接中运行 simpletun 程序作为客户端和服务器,在同一台机器上,对于我得到的服务器:

$ ./simpletun -i tun2 -s -d
Successfully connected to interface tun2

对于客户端(我认为它将在另一台机器上运行):

$./simpletun -i tun2 -c 192.168.7.1 -d
ioctl(TUNSETIFF): Device or resource busy
Error connecting to tun/tap interface tun2!

所以我很确定我正在打开 tun2。

编辑2:

我在带有 ubuntu 服务器的 virtualbox VM 上执行此操作。一旦我让它在一台机器上工作,我想尝试用第二台机器编写一个简单的 UDP 桥,两者都在 tun 接口上。

编辑3:

环回它是

$ sudo tshark -i lo
[sudo] password for nflacco: 
tshark: Lua: Error during loading:
 [string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled
Running as user "root" and group "root". This could be dangerous.
Capturing on lo
  0.000000  192.168.7.1 -> 192.168.7.1  TCP 74 59584 > personal-agent [SYN] Seq=0 Win=32792 Len=0 MSS=16396 SACK_PERM=1 TSval=26444728 TSecr=0 WS=4
  0.000019  192.168.7.1 -> 192.168.7.1  TCP 54 personal-agent > 59584 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
4

2 回答 2

1

是否有另一个系统连接在隧道 tun2 的另一端?

请注意RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)ifconfig 输出。确实没有通过该接口传输数据包。确保该接口上有一些接收器。

例如,如果您将其用于虚拟化,请确保虚拟机已启动并准备好接收数据包。如果您将其用于 VPN 或其他用途,请确保远程系统正在响应。

我已经使用隧道接口进行虚拟化。&它工作,当VM启动并运行时。

于 2012-12-03T04:04:52.643 回答
0

尝试

echo -n 'fooooo' | nc 192.168.7.2 5555

您需要将流量发送到 tun 接口子网中的 IP,而不是接口 IP 本身。如果您将它发送到接口 IP,内核将不会在线发送它,因为数据包已到达其目的地。

于 2018-08-04T13:00:19.600 回答