OpenVPN経由の伝送デーモン


20

私は最近、この方法を使用して 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を経由しない)

3
自己回答は悪くありません。彼らに謝るな。また、それが
-RobotHumans

@hbdgafと合意しました。謝る必要はありません。すべての面で素晴らしい仕事。
JakeGould

回答:


23

注: (2016-02-22)この構成では、VPN経由で送信するのではなく、通常のWAN経由でトレントトラッカーにDNSクエリがリークすることに気付きました。これを修正する方法を調査しています。ただし、接続自体は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を正しく通過しますが、UPnPポートフォワーディングが有効になっている場合、伝送はローカルルーターからのポート転送を要求します、VPNサーバーからのVPN経由ではありません。そのため、Upstartスクリプトはポート転送を無効にしました。これは、動作しているように見えるかもしれませんが、動作していないためです。iptablesとiprouteを使用して、debian-transmissionユーザーからのすべてのトラフィックをVPNに強制することができるはずですが、私はまだこれを調査しています。デフォルトのルートがすべてのインターネットデータをVPN経由で送信するように変更された場合も機能するはずですが、このサーバーを他の目的にも使用しているため、これはしたくありません。 VPN。あなたが本当にVPN上でUPnPを動作させたいなら、この質問にはさらなる情報があります 更新: 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 て入力 :wq して保存し、終了します。もちろん、vimを使用する必要はありません-任意のテキストエディターが動作します。

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

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

  • auth-user-pass pass名前のファイルを探すために、OpenVPNのを伝えますpassから、ユーザーとパスワードを読み取ること。

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

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

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

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

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

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

  • route-upそしてdown実行されるスクリプトが起動し、必要に応じて伝送-デーモンを停止する-彼らは右のIPアドレスとポートに正しくバインド伝送に必要とされている接続についての情報を含む環境変数を使用して実行されるため、これらはここで必要とされています。

私の場合、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番目の行はパスワードでなければなりません。これがこのファイルの唯一のコンテンツでなければなりません。

you@address.com
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

デフォルトでは、ブート時にTransmissionが自動的に実行されます。最終的に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

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

sudo vim /opt/ibVPN/down.sh

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

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

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

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

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 /秒のコピー速度を得ることができます。これは、このような低電力デバイスにはかなり適しています。Ubuntuは、これを設定するための便利な情報提供します。


うわー!これらすべてを探すのにどれくらいの時間を費やしましたか?
イスマエルミゲル

ハハ、かなり長い間。以前はDD-WRTルーターで一度やったことがありますが、BeagleBoneでもう一度やっていたら、これを書きたいと思ったので、その方法を忘れないでください。:D
seanlano

1
また、これを読む必要があります:unix.stackexchange.com/questions/88693/…(それは素晴らしい答えです。)これはあなたを助けるでしょう、私はそれを確信しています。
イスマエルミゲル

3
DNSサーバーでOpenDNSを使用するように設定し、統計を調べたところ、この構成では通常のWAN接続を介してDNSがリークすることがわかりました。これを修正できるかどうかをさらに調査します。接続自体はVPN経由なので、とにかく実行し続けますが、理想的ではありません。
seanlano

1
@seanlanoこれに注意を払ってくれてありがとう。修正が見つかった場合/いつお知らせください。
Winterflags

7

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

OpenVPNの構成

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

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へのパスが正しいこと、および構成ファイルへのパスも正しいことを確認します。あなたはしなければならない指定し、フルシステムDサービスのパスを。

/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

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

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

アドレス変更の処理

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

理由はわかりませんが、そのため、次の行をルート crontab(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

興味のないことですが、これもBeagleBoneで実行されていますか?ある場合、伝送にパフォーマンスの問題がありますか?また、素晴らしい記事。:)
seanlano

いや 通常のデスクトップマシンで実行されており、問題はありません。
ジョナスカルダースタム

けっこうだ。Intelマシンでうまく動作します。ARMプロセッサを搭載した安価なトレントボックスを作成できることを望んでいましたが、そうではないようです。
seanlano

rtorrentをチェックしてください。非常にパフォーマンスが良い
ジョナスカルダースタム

ありがとう、そうするわ。他の機能はARMボックスで正常に動作するため、rtorrentが適切に機能する可能性があります。
seanlano

3

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

再コンパイルしたくない場合の別のオプションは、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に再ログインしても同じポートを再び取得できないことがわかりました。

乾杯


私はこのような解決策を見つけるために何年も費やしました、私は見つけたと思いますminiupnpc!そして、うまくいけば、パッチがマージされ、この問題は永久に修正されるでしょう。それまでの間、私は間違いなくあなたの便利なヒントを使用しようとしています。
seanlano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.