このスクリプトがあります。
#! /bin/sh
# /etc/init.d/vpnscript
### BEGIN INIT INFO
# Short-Description: Simple script to start a program at boot
# Description: A simple script from http://www.stuffaboutcode.comwhich will start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1"
in start)
echo "Connecting to OPENVPN"
# Connect to the VPN
sudo openvpn /etc/openvpn/connection1.ovpn
sudo mount -a
;;
stop)
echo "Stopping OPENVPN"
# Disconnect
killall openvpn
;;
*)
echo "Usage: /etc/init.d/vpnscript {start|stop}"
exit 1
;;
esac
Openvpn部分はうまくいきますが、プロセスを使用しようとするとsudo mount -a
何もしません(または何かを待っているのかわかりません)。
私が望むことを行う他の方法はありますか?それとも私のスクリプトに問題がありますか?私はシェルスクリプトの初心者です。
いくつかの注意:
Debianメソッド()を使ってOpenVPNを起動してみましたが、
/etc/default/openvpn
起動しなかったのでこの方法で試してみました。システムで最も重要なことは、OpenVPNが起動する前に発生し、OpenVPN接続でネットワークドライブを参照することです
mount -a
。/etc/fstab
サーバーはOpenmediavault 3.0を実行します。
ベストアンサー1
あなたが見ている基本的な問題は、OpenVPNがまだ実行され、sudo openvpn /etc/openvpn/connection1.ovpn
再び戻ることができないことです。したがって、スクリプトは次の行に達しません。 (また:initスクリプトはrootとして実行されるので、避けてくださいsudo
)。したがって、簡単に言えば、&
行の末尾にアンパサンド()を追加する必要があります。あるいは、より良い方法はOpenVPNに適切な--daemon
オプションを提供することです(ただし、制限についてはOpenVPNのドキュメントを読んでください)。
もちろんです。しなければならないVPNを有効にするDebianの方法を使用してください。 JessieではPre-jessieまたはsystemdを持たないJessieでは、その行を編集して変更します。 (おそらく拡張子をからに変更する必要があるかもしれません)。systemctl enable [email protected]
/etc/default/openvpn
AUTOSTART
.ovpn
.conf
これにより、次の問題が見つかります。 OpenVPNが返されます。今後VPNが有効になっています。ただし、VPN が実際にトラフィックを転送するまではマウントを開始できません。この問題を解決するために私が見つけた最も簡単な方法は、systemdサービスを使用してVPNのリモート側にpingを送信することです。
$ cat vpn-really-up.service
[Unit]
Description=Ping Einstein to make sure the VPN is really up
[email protected]
[email protected]
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/ping -c 2 -w 300 192.168.X.Y
TimeoutStartSec=330
もちろん、init.dスクリプトでping行を使用することもできます。 (これではないかもしれませんので参考にしてください。最高これを行う方法 ---route-up
たとえば、コマンドが優れている可能性があります。私が設定したときにこれらが存在しなかったのか、それについて知らなかったのかはわかりません。私のコンピュータは実際にテストを実行しています。 )
その後、ファイルシステム用のsystemdマウントデバイスを作成できます。内部名が機能するようにVPNを介して一部のドメインをDNSサーバーに転送するために使用されるため、dnsmasqにも依存します。
$ cat mnt-Einstein-music.mount
[Unit]
Description=/mnt/Einstein/music
Requires=dnsmasq.service vpn-really-up.service
After=dnsmasq.service vpn-really-up.service remote-fs-pre.target
[Mount]
Where=/mnt/Einstein/music
What=Einstein.home:/srv/music
Options=nosuid,nodev,intr,rsize=4096,wsize=4096,nfsvers=3,fsc
Type=nfs
TimeoutSec=180s
[Install]
WantedBy=multi-user.target
(使用中にインストールも可能で、実際にsystemdを使用すると非常に簡単です。参考資料を参照man 5 systemd.automount
)。
最後に、停止目標を修正する必要があります。〜しなければならないVPN を停止する前に、ファイルシステムをアンマウントしてください。そうしないと、コンピュータが再起動/終了すると動作が停止します。動作しているかテストする必要があります。それ以外の場合は、ある日コンピュータにSSHでアクセスして再起動し、リセットボタンを押すために計画外の移動を行う必要があります。
PS:私にもこのファイルがあります:
$ cat [email protected]/local-after-ifup.conf
[Unit]
Requires=networking.service
After=networking.service
...私の考えでは、systemdがネットワークインターフェイスを停止する前に、OpenVPN(およびすべてのVPNファイルシステム)が停止していることを確認する必要があるようです。