
我嘗試透過 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
來連線時,無法存取。如果我直接連接到本地子網,則可以存取它。WEBSERVER
WEBSERVER
REMOTE
WEBSERVER
REMOTE
我在故障排除時了解到以下內容。
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
被轉發,但您沒有看到任何回傳流量。