web-dev-qa-db-ja.com

OpenVPN経由の伝送デーモン

最近、UbuntuをインストールしたBeagleBone Blackを取得しました この方法を使用 。これまでのところうまくいきました。 BeagleBoneをトレントボックスとして使用したいのですが、インターネット接続を介して直接実行したくありません(ISPがそれを好むとは思わないため)。ヨーロッパのサーバーからVPNサブスクリプションを購入しました。 。私はラップトップを手動でこのVPNに接続してから、Transmissionを実行しました。 VPN接続がUbuntuで機能し、ホストがOpenVPNのセットアップ情報を提供することを知っています。厄介なことに、割り当てられたIPアドレスの動的な性質は頻繁に変更されることを意味するため、VPNでラップトップを使用する場合、Transmissionのリスニングアドレスを手動で必要な値に設定します。

理想的には、次のセットアップが必要です。

  • 送信はVPN上でのみ実行され、通常のWAN接続上でトレントを実行することは禁止されています
  • Transmissionに向けられたトラフィックのみがVPNを介して受け入れられるか送信され、他のすべての未承諾トラフィックはドロップされます
  • 転送は、割り当てられたIPアドレスに基づいて、適切なポートを使用してリッスンします
  • OpenVPNはブート時に自動的に開始し、その後、伝送を開始します
  • TransmissionのWeb GUIは、LAN経由でアクセスでき、おそらくWAN接続からインターネット経由でアクセスできます(つまり、VPN経由ではない)
19
seanlano

注:(2016-02-22)この設定では、通常の方法でトレントトラッカーにDNSクエリがリークすることがわかりましたVPN経由で送信するのではなく、WAN。これを修正する方法を調査しています。ただし、接続自体はVPNを適切に使用するため、設定を実行し続けます。


更新:BeagleboneでTransmissionをダウンロードするように設定すると、CPU使用率は100%になりますしばらく。同じ時間後には発生しないようです。一晩中問題ないこともあれば、10分後に苦労することもあります。また、すべてのトレントを一時停止し、CPUの負荷が通常に戻るのを待ってから再開することで回復することもできます。まだ調査中です。回避策は、トレントを定期的に一時停止および再開することですが、あまり良い回避策ではありません。 この問題は、Beaglebone、およびおそらく他のARMデバイスにのみ適用されます。 x86 CPUでこの問題が発生したことはありません。


前書き

私は、BeagleBone Blackで実行するUbuntu 14.04用にこのソリューションを開発およびテストしました。私が使用しているVPNプロバイダーは ibVPN と呼ばれています。ただし、サポートされているハードウェア(つまり「通常の」x86コンピューター)、OpenVPN互換VPNプロバイダー、および14.10以降で動作するはずです。ある時点で、UbuntuはブートにSystemDを使用すると信じています。つまり、ここで使用するUpstartスクリプトを移行する必要があることを意味します。 更新:Jonas Kalderstam 以下の回答があります SystemDを使用します。また、ファイアウォールとしてufwが使用されていると想定しています。別のものを使用している場合は、ここでufwコマンドを変更する必要があります。

すべての作業はシステムへのSSH接続を介して行われると想定していますが、物理端末に入力しても同様に機能します。

これは非常に長いチュートリアルです。最初にすべてを読んで、自分がやろうとしていることに満足していることを確認してください。

また、UPnP/NAT-PMPデータを送信するために、TransmissionがIPアドレスに適切にバインドされていないことにも気付きました。 VPNサーバーからのVPN経由ではなく、ローカルルーターからのポート転送。そのため、Upstartスクリプトはポート転送を無効にしました。これは、動作しているように見えるかもしれませんが、動作していないためです。 iptablesとiprouteを使用して、debian-transmissionユーザーからのすべてのトラフィックをVPNに強制することができるはずですが、私はまだこれを調査しています。デフォルトのルートがすべてのインターネットデータをVPN経由で送信するように変更された場合にも機能するはずですが、このサーバーを他の目的にも使用しているため、これはしたくありません。 VPN。この効果は、Transmissionがポートフォワーディングが機能する場合よりも低速でトレントをダウンロードする可能性が高いことですが、ポートフォワーディングなしでほとんどのトレントで妥当な速度を達成できることがわかりました。 VPNでUPnPを本当に使用したい場合、この質問にはさらに情報がありますUpdate:falk0069には以下の素晴らしいヒントがあります VPN経由でUPnPを促進するために役立ちます。

OpenVPNのインストールと構成

ここで(デスクトップから)動作させる前に、Ubuntuを使用してVPN接続を動作させることをお勧めします。これにより、設定が正しいことを確認し、デバッグに費やす時間を短縮できます。

まず、必要なパッケージをインストールします

Sudo apt-get install openvpn

次に、構成ファイルを保存するディレクトリを作成します。使用しているプロバイダーなので、/ opt/ibVPNを使用しています。好きなものに変更してください。

Sudo mkdir /opt/ibVPN

この新しいディレクトリで最初に行うことは、VPNクライアントを実行するための構成ファイルを作成することです。 ibVPNは、Linuxユーザー向けの基本的な設定ファイルを提供します。これはほとんどコピーして貼り付けただけです。

cd /opt/ibVPN
Sudo vim config.ovpn

VPNプロバイダーの設定を使用して、編集したバージョンをコピーしてvimに貼り付けます。 (FYI、Ubuntuターミナルへの貼り付けはCtrl+Shift+V)VPNプロバイダーからこれを取得できるはずです。

remote 888.888.888.888 1194 udp      #This address will be different for you
client
dev tap1
resolv-retry infinite
script-security 3 system
explicit-exit-notify 3
persist-key
mute-replay-warnings
ca ibvpn.com.crt
comp-lzo
verb 3
mute 20
ns-cert-type server
fragment 1300
route-delay 2
reneg-sec 0
max-routes 5000
link-mtu 1578

auth-user-pass pass
auth-nocache
persist-tun
route-noexec
lport 1195
lladdr 00:FF:11:AA:BB:CC
route-up "/opt/home/openvpn/route-up.sh"
down "/opt/home/openvpn/down.sh"

vimに慣れていない人は、Insertを押してテキストを入力または貼り付けてから、Escapeおよびtype:wqを保存して終了します。もちろん、vimを使用する必要はありません-任意のテキストエディターが動作します。

この設定ファイルについて簡単に説明します。最初の18行は、サーバーで使用する特定の設定を指定します。これらはibVPNからのものです。異なるプロバイダーを使用している場合、おそらく若干異なります。次の行は、指定した変更オプションです。

  • 設定ファイルにauth-user*の行が含まれている場合は、これらをコメント化します。このセットアップが自動的に機能するためには、ユーザー名とパスワードを含むファイルが必要です。したがって、VPNプロバイダー用に選択したパスワードが強力でランダムで一意であることを確認してください。

  • auth-user-pass passは、ユーザーとパスワードを読み取るためのpassというファイルを探すようOpenVPNに指示します。

  • auth-nocacheはメモリからパスワードを削除します。これにより、パスワードが心配な場合にセキュリティがわずかに向上する可能性があります。

  • persist-tunは、接続が切断された場合にサーバーから同じIPアドレスを保持しようとします。これは、送信デーモンの開始と停止が少ないことを意味するはずです。

  • route-noexecは、OpenVPNクライアントに、サーバーが提供するルートを自動的に使用しないように指示します。これにより、VPNを介してすべてのネットワークトラフィックがプルされます。トレントトラフィックを送信するだけなので、異なるルーティング設定を使用する必要があります。

  • lport 1195は、OpenVPNクライアントに1194の代わりにポート1195を使用するように指示します-私の場合、同じデバイスでOpenVPNサーバーを実行したいので、サーバーはポート1194を使用する必要があります。 OpenVPNサーバーの場合、この変更を行っても害はありません。

  • dev tapdev tap1に変更し、別のOpenVPNサーバーを実行しているため、仮想デバイスがOpenVPNによって割り当てられるのではなく、強制的にtap1になるようにしました。 VPNサーバーを実行していない場合でも、この変更は重要ではありません。ファイアウォールスクリプトはtap1を使用するように作成されているため、別のデバイスを使用する場合は、必要に応じてこれらのスクリプトを変更することを忘れないでください。

  • lladdr 00:FF:11:AA:BB:CCは、このMACアドレスを持つようにタップインターフェイスを割り当てるようOpenVPNに指示します。これは、iptablesファイアウォールルールに役立ちます。

  • route-upおよびdownスクリプトを実行して、必要に応じてTransmission-daemonを開始および停止します-これらは、適切なIPにTransmissionを正しくバインドするために必要な接続に関する情報を含む環境変数で実行されるため、ここで必要ですアドレスとポート。

私の場合、VPNプロバイダーからサーバー証明書を取得しました。これも構成ファイルと同じディレクトリに存在する必要があります。

Sudo vim /opt/ibVPN/ibvpn.com.crt

これをコピーして貼り付けるか、SCPまたはSSHFSを介して移動します。

-----BEGIN CERTIFICATE-----
MIIDeDCCAuGgAwIBAgIJAMVKgpjMPUfxMA0GCSqGSIb3DQEBBQUAMIGFMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCQ0ExFTATBgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMG
A1UEChMMRm9ydC1GdW5zdG9uMRgwFgYDVQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAf
BgkqhkiG9w0BCQEWEm1lQG15aG9zdC5teWRvbWFpbjAeFw0xMDA3MjExOTU5MzVa
Fw0yMDA3MTgxOTU5MzVaMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFTAT
BgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMGA1UEChMMRm9ydC1GdW5zdG9uMRgwFgYD
VQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAfBgkqhkiG9w0BCQEWEm1lQG15aG9zdC5t
eWRvbWFpbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz23m3BXY5Asiw8Dx
T4F6feqsp+pIx6ivftTniyUCbSAxI1J1s1x75DzxmUpIwPu5xavzgPXgZr8FT81X
JGqF9km4AE95iddJawKx0wNgdTo7GximQq9rw0dsQIB5hZZQ9TJwHC3VOnmEic5A
OawKOCybMcRs8saLakZOgh7Xc+UCAwEAAaOB7TCB6jAdBgNVHQ4EFgQUeRhE2N4l
XwL4H1dbjkZ4ou6fj3AwgboGA1UdIwSBsjCBr4AUeRhE2N4lXwL4H1dbjkZ4ou6f
j3ChgYukgYgwgYUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVMBMGA1UEBxMM
U2FuRnJhbmNpc2NvMRUwEwYDVQQKEwxGb3J0LUZ1bnN0b24xGDAWBgNVBAMTD0Zv
cnQtRnVuc3RvbiBDQTEhMB8GCSqGSIb3DQEJARYSbWVAbXlob3N0Lm15ZG9tYWlu
ggkAxUqCmMw9R/EwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQASt0pl
WzVseQLTNM8Mlgw4ZnGAv/x2xnijmMqrkE+F7pnaOicGpxgCfMKzjZuJu0TNJqF2
fibE7GhMdomD4dLFgIu8Wb5E7iQ1CSBEOGumRhK8qCsDzjr7WXUdhqA6Xvo+ylU6
DMzy0Wn3NNvfGC+qxOgybYCJwDnVPi0CEDSbzQ==
-----END CERTIFICATE-----

明らかに、ibVPNアカウントを使用していない場合、証明書は異なります。

パスワードファイルを作成しましょう。

Sudo vim /opt/ibVPN/pass

最初の行は完全なユーザー名でなければならず、2番目の行はパスワードでなければなりません。これがこのファイルの唯一のコンテンツでなければなりません。

[email protected]
myBIGstrongpassword1234567890

また、このファイルの権限を保護する必要があります。そうしないと、OpenVPNが起動しません。

Sudo chmod 400 pass

これにより、ファイルは読み取り専用になり、所有者のみが対象になります(つまり、他のユーザーはまったく読み取りできません)

これらのコマンドは、起動時に実行するファイルを作成し、rootのみが実行できるように設定します。

Sudo touch route-up.sh
Sudo touch down.sh
Sudo chmod 700 route-up.sh
Sudo chmod 700 down.sh

この時点で、VPN接続が実際に機能するかどうかをテストすることをお勧めします。以下で接続を開始します。

Sudo openvpn --cd /opt/ibVPN --config config.ovpn

上下の外部コマンドを実行できなかったという警告が表示されますが、心配する必要はありません。正常に機能する場合、ターミナルにInitialization Sequence Completedが表示されます。 Control+Cを押して接続を終了します。動作しない場合は、続行する前にその理由を調査して修正する必要があります。仕事を始めるまでに数回かかることがあることがわかりました。パスワードファイルが正しいことを確認してください。インターネットにはOpenVPNに関する素晴らしいリソースがたくさんありますので、ご覧ください。

この時点で、Transmissionの起動と実行に移るのがおそらく最も簡単です。 VPNと伝送の両方が別々に実行できることを確認したら、それらを組み合わせることができます。

Transmissionのインストールと構成

必要なパッケージをインストールします。

Sudo apt-get install transmission-daemon

デフォルトでは、伝送はブート時に自動的に実行されます。最終的にOpenVPNを使用して送信を開始するため、これを無効にする必要があります。これを行うには、Transmission-daemonの構成ファイルを編集します

Sudo vim /etc/default/transmission-daemon

そして、次の行を変更して読み取ります。

ENABLE_DAEMON=0

これで、ブート時に送信が開始されなくなります。

ここで、Transmission設定が存在するディレクトリと、ダウンロードしたトレントが入るディレクトリを作成しましょう。これは、ある種のディスクが既にセットアップされており、/ media/arm-disk /にマウントされていることを前提としています。セキュリティのために、デーモンはルートまたは「ubuntu」としてではなく、独自のユーザーによって実行されます。新しいユーザーは、transmission-daemonのインストーラ「debian-transmission」によって作成されます。このユーザーは、作成したフォルダーを所有する必要があり、ダウンロードするトレントの保存場所への読み取りおよび書き込みアクセス権が必要です。

Sudo mkdir /opt/transmission
Sudo chown debian-transmission:debian-transmission /opt/transmission
Sudo mkdir /media/arm-disk/torrents-complete
Sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-complete
Sudo mkdir /media/arm-disk/torrents-incomplete
Sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-incomplete

次に、必要な設定ファイルを作成するために、簡単に送信を開始する必要があります。

Sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

このコマンドは、debian-transmissionユーザーとしてtransmission-daemonを起動し、設定ファイルに/ opt/transmissionディレクトリーを使用するように指示し、フォアグラウンドで実行し続けるように指示します。数秒間実行されたら、Control+Cを押して終了します。これで、設定ファイルを編集できます。

Sudo -u debian-transmission vim /opt/transmission/settings.json

次に、デフォルトから次の行に変更して読み取る必要があります。

"download-dir": "/media/arm-disk/torrents-complete",

"incomplete-dir": "/media/arm-disk/torrents-incomplete",

"incomplete-dir-enabled": true,

"rpc-whitelist": "127.0.0.1,192.168.1.*",

保存して終了(エスケープ、:wqと入力してEnterを押します)

中間の2つの編集により、「不完全な」ディレクトリを使用できるようになり、完成したトレントを未完成のトレントから分離します。これは完全に必要というわけではありませんが、個人的には非常に便利です。最後の編集により、LAN上の任意のコンピューターからWeb GUIにアクセスできるようになります(LANサブネットが192.168.1.0であると想定し、異なる場合はこれを変更します)。

Transmissionを再度実行して、正常に動作し、実際にtorrentをダウンロードできるかどうかを確認することをお勧めします。 Webブラウザウィンドウを使用してGUIにアクセスし、トレントを追加します。最初に、LANからファイアウォールを介してWeb GUIへのアクセスを許可してから、伝送デーモンを再度実行します。

Sudo ufw allow in from 192.168.0.0/16 to any port 9091
Sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

Firefox(または任意のブラウザ)で次のURLにアクセスします。 http://XXX.XXX.XXX.XXX:9091 、XXXはLAN上のサーバーのアドレス(192.168など)に置き換えられます.1.10)。 1080p60hzのBig Buck Bunnyなど、ダウンロードするトレントを見つけます。これは無料のショートフィルムで、合法的に無料でダウンロードできます。 Transmission GUIで、[Open Torrent]ボタンをクリックし、最初のボックスに このリンクを貼り付けます (または他の任意のtorrent)をクリックします。次に、「アップロード」を押します。 Transmissionが正常に機能している場合、トレントはダウンロードを開始します。そうでない場合は、続行する前に理由を解決する必要があります。インターネット上には、伝送デーモンを使用するための多くのリソースがあります。また、選択したトレントが機能していない可能性もあります。最初に他のいくつかを試してください。

ダウンロードが完了したら、ターミナルウィンドウでControl+Cを押して、送信デーモンを停止します。

VPNインターフェイスへのバインディング送信を構成する

次に、VPNの準備ができたときに送信を開始するために使用されるUpstartスクリプトを作成しましょう。

Sudo mv /etc/init/transmission-daemon.conf /etc/init/transmission-daemon.conf.bak

これで問題が発生しても心配する必要はありません。Upstartファイルが存在する場合、それをバックアップするだけです。 vimを開いて新しいものを編集しましょう。

Sudo vim /etc/init/transmission-daemon.conf

これをエディターに貼り付けます:

description "transmission-daemon, attached to OpenVPN tunnel tap1"

start on transmission-daemon-start
stop on runlevel [!2345] or transmission-vpn-down

# This includes the information from OpenVPN into this environment

export LOCAL_IP
env PORT=51413

# give time to send info to trackers
kill timeout 30

# Run as unprivileged user
setuid debian-transmission
setgid debian-transmission

# Start transmission again if it stops for some reason
respawn
# If transmission stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60

exec /usr/bin/Nice -15 /usr/bin/transmission-daemon --config-dir /opt/transmission --bind-address-ipv4 $LOCAL_IP --peerport $PORT --no-portmap --foreground

Vimを保存して閉じます。 (Escape、次に:wqと入力します)。もう一度、vimを開きます。

Sudo vim /etc/init/transmission-up.conf

これを貼り付けます:

description "Script to create firewall and routing rules for transmission-daemon"

start on transmission-vpn-up

# This includes the information from OpenVPN into this environment
export VPN_GATEWAY
export LOCAL_IP
env PORT=51413

task

script
    # Set up IP route, firewall rules
    # It doesn't matter if they already exist, they will be skipped
    /sbin/ip route add default via $VPN_GATEWAY dev tap1 table 200
    /sbin/ip rule add from $LOCAL_IP table 200
    /sbin/ip route flush cache
    /usr/sbin/ufw insert 1 reject out on eth0 from any port $PORT
    /usr/sbin/ufw insert 1 reject in on eth0 to any port $PORT
    /usr/sbin/ufw insert 1 deny in on tap1 to any
    /usr/sbin/ufw insert 1 allow in on tap1 to any port $PORT proto udp

    # Start the actual transmission-daemon process, in a separate task so that unprivileged user/group can be set
    /sbin/initctl emit transmission-daemon-start LOCAL_IP=$LOCAL_IP

end script

繰り返しますが、vimを保存して閉じます。 (Escape、次に:wqと入力します)。最後に:

Sudo vim /etc/init/transmission-down.conf

これを貼り付けます:

description "Script to remove firewall rules for transmission-daemon"

start on runlevel [!2345] or stopping openvpn-transmission
env PORT=51413

task

script
    # Take down IP route, firewall rules
    # It doesn't really matter if they don't get taken down, but this will be cleaner
    /usr/sbin/ufw delete reject out on eth0 from any port $PORT
    /usr/sbin/ufw delete reject in on eth0 to any port $PORT
    /usr/sbin/ufw delete deny in on tap1 to any
    /usr/sbin/ufw delete allow in on tap1 to any port $PORT proto udp

    /sbin/ip route flush cache

end script

これらのスクリプトは、「transmission-vpn-up」信号をリッスンするようUpstartに指示します。 「transmission-up.conf」スクリプトは、VPNインターフェイスを介してローカルVPNアドレスからトラフィックを送信するために必要なルーティングルールを設定し、VPNから送信用のリスニングポートへのトラフィックを許可するようにファイアウォールを設定します。通常のLANインターフェイスから伝送のリスニングポートに向けられたトラフィックはブロックされます。次に、「transmission-daemon.conf」スクリプトは、VPN-IPアドレスにバインドするために必要な設定でtransmission-daemonを開始します。このコマンドは、UPnP/NAT-PMPが無効になっていることにも注意してください-ポート転送に関する上部のメモを参照してください。 「Nice -15」は、Transmissionの優先順位を低く設定します。これは、低スペックのBeagleBoneを使用するときに役立ちます。場合によっては、Transmissionがリソースを独占するため、システムの速度が低下します。少なくとも低い優先度では、より重要なシステムタスクを実行できます。 「transmission-down.conf」スクリプトは、VPNが停止したときにファイアウォールルールを削除します。転送デーモンを非特権ユーザーとして実行できるように3つの異なるスクリプトが使用されますが、ファイアウォールルールはrootとして実行できます。

次に、OpenVPNの設定に戻り、「ルートアップ」および「ダウン」スクリプトを編集して、送信スクリプトの開始と停止をトリガーします。

Sudo vim /opt/ibVPN/route-up.sh

これをvimに貼り付けます:

#! /bin/bash

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

このスクリプトが行うことは、Upstartに送信デーモンを開始することを伝え、VPN接続にアタッチするために必要な情報を与えることだけです。

Sudo vim /opt/ibVPN/down.sh

繰り返しますが、より多くの貼り付け:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

このスクリプトはさらに単純です-伝送デーモンが停止することを通知します。

この時点で、VPN configフォルダー全体の所有者がルートユーザーであることを確認することをお勧めします。これらのスクリプトはルートとして実行されるため、変更できるユーザーは誰でもルートユーザーとして実行できます。

Sudo chown root:root -R /opt/ibVPN
Sudo chmod 700 -R /opt/ibVPN
Sudo chmod 400 /opt/ibVPN/pass

これは、rootユーザーのみがVPN接続設定を変更または表示できることを意味します。

OK、ほぼ完了です!これまでにセットアップが機能しているかどうかテストしてみましょう。

Sudo openvpn --cd /opt/ibVPN --config config.ovpn

Transmission Web GUIに再度接続し、既存のトレントを再開するか、新しいトレントを追加します。おそらくピアを待って数分後にダウンロードできるはずです。私が見つけた気の利いた方法は、iftopを調べることです。 iftopをインストールし、実行します:

Sudo apt-get install iftop
Sudo iftop -i tap1

この画面には、VPNを介して実行されているすべての接続が表示されます。トレントがダウンロード中で、VPNを正しく使用している場合、ここには多くのIPアドレスとホスト名があります。 LAN接続のiftopも参照してください。

Sudo iftop -i eth0

ここでは、VPNサーバーである単一のIPアドレスへの大量のトラフィックを確認し、BeagleBoneで他のサービスを実行していないと仮定して、他のLANデバイスへのトラフィックを最小限に抑える必要があります。

VPNが機能していることを確認するには、 これらの指示に従って を実行します。
このサイトでは、トレントをダウンロードして、他のピアがあなたに接続するために使用するIPアドレスを確認できます。すべてが機能している場合、これはあなた自身のWAN IPアドレスではなくVPN IPアドレスになります。

問題が発生している場合は、以下を実行してUpstartエラーログを確認できます。

Sudo tail -f /var/log/upstart/transmission-daemon.log

別のターミナル/ SSHウィンドウで、上記のようにVPN接続を開始しながらtailコマンドを実行して、エラーメッセージを探します。インターネット上で掘り出し物がない場合は、エラーメッセージを見ることで問題を解決できるか、コメントを投稿できます。

自動的に開始するようにすべてを構成する

OpenVPNトンネルを開始するコマンドを手動で発行することに満足している場合、または独自のスクリプトを使用して実行する場合は、これで完了です。しかし、起動時に起動したかったので、OpenVPNを起動するための別のUpstartスクリプトを作成しました。

Sudo vim /etc/init/openvpn-transmission.conf

これが最後の貼り付けです。

description "OpenVPN client, with attached transmission-daemon"

start on started networking
stop on runlevel [!2345] or stopped networking

# Give time for Transmission to send info to trackers, wait for graceful close
kill timeout 45

# Start the OpenVPN tunnel again if it stops for some reason
respawn
# If it stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60


exec openvpn --cd /opt/ibVPN --config config.ovpn

post-stop script
    # Pause for a few seconds, before exiting
    /bin/sleep 3s
end script

これはすべて、システムがネットワークの準備ができたことを示すのを待つだけで、OpenVPNトンネルを開始します-これにより、伝送が開始されます。システムの電源が切れたとき、または何らかの理由でネットワークがシャットダウンされた場合、Upstartはファイアウォールルールを削除し、伝送デーモンを閉じます。シンプル!これは再起動後も機能し続けるので、これで準備は完了です。

Transmissionと対話するには、セットアップフェーズで行ったようにWeb GUIを使用します。ポート転送を設定することにより、インターネットを介してGUIにアクセスできるようにすることもできます。これを行う方法に関するチュートリアルはたくさんあるので、ここでは繰り返しません。

完了したダウンロードをBeagleBoneから取得するには、NFSを使用しています。 LANを介してBeagleBoneからデスクトップコンピューターに約8 MB/sのコピー速度を得ることができます。これは、このような低電力のデバイスに適しています。 buntuはいくつかの便利な情報を提供します これを設定します。

22
seanlano

SystemDを使用してこれを機能させたので、共有したいと思いました。すべてのスクリプト、構成、および証明書を、/etc/openvpn/myproviderと呼ぶ同じディレクトリに配置しました。

OpenVPNの構成

これは特定のVPNに依存しますが、@ seanlanoの設定との1つの違いは、route-upスクリプトのみを使用することです。したがって、working提供の構成に加えて必要なものは、次の行です。

route-noexec
route-up "/etc/openvpn/myprovider/transmission-route-up.sh"

transmission-route-up.shスクリプトを好きな場所に配置します。 downスクリプトが存在しないことに注意してください。 (VPNは既にカスタムダウンスクリプトを使用していたので、とにかく競合していたでしょう)。

/ etc/openvpn/myprovider/transmission-route-up.sh:

#!/bin/sh

# Print environment variables for transmission's benefit
printenv > /etc/openvpn/myprovider/vpn.env


# Set up VPN routes
ip route add default via $route_vpn_gateway dev $dev table 10

ip rule add from $ifconfig_local/32 table 10
ip rule add to $route_vpn_gateway/32 table 10

ip route flush cache


# Add firewall rules
iptables -A INPUT -i $dev -p udp --dport 24328 -j ACCEPT
iptables -A INPUT -i $dev -p tcp --dport 24328 -j ACCEPT

iptables -A OUTPUT -o $dev -p udp --sport 24328 -j ACCEPT
iptables -A OUTPUT -o $dev -p tcp --sport 24328 -j ACCEPT

最初の行、printenvは重要です。好きな場所に置いて、後でSystemDサービスで使用します。 VPN設定と同じディレクトリに配置します。

24328を置換伝送デーモンがリッスンするポートを指定します。私はiptables(Debianを使用)を使用しているので、おそらくこれらの行を@seanlanoの設定のufw行で置き換えることができます。

SystemD VPNサービス

これは、VPNを自動で開始するサービスです。マシン上でopenvpnへのパスが正しいこと、および構成ファイルへのパスも正しいことを確認します。 SystemDサービスでfullパスを指定する必要がありますmust

/ etc/systemd/system/my-vpn.service:

[Unit]
Description=VPN connection
After=network.target

[Service]
Type=forking
PIDFile=/var/run/openvpn/vpn.pid
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/myprovider --config /etc/openvpn/myprovider/myconfig.ovpn --daemon --writepid /var/run/openvpn/vpn.pid

[Install]
WantedBy=multi-user.target

以下を使用してVPNサービスを有効にします。

systemctl enable my-vpn.service

そしてそれをテストします:

systemctl start my-vpn.service
systemctl status my-vpn.service

それが開始/実行されている場合、あなたは良いです。

SystemD transmission-daemon.service

このスクリプトにはvpn-serviceが必要なので、vpnがダウンすると、transmission-daemonもダウンします。これは、vpnが再起動され、新しいIPアドレスを取得する場合に便利です。これは、送信を再起動して再バインドする必要があり、自動的に処理される必要があるためです。前にroute-upスクリプトで出力した環境変数を使用していることに注意してください。

/ etc/systemd/system/transmission-daemon.service:

[Unit]
Description=Transmission BitTorrent Daemon Under VPN
After=network.target my-vpn.service
Requires=my-vpn.service

[Service]
User=debian-transmission
Type=notify
EnvironmentFile=/etc/openvpn/vpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $ifconfig_local --rpc-bind-address 0.0.0.0 --no-portmap
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

有効にする

systemctl enable transmission-daemon.service

そしてそれを開始

systemctl start transmission-daemon.service

再起動すると、すべて自動的に開始されます(順番に!)。 vpnサービスでType=simpleを使用すると、スクリプトの順序のタイミングに問題が発生するため、代わりにforkingを使用することをお勧めします。

もっと制限したい場合は、rpc-bind-addressに実際のIPアドレスを指定できます(これはWeb GUIリスニングアドレスであり、VPN-IPではありません)。また、Niceで送信を実行する場合は、ExecStart行を変更して、/usr/bin/Nice -n15を先頭に追加するだけです。

アドレス変更の処理

時間の経過とともに私が気付いたことの1つは、何らかの理由でvpn接続が新しいIPアドレスを取得した場合、送信は依然として古いアドレスにバインドされ、動作を停止することです。そして、単にsystemctl restart transmission-daemon.serviceを実行してもカットされません。完全に停止してから、新たに開始する必要があります。

理由はわかりませんが、そのため、次の行をrootcrontab(Sudo crontab -e)に追加しました。

# m h  dom mon dow   command
0 6 * * * /bin/systemctl stop my-vpn.service; /bin/systemctl start my-vpn.service
1 6 * * * /bin/systemctl stop transmission-daemon.service; /bin/systemctl start transmission-daemon.service
7

伝送がUPnP/NAT-PMPのVPNを通過しないことに言及していることに気付きました。これにも気づき、UPnPのbind-address-ipv4設定を尊重するようにTransmissionのパッチを作成しました。 NAT-PMPは、デフォルトゲートウェイを決定する必要があるため、実装が少し難しくなります。 UPnPは、最近使用されている主なものですが、おそらく十分でしょう。これをtrac.transmissionbtサイトのバグとして記録し、パッチを提供しました。うまくいけば、将来のリリースに組み込まれるでしょう。 https://trac.transmissionbt.com/ticket/599

再コンパイルしたくない場合の別のオプションは、miniupnpcパッケージから手動でupnpcを実行することです。例えば。

Sudo apt-get install miniupnpc
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 TCP
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 UDP

10.10.10.51はVPN IP、51515は要求されたTCP/UDPポートです。

フォワーディングがどれくらいの期間有効かはわかりません。また、切断時にポートを削除するために「-d」オプションを使用することもできます。そうしないと、VPNに再ログインしても同じポートを再度取得できないことがわかりました。

乾杯

2
falk0069