Debian

將 OpenVPN 與 systemd 一起使用

  • February 2, 2021

好的,所以我一直在網上搜尋這個問題的解決方案,但似乎沒有對我有用的答案。希望有人可以幫助我。我只是想配置 OpenVPN 客戶端。

我正在跑步CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux,我剛剛切換到使用systemd. 轉換很順利,但現在我無法使用 systemd 啟動我的 OpenVPN 客戶端,我嘗試按照這些配置教程進行操作,但沒有任何效果。

我可以從命令行使用openvpn /etc/openvpn/vpn.conf. 所以我知道配置文件很好,它與 sysvinit 一起工作得很好,所以我並不感到驚訝。然後我嘗試只做一個狀態,systemctl status openvpn@vpn.service結果是:

$ sudo systemctl status openvpn@vpn.service
 openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

我意識到我需要為服務做一些設置。我想被提示輸入密碼,所以我按照本指南創建了一個openvpn@.servicein /etc/systemd/system/. 但是重啟 OpenVPN 服務仍然不會提示輸入密碼。

$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.

Fedora 教程介紹了創建符號連結的步驟,但沒有在演練中創建任何 .service 文件。

我錯過了什麼?我需要創建一個 openvpn@vpn.service 嗎?如果是這樣,我到底應該把它放在哪裡?我覺得這不應該這麼難,但我似乎找不到任何適合我的解決方案。我很樂意提供更多需要的資訊。

解決方案

-rw-r--r--  1 root root   319 Aug  7 10:42 openvpn@.service

[Unit]
Description=OpenVPN connection to %i
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target
openvpn@.service (END)

符號連結:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

提示輸入密碼

現在一切正常,除了提示輸入密碼連接。我已經嘗試過這個解決方案。我從上面稍微調整了文件,並添加了一個像範例中一樣的Expect 腳本。像魅力一樣工作!我的文件在下面。

從上面修改的行/lib/systemd/system/openvpn@.service

ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --management localhost 5559 --management-query-passwords --management-forget-disconnect --config /etc/openvpn/%i.conf
ExecStartPost=/usr/bin/expect /lib/systemd/system/openvpn_pw.exp

期待腳本/lib/systemd/system/openvpn_pw.exp。確保執行以下操作:

  • chmod +x劇本上。
  • telnet安裝

期望腳本的程式碼:

#!/usr/bin/expect
set pass [exec /bin/systemd-ask-password "Please insert Private Key password: "]

spawn telnet 127.0.0.1 5559
expect "Enter Private Key Password:"
send "password 'Private Key' $pass\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "exit\r"
expect eof

需要注意的是,上述解決方案確實會在以下登錄中記錄您以明文形式輸入的密碼/var/log/syslog/var/log/daemon.log

我認為帶有 systemd 的 Debian OpenVPN 設置目前有點損壞。為了讓它在我的機器上工作,我必須:

  1. 創建/etc/systemd/system/openvpn@.service.d(目錄),並在其中放置一個新文件:
[單元]
需要=networking.service
之後=networking.service

我打電話給我的文件local-after-ifup.conf。它需要以.conf. (這是目前有點損壞的位。) 2. /etc/tmpfiles.d在(我稱為 mine )中創建一個文件,local-openvpn.conf其內容為:

# 類型路徑模式 UID GID 年齡參數
d /run/openvpn 0755 root root - -

這是Debian 錯誤 741938(在 2.3.3-1 中修復)。 3. 創建一個符號連結到multi-user.target.wants(最簡單的方法是systemctl enable openvpn@CONF_NAME.service)例如,如果你有/etc/openvpn/foo.conf,你會使用openvpn@foo.service. 4. 如果您還在 systemd 中顯示了 SysV 初始化腳本,請將其禁用。這是Debian 錯誤 700888(在 2.3.3-1 中修復)。

注意:2.3.3-1 或更高版本尚未在 testing 中,儘管它處於不穩定狀態。

引用自:https://unix.stackexchange.com/questions/148990