如何讓 OpenVPN 伺服器將 tun0 封包轉送到本機網路?

如何讓 OpenVPN 伺服器將 tun0 封包轉送到本機網路?

我嘗試透過 TUN 連接協調三台機器。

FREEBSD 在 VPN 上
的本機子網路 10.0.202.1/24 上執行 OpenVPN 伺服器 (tun) 10.0.200.21/24 的盒子

REMOTE

VPN 上的 公用 IP 10.0.202.6/24

WEBSERVER
本地子網路上的 10.0.200.31/24

我可以透過 OpenVPN 連接REMOTE到 VPN FREEBSD,連接正常,但配置不正確。當我嘗試透過在瀏覽器中輸入IP 位址REMOTE來連線時,無法存取。如果我直接連接到本地子網,則可以存取它。WEBSERVERWEBSERVERREMOTEWEBSERVERREMOTE

我在故障排除時了解到以下內容。

  • REMOTE可以 pingFREEBSD甚至 SSH 到它。
  • FREEBSD在的乙太網路連接埠上設定的封包擷取不會擷取來自或傳送往REMOTE的 VPN IP 10.0.202.6 的封包。因此 REMOTE 的封包無法到達本地子網路。
  • openvpn.log文件上FREEBSD有以下行:GET INST BY VIRT: 10.0.200.31 [failed]

因此,OpenVPN 似乎不會將 TUN 裝置上收到的封包轉送到 的FREEBSD乙太網路介面卡並轉送到本機子網路。

我的 server.conf 檔案中有以下行。
push "route 10.0.200.0 255.255.255.0"

我嘗試添加這一行,但沒有幫助。
route 10.0.200.0 255.255.255.0


這是路由表FREEBSD

路由表

網際網路:
目標網關標誌參考使用 Netif 過期
預設 10.0.200.1 UGS 0 4306 re0
10.0.200.0 連結#9 U 0 61582 re0
10.0.200.21 連結#9 UHS 0 41 lo0
10.0.201.0 10.0.200.1 UGS 0 0 re0
10.0.202.0 10.0.202.2 UGS 0 0 tun0
10.0.202.1 連結#12 UHS 0 0 lo0
10.0.202.2 連結#12 UH 0 0 tun0
本地主機連結#11 UH 0 193743 lo0


我已經在網上閱讀了有關該GET INST BY VIRT: 10.0.200.31 [failed]消息的信息,並建議 Linux 計算機運行以下命令。
echo 1 > /proc/sys/net/ipv4/ip_forward
我害怕運行它,因為我不理解它並且不想進入FREEBSD奇怪的配置。我還強烈喜歡修改 server.conf 檔案以自動建立必要配置的解決方案,以便在 OpenVPN 關閉時對其進行正確管理和拆除。

這個問題的解決方法是什麼?

答案1

發現問題了。事實證明,我上面提到的基於 FreeBSD 的 NAS 應用軟體 FreeNAS 的FREEBSD設定net.inet.ip.forwarding為 0 sysctl -a | grep net.inet.ip.forwarding。為了讓資料包轉發,我必須做一個sysctl net.inet.ip.forwarding=1.

此變更不會在重新啟動後持續存在。我想我可能必須使用 /etc/rc.conf 檔案並設置gateway_enable="YES",但到目前為止我發現這個設定直到重新啟動才得到處理,不幸的是在 FreeNAS 上, rc.conf 似乎每次重新啟動都會被覆蓋。可以將此變數寫入 /etc/defaults/rc.conf,該變數應該儲存系統的預設值,並且會被 rc.conf 中的自訂配置覆蓋,但是 /etc/defaults/rc.conf檔案頂部有一條警告,禁止對其進行編輯。

所以,這個問題還沒有完全解決,但至少我已經弄清楚問題所在了。現在我明白了這一點,我現在註意到登入本機子網路上的 https Web 管理裝置時出現問題。這將是另一個需要解決的問題。

答案2

好的,您的 VPN 用戶端有一條到達10.0.200.0/24網路的路由,您的 VPN 伺服器也有一條路由。但問題是您的網路伺服器是否10.0.200.31有存取10.0.202.0/24網路的路由?

在 freebsd 機器上執行 tcpdump。我懷疑您會看到來自主機的流量10.0.202.6被轉發,但您沒有看到任何回傳流量。

相關內容