不知道如何使用 tun 接口建立隧道

不知道如何使用 tun 接口建立隧道

我正在尝试使用 tun 接口在 python 中在 Windows 上运行的 2 个 Ubuntu VM 之间建立第 3 层隧道。

当前配置:

VM1:

  • enp0s3 我的主接口 192.168.0.105(VirtualBox 中的桥接接口)配置
  • tun0 192.168.0.121 点点 192.168.0.122

VM2:

  • enp0s3 192.168.0.106(VirtualBox 中的桥接接口)
  • tun0 192.168.0.122 点点 192.168.0.121

我正在使用的 Python 脚本:https://gist.github.com/glacjay/585369/b229da72a0dc84dd27d12afc5b76d0c5c44bb9c3
我也尝试了 pytun(tun/tap 设备的 python 包装器)。

所以据我了解,我的主要问题是 tun0 没有向我的主接口接收/发送任何数据包。

如果我尝试从 enp0s3 ping tun0(ping -I enp0s3 192.168.0.121):

  1. 在 enp0s3 tcpdump 上,我看到 ARP 请求,192.168.0.105 正在寻找 192.168.0.121
  2. 在 tun0 tcpdump 上没有任何反应。

如果我尝试从 tun0 ping enp0s3(ping -I tun0 192.168.0.105):

  1. tun0 上的 icmp 请求
  2. 与 enp0s3 上的 icmp 请求无关

我尝试过很多方法:route、iproute、iptables但都失败了,也许是因为我不太擅长路由和 Linux 管理。

据我所知,如果在 tun 接口上写入某些内容,内核会将其放在“线路”上,然后内核会将传入的数据包放入 tun 接口。其他程序应该操纵这些数据包。这就是我的目标,编写可以在 tun 接口上写入和读取并进行操作的程序。但我无法启动,因为我被困在设置 tun 接口上。

任何帮助和想法都将不胜感激。

PS:抱歉,我的英语不好,第一次问这类服务的问题。我通常在网上寻找答案,但我已经在这里卡了 4 天了。

相关内容