將 TUN 介面與 iptables 一起使用時的 NAT 和路由的正確方法

將 TUN 介面與 iptables 一起使用時的 NAT 和路由的正確方法

編輯:我是網路和發現新事物的新手:)

我以程式設計方式建立了一個 TUN 介面並能夠與之互動。

我設定並運行 ifconfig myTun 10.10.1.1/24 up

正如我在ifconfigping中看到的那樣,它已啟動並正在運行10.10.1.1

為了 100% 確定我的 TUN 介面是否已啟動並執行我的書面問題,我執行了以下操作:

我進行了 ping 操作10.10.1.2,程式中收到了資料包,我將其寫回 tun,然後在循環中再次收到它。

現在我確定所有資料包或者 10.10.1.x正在被 TUN 接收並寫入,沒有任何問題。

當我寫一個資料包時任何外部目標IP10.10.1.x已成功寫入 TUN,但沒有收到 TUN 的答案。

在搜尋和閱讀大量文章後,我認為它已被內核悄悄刪除。

我在 serverfault.com 上閱讀了很多關於 TUN 介面的 Q/A,我發現我錯過了邏輯中的一個重要部分,即路由

我的最終理解是:資料包正常並被Linux中的網路堆疊接收,但核心不知道如何處理資料包,因為它的目的地很奇怪。然後我發現我必須為核心指定一些路由iptables並啟用net.ipv4.ip_forward但不知道如何啟用。

我的最終目標是:

當我將任何目的地為 TUN 之外的任何數據包發送到TUN 時10.10.1.x,它必須路由到我的主接口(可以訪問互聯網,並且是wlps020f3),並且該數據包的任何結果都會接收回我的 TUN 接口

如何配置網路位址轉換iptables解決方法?

先謝謝了

答案1

啟用 IPv4 轉送

sudo sysctl -w net.ipv4.ip_forward=1

NAT流量從您的無線位址後方的隧道介面:

sudo iptables -t nat -A POSTROUTING -o wlps020f3 -j MASQUERADE

這些變更都不會在重新啟動後繼續存在。頂部連結和這個有這方面的更多資訊。

相關內容