長話短說

長話短說

長話短說

我希望系統中的所有傳出流量都路由到 tun0 設備,用 DNS 封包封裝,然後傳送到互聯網,但 DNS 封包也會路由回 tun0 設備。

背景

作為我正在進行的專案的一部分,我必須在沒有 TCP 流量的系統上實作 DNS 隧道(所有 TCP 流量都會被丟棄)。

我決定用 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,並且但我看到tcpdumpwireshark請求嘗試從 tun0 介面發送。

如何僅將不是來自我的程式的資料包路由到 tun0?這個概念對我來說似乎與 VPN 類似,VPN 程式是如何做到這一點的?

感謝您的幫助,如果需要任何澄清/編輯,請發表評論

相關內容