OpenVPN 和客戶端連接腳本
我有一個在橋接模式下執行的 Debian Wheezy 上的 OpenVPN 伺服器(2.3.2)。就客戶端連接和訪問所需的網路而言,一切正常。我試圖通過使用客戶端連接選項添加一些花里胡哨。這是 openvpn 配置文件的相關部分:
script-security 3 system client-connect /etc/openvpn/scripts/clientconnect.sh
為了檢查腳本是否實際執行,clientconnect.sh 包含以下內容:
#!/bin/bash echo "testing">>/etc/openvpn/scripts/test exit 0
很簡單。
如果我從命令行執行腳本,則每次都將“測試”附加到 /etc/openvpn/scripts/test 中,並返回 0。
當我從客戶端連接時,我會在 /etc/openvpn/scripts/test 中獲得“測試”。偉大的!
但是當我斷開連接並再次連接時,我沒有得到另一個“測試”
因此,為了檢查它是否實際執行,我將 clientconnect.sh 中的退出值更改為 1
果然,每次從客戶端連接的嘗試都失敗了,因為腳本返回了一個非 0 值。
為什麼看起來腳本沒有執行?
順便說一句,如果我在伺服器上重新啟動 openvpn 服務,那麼我會再次獲得“測試”,但同樣,後續連接上沒有寫入任何內容。
任何指點/幫助/神秘咒語都非常感謝!迪倫
OpenVPN 對網路中斷非常有彈性(而且它真的很擅長),所以除非您
explicit-exit-notify [n]
的客戶端配置中有類似的東西,否則斷開該客戶端的連接看起來就像伺服器的網路中斷。然後,根據您如何配置超時/保活等,在伺服器決定客戶端真正消失之前可能需要很長時間。您可能只是在測試中沒有達到這個條件。
驗證這一點的一種方法是啟用伺服器中的管理介面,然後在
telnet localhost 1194
那裡執行並驗證客戶端是否真的斷開連接 - 在客戶端斷開連接之後 - 通過執行“狀態”命令並檢查其輸出。另一種技術含量更低的測試方法是將腳本與
client-disconnect
事件掛鉤,並查看它是否在客戶端斷開連接時執行。