建立 openvpn 連接後,在 Debian 中啟動時執行守護程序
我正在使用樹莓派。(Debian 變體)。
預設情況下,openvpn 以 /etc/rc2.d/S03openvpn 啟動。我為我想在 openvpn 啟動並建立與我的 vpn 提供程序的連接後啟動的守護程序設置了一個
/etc/init.d
帶有符號連結的腳本。/etc/rc2.d/S04daemonname
openvpn 啟動和連接工作正常。但是,我想使用 vpn 連接的守護程序似乎在建立連接之前啟動,因為它使用我的標準 IP。如果我殺死守護程序並在終端中重新啟動它,它就會使用所需的 vpn ip。一旦建立 vpn 連接,我將如何使我的守護程序在啟動時執行?我可以通過等到 tun0 設備創建(如何?)來做到這一點,還是 tun0 創建不是已建立連接的同義詞,這意味著這可能為時過早?我還研究了在 init.d 腳本中使用執行時依賴項 LSB 標記,但找不到如何使某個網路設備 (tun0) 成為要求,我不確定這是否可行。還有一個文件
/etc/NetworkManager/VPN/
引用了 openvpn 服務,但我不確定如何使用它,或者是否正在使用 NetworkManager 守護程序,因為 /VPN 是它的唯一子目錄。我想要精確的解決方案,例如。不只是將我的 init.d 腳本以足夠低的執行優先級放在 /etc/rc2.d/ 中,或者等到應該建立 openvpn 連接。
openvpn
您可以使案例如該--up scriptname
選項執行腳本。在我看來,這似乎比期望在啟動該
openvpn
過程後的某個時間建立連接要好。您可能需要對從 執行腳本的可能方式進行一些試驗openvpn
,例如不使用--up
,而是使用--client-connect
等;查看openvpn
手冊頁以獲取更多資訊。
考慮設置
ip_nonlocal_bind
. 這是這個相關問題的答案 - https://serverfault.com/questions/474997/how-can-a-larger-delay-be-placed-between-two-interdependent-upstart-or-etc-init/475013 #475013。Google它 - 這是一個連結 - https://sebest.github.io/post/linux-how-to-bind-ip-that-doesn-t-exist-yet/我不得不承認我沒有測試過它,因為我沒有那麼有經驗。
在我看來,您正在嘗試將 postgres 綁定到與隧道關聯的 IP。如果是這種情況,這
ip_nonlocal_bind
是解決您問題的方法。設置 ip_nonlocal_bind 允許您綁定到任何 IP,甚至是與您的電腦無關的 IP,這正是您想要綁定到您還沒有的 IP 時想要的 - 例如,當使用在活動之間浮動的虛擬 IP 時和被動節點。假設這只是 ipv4;
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
或者扔進
/etc/sysctl.conf
net.ipv4.ip_nonlocal_bind