解決策

解決策

CentOS 6.10の最小インストールを実行しているヘッドレスサーバーでOpenVPNを使用して転送を設定しようとしています。理想的には、システムの起動時に始まります。

次の手順を実行してすべてを実行できました。ここそしてここ- しかし、これはvpn.shスクリプトを手動で実行した場合にのみ機能します(両方のチュートリアルによると)。スクリプトは次のとおりです。

#!/bin/sh

sudo openvpn --cd /etc/openvpn --config /etc/openvpn/conf.ovpn --script-security 2 --up /etc/openvpn/up.sh

OpenVPNと転送に加えて、以下を追加したいと思います。このテレグラムボットこれは他のすべての操作が完了した後に開始する必要があるため、up.shファイルの末尾に次の行もあります。

#!/bin/sh

/etc/init.d/transmission-daemon stop
/bin/sed s/IP_ADDRESS/$4/ /var/lib/transmission/.config/transmission/settings_template.json > /var/lib/transmission/.config/transmission/settings.json
/etc/init.d/transmission-daemon start
/etc/init.d/transmission-telegram start

理想的には、次のようなことがもっとできるはずです。この投稿要約:すべてのトラフィックがVPNを通過するのかトレントトラフィックのみを通過するのか、特に難しいわけではありません。

  1. 起動時に(インターネットに接続した後)OpenVPNを起動します。
  2. VPN接続が接続されている場合に転送するようにトランスポートを設定します。
  3. 成功したら、Transmission(および Telegram ボット)を実行します。
  4. いつでもVPNが失敗した場合は、転送(およびテレグラムボット)を正常に終了してください。

その記事に記載されている手順に従おうとしましたが、何らかの理由でイベントを発生させることはできませんtransmission-vpn-uproute-up.shチュートリアルのスクリプトによってトリガーされます)、常にコマンドラインinitctl: Event failedに移動してイベントを生成します。route-up.shAsk Ubuntuの投稿によると、

#! /bin/bash

/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local

down.shただし、コンテンツをコマンドラインに渡すと、次のエラーは発生しません。

/sbin/initctl emit transmission-vpn-down

その有無にかかわらず試しましたsudo

これを行う簡単な方法はありますか?これはCentOSではなくUbuntuのチュートリアルなので、何か、特にAUの他のチュートリアルで指定されたemit内容がありませんか?transmission-vpn-up

それとも、vpn.sh起動時に(この記事の最初のコードブロック)実行する方が簡単ですか? VPNがダウンした場合、これは同じようにきれいでエレガントですが、操作は実行されます。


クイックアップデート:

上記のAsk Ubuntuチュートリアル、特にCentOSではなかった/etc/init/transmission-up.conf使用しようとすると、元のエラーメッセージが表示されます。一時的にこのビットをコメントアウトしましたが、今はエラーメッセージはありません。/usr/sbin/ufwEvent failed

しかし、エラーメッセージがなく、VPNが動作しているにもかかわらず転送が開始されず、他の問題が発生しているようです。どこで確認できるかについてのヒントはありますか?

ベストアンサー1

解決策

以下は、この問題のいくつかの詳細な側面と回避策です(centos 6はsystemdを使用せず、centosはv7からsystemdに切り替えられました)。

セントース7ソリューション

起動時のOpenVPN設定:

systemd(サービスの実装)を使用して起動時に openvpn を起動できます。サービスを作成して有効にしてから起動する必要があります。 (サービスを有効にした後起動時に自動的に起動します)

1 - サービスの作成:(ルートを使用)

cd /etc/systemd/system
touch openvpn-custom.service
chmod 644 openvpn-custom.service

2 - サービスファイルを開く:(rootを使用)

/etc/systemd/system/openvpn-custom.service使用するテキストエディタで例を開きます。nano openvpn-custom.service

3 - サービスファイルの編集と設定:(rootを使用)

次のコードを貼り付けて修正してください。/etc/systemd/system/openvpn-custom.service

[Unit]
Description=OpenVPN Custom Setup Script 
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=forking
RemainAfterExit=yes
ExecStart=/full-path-to/your/vpn-script/vpn.sh
ExecStop=/full-path-to/a-scirpt/that-would-stop-openvpn/vpn-stop.sh

[Install]
WantedBy=multi-user.target

4 - サービスの有効化と開始:(rootを使用)

systemctl enable openvpn-custom.service
systemctl start openvpn-custom.service

次のコマンドを使用してサービスの状態を確認できます。systemctl status openvpn-custom.service

起動時の転送とテレグラムの設定(openvpnの状態に応じて):

openvpnソリューションと同じように、次のコードを使用して新しいサービスを作成し、有効にして起動します。

[Unit]
Description=Application Depending on OpenVPN 
After=network.target network-online.target openvpn-custom.service
Wants=network-online.target openvpn-custom.service

[Service]
Type=forking
RemainAfterExit=yes
ExecStart=/full-path-to/your/ovpn-applications.sh
ExecStop=/full-path-to/a-scirpt/that-would-stop-apps/ovpn-applications-stop.sh

[Install]
WantedBy=multi-user.target

あなたのovpn-applications.shは次のとおりです

#!/bin/sh
/bin/sed s/IP_ADDRESS/$4/ /var/lib/transmission/.config/transmission/settings_template.json > /var/lib/transmission/.config/transmission/settings.json
/etc/init.d/transmission-daemon start
/etc/init.d/transmission-telegram start

After=openvpn-custom.serviceサービスが openvpn に依存するため、Wants=openvpn-custom.serviceopenvpn サービスが開始されないか失敗した場合、他のサービスも開始されません。

セントース6ソリューション

起動時のOpenVPN設定:

1 - サービスの作成:(ルートを使用)

cd /etc/rc.d/init.d
touch openvpn-custom
chmod 755 openvpn-custom

2 - サービスファイルを開く:(rootを使用)

/etc/rc.d/init.d/openvpn-custom使用するテキストエディタで例を開きます。nano openvpn-custom

3 - サービスファイルの編集と設定:(rootを使用)

#!/bin/bash
#
# chkconfig: 2345 55 45
# description: Custom openvpn script
# processname: openvpn
#
### BEGIN INIT INFO
# Provides: openvpn
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Short-Description: The openvpn daemon
# Description: The openvpn daemon custom script
### END INIT INFO

#/etc/rc.d/init.d/openvpn-custom
# Source function library.
. /etc/init.d/functions


start() {
        echo -n "Starting custom openvpn... "
        /full-path-to/your/vpn-script/vpn.sh
        return 0
}

stop() {
        echo -n "Shutting down custom openvpn... "
        /full-path-to/a-scirpt/that-would-stop-openvpn/vpn-stop.sh
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        ;;
    restart)
        stop
        start
        ;;
    reload)
        ;;
    *)
        echo "Usage: openvpn-custom {start|stop|status|reload|restart}"
 exit 1
        ;;
esac
exit $?

4 - サービスの有効化と開始:(rootを使用)

chkconfig openvpn-custom on
service openvpn-custom start

次のコマンドを使用してサービスの状態を確認できます。service openvpn-custom status

ネットワークが準備されたときにのみopenvpnを起動する方法

初期化スクリプトの先頭のchkconfig定義は、インポートするS / K番号を決定します。

各「ランレベル」は実際には単純なディレクトリです(/etc/rc*.d/)は初期化スクリプト(/etc/init.d/) これらのシンボリックリンクの名前は、番号付きの S および K 項目で指定されます。

Sは始まり、Kは停止を意味します。 initがランレベルに入ると、S01からS99まで各initスクリプトを実行して、そのスクリプトによって制御されるサービスを開始します。 init がランレベルを離れると、K01 から K99 まで各スクリプトを実行して、そのスクリプトによって制御されるサービスを停止します。

手動で構成を確認するchkconfigスタイルのサービス定義とLSB(Linux Standard Library)スタイルのサービス定義の例を示します。

initscriptが両方のタイプを定義している場合は、LSB定義がchkconfig定義よりも優先される必要があります。

ネットワーク接続に依存するサービスがある場合は、10以降の開始番号を指定して、/etc/rc*.d/S10network以降にサービスが開始されていることを確認できます。または/etc/init .d/networkによるLSBの定義プロバイダー: $networkしたがって、LSB定義を使用できます。起動に必要: $network初期化スクリプトで。

起動時の転送とテレグラムの設定(openvpnの状態に応じて):

openvpnソリューションと同様に、次のコード(/etc/rc.d/init.d/openvpn-apps)を使用して新しいサービスを作成し、有効にして起動します。

#!/bin/bash
#
# chkconfig: 2345 55 45
# description: Custom openvpn-apps script
# processname: openvpn-apps
#
### BEGIN INIT INFO
# Provides: openvpn-apps
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Short-Description: The openvpn-apps daemon
# Description: The openvpn daemon custom script
### END INIT INFO
#/etc/rc.d/init.d/openvpn-apps

# Source function library.
. /etc/init.d/functions


start() {
        echo -n "Starting custom openvpn... "
        /full-path-to/your/apps.sh
        return 0
}

stop() {
        echo -n "Shutting down custom openvpn... "
        /full-path-to/your/stop-apps.sh
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        ;;
    restart)
        stop
        start
        ;;
    reload)
        ;;
    *)
        echo "Usage: openvpn-apps {start|stop|status|reload|restart}"
 exit 1
        ;;
esac
exit $?

あなたのapps.shは次のとおりです

#!/bin/sh
/bin/sed s/IP_ADDRESS/$4/ /var/lib/transmission/.config/transmission/settings_template.json > /var/lib/transmission/.config/transmission/settings.json
/etc/init.d/transmission-daemon start
/etc/init.d/transmission-telegram start

apps.shがopenvpn状態に依存するようにするには、まずapps.shの起動を遅らせることができます。sleep またはpsでopenvpnをチェックするbashループを書くまたはopenvnゲートウェイ(apps.sh)のping結果を確認してください。またはservice openvpn-custom status(apps.shから)結果を確認できます。

ソリューションに関する注意事項(6および7):

エラー防止openvpn:

openvpnが機能していない場合は、ネットワークをシャットダウンするように「安全装置」を設定して、VPNが機能していない場合に接続漏れを防ぐことができます。これまたはそれ解決策

アプリケーションが特定のインターフェイスを使用するように強制します。

openvpn設定がシステム全体をトンネリング/ルーティングする場合はこれを行う必要はありませんが、openvpnインターフェイスを介してすべてのトラフィックをルーティングしない場合は、アプリケーション(転送/テレグラム)をプロキシ/バインディング/強制できます。 VPNを使用してください。 Linuxには、アプリケーションを特定のインターフェースにバインドするためのいくつかのソリューションがあり、各ソリューションには長所と短所があります。Unixスタック交換の回答最も利用可能な可能性の詳細な説明

おすすめ記事