总结

总结

总结

我希望我的系统的所有传出流量都被路由到 tun0 设备,用 DNS 数据包包装然后发送到互联网,但 DNS 数据包也会被路由回 tun0 设备。

背景

作为我正在进行的项目的一部分,我必须在没有 TCP 流量(所有 TCP 流量都被丢弃)的系统上实现 DNS 隧道。

我决定用 python 来实现这一点,但遇到了如何路由流量的问题。

该设置将包括客户端计算机上不能使用 TCP 的代理和没有网络限制的服务器。

我目前仅处理从客户端到服务器的传出流量。

我目前想与客户采取的方法是:

  1. tun0在客户端系统上创建接口
  2. 通过该接口路由所有传出流量。
  3. 让一个 python 程序监听该接口 - 传出的数据包将被包装在一个 DNS 查询中,该查询通过连接到互联网的接口发送到互联网(在我的情况下ens33)。

为了创建 tun 设备,我使用了:

from pytun import TunTapDevice

tun = TunTapDevice(name=”tun0”)
tun.addr = '10.8.0.1'
tun.dstaddr = '10.8.0.2'
tun.netmask = '255.255.255.0'
tun.mtu = 1500

tun.up()

为了将流量路由到 tun0 接口,我使用了

sudo ip route add default via 10.8.0.1 dev tun0

问题

我确实将流量路由到我的 python 程序,并且我可以从设备读取数据包,但是在构建新的 DNS 数据包(该数据包包含原始数据)之后,我尝试通过我的ens33接口将数据包发送到互联网,但我看到tcpdump请求wireshark试图从 tun0 接口发送。

我如何才能将不是来自我的程序的数据包路由到 tun0?这个概念对我来说似乎类似于 vpn,vpn 程序是如何做到的?

感谢您的帮助,如果需要任何澄清/编辑,请评论

相关内容