簡體   English   中英

使用TUN / TAP接口路由流量

[英]Routing traffic with TUN/TAP interface

我是網絡編程的新手,試圖了解如何通過TUN / TAP接口管理流量。

由於我幾乎不具備系統編程技能,並且對Java充滿信心; 我使用OpenVPN tun / tap驅動程序,並為此准備了Java綁定。 它可以在TAP模式下工作。

作為示例應用程序,我嘗試不加密,不認證客戶端服務器VPN應用程序。

我可以捕獲以太網幀數據包,但是對於路由部分,我卻慘敗。 (我可以修改路由/ arp表。)

  1. 是否有人知道OpenVPN如何將數據包從客戶端發送到服務器,以及從服務器發送到目標。 從Java打開套接字似乎是一種替代方法。 但我希望修改數據包(更改IP和/或MAC地址)並寫回虛擬分接接口就足夠了。 是這樣嗎?

  2. 我可以注入數據包發送其他位置,還是默認情況下收到的數據包移向應用程序層?

-編輯:

斯內里奧

Client Tap0 _____ Server Tap0 ______ Target
       Eth0              Eth0

目標:從客戶端ping通,在Tap接口上移動,目標僅查看服務器ip(匿名)

我到目前為止所取得的成就。

  • 在客戶端tap0界面上捕獲流量。

  • 我阻止服務器上的轉發流量點擊以便固定我在客戶端-服務器之間使用Java套接字編程的功能。

現在,我從服務器上的套接字讀取數據包,並嘗試使用OpenVPN Tap驅動程序的寫方法繼續前進,但是我不確定在哪里失敗。 我在服務器tap0上看到帶有tcpdump的數據包,但它們沒有傳遞到服務器eth0。

我最重要的問題是,如果我修改數據包(ip,mac地址)並調用寫方法,數據包是否有可能向前移動。 (或者無論您進行任何更改,它都會移到應用程序層嗎?)

任何幫助,將不勝感激。

1.路由是第3層(IP)問題,由操作系統處理。 至於第2層上的以太網幀,您有多種選擇。 無論如何,您都必須解析傳入數據包的標頭並提取MAC地址,然后根據MAC確定將數據包傳遞到何處:對於特定的客戶端,所有客戶端(廣播)或本地Tap接口。

選項1:在每個客戶端上,使用tun設備,然后讓服務器使用Tap設備。 為每個客戶端分配偽MAC地址,相應地響應來自服務器操作系統的ARP請求 ,然后讓服務器上的操作系統負責其余的工作。 在應用程序方面,您只需要將所有傳入數據包轉發到Tap設備,並將所有傳出數據包轉發到您為此MAC分配的客戶端。

選項2:讓客戶端選擇自己的MAC地址並通過網絡轉發ARP請求。 服務器應用程序必須決定是否從客戶端傳入數據包,是將數據包轉發給客戶端,還是將其發送到本地分接設備(如果地址與本地設備的MAC相匹配)。

在這兩種情況下,客戶端都將所有數據包從其本地tun / tap設備傳遞到服務器,反之亦然。

2.您幾乎可以做任何事。 僅當您決定將數據包寫入分接頭設備時,才“接收”數據包,您當然可以對任何數據包進行調整,或注入新數據包,...

最后,我發現使用tun設備在概念上更簡單,因為它們在第3層上工作。您必須在服務器上為每個客戶端打開一個tun設備,但是在應用程序中,您必須除了將來自設備的任何內容轉發到單個客戶端,什么都做不到,反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM