Openvpn

OpenVPN 和客戶端連接腳本

  • July 3, 2019

我有一個在橋接模式下執行的 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事件掛鉤,並查看它是否在客戶端斷開連接時執行。

引用自:https://serverfault.com/questions/736205