注: (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-noexec
OpenVPNクライアントに、サーバーが提供するルートを自動的に使用しないように指示します。これにより、VPNを介してすべてのネットワークトラフィックがプルされます。トレントトラフィックを送信するだけなので、異なるルーティング設定を使用する必要があります。
lport 1195
OpenVPNクライアントに1194の代わりにポート1195を使用するように指示します-私の場合、同じデバイスでOpenVPNサーバーを実行したいので、サーバーはポート1194を使用する必要があります。OpenVPNサーバーを実行していない場合でも、この変更を行っても害はありません。
行dev tap
をに変更し、dev tap1
OpenVPNサーバーが実行されているため、仮想デバイスが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は、これを設定するための便利な情報を提供します。