伝送トラフィックがVPNを使用するようにするにはどうすればよいですか?


31

実行するサーバーがVPNに接続されている場合にのみ、送信がトラフィックを送受信するようにします。

私は似ている、この質問を見つけましたが、私はVPNを介してすべてのトラフィックを強制したくないと私は、コマンドラインからFirestarterを使用する方法について良いガイドを見つけることができませんでした。

代わりにufwを使用することを考えていましたが、ファイアウォールの経験がほとんどないため、コミュニティが助けてくれることを期待しています。

私が持っていたアイデアの1つは、33442などの特定のポートを使用するように送信を強制し、VPNサーバーのIPアドレスからそのポートへのトラフィックのみを許可することでした。Ubuntuサーバーガイドを確認し、次のようなことができると思います。

sudo ufw enable
sudo ufw deny port tcp from localhost to any port 33442
sudo ufa allow port tcp from localhost to VPNIP port 33442
sudo ufw deny port udp from localhost to any port 33442
sudo ufa allow port udp from localhost to VPNIP port 33442

この論理はその塩を保持していますか?どうしますか?VPNIP、VPNサーバーのパブリックIPに何を使用しますか、またはVPNが接続するローカルサブネット範囲を指定する必要がありますか?

ご協力いただきありがとうございます!

回答:


25

vpnrouteグループを作成:

sudo groupadd vpnroute

インターフェイスを通過しないグループのiptablesメンバーによって行われた発信ネットワーク接続を拒否するルールを追加vpnroutetun0ます。

sudo iptables -A OUTPUT -m owner --gid-owner vpnroute \! -o tun0 -j REJECT

vpnrouteグループのメンバーとして送信プロセスを開始します。

sudo -g vpnroute transmission-gtk &

1
これはまさに私が探していたものです。ありがとう!
テーラム

3
警告:Delugeはsupプロセスから生成されるため、これはDeluge、AFAICTでは機能しません。慎重にテストしましたが、セットアップは正しいです。tun0でVPNを有効にするまで、sudo -g vpnroute ping google.comに「Destination unreachable」と表示されます。しかし、デリュージUIは、VPNが接続されているかどうかに関係なく、常にトレントをダウンロードできます。pgrep -G vpnrouteを使用すると、最初の/ usr / bin / pythonプロセスのみがvpnroute GIDの下で実行されるため、生成されたdeluge-gtkプロセスは実行されないようです。
happyskeptic 14年

10
誰かがこれらの各ステップが何をするのかを正確に説明できますか?
ohnoplus

2
送信には、特定のアドレスをリッスンする機能がありますが、特定のインターフェイスはリッスンできません。コマンドラインから起動すると、--bind-address-ipv4 $IP_ADDRTransmissionにバインドするアドレスを通知します。これには、トラフィックが適切な場所に到達するように適切なルーティングルールが必要です。どうやってそれを成し遂げたかについてこの質問てください。
seanlano

3
@ohnoplus「vpnroute」というグループを作成します。VPNを通過しないグループのメンバーによって行われた発信ネットワーク接続を拒否するファイアウォールルールを追加します(ここではインターフェイス "tun0"として定義されていますが、システムが異なる場合があります)。「vpnroute」グループのメンバーとして実行されている伝送プロセスを開始します。
トミーピーナッツ

4

これは、ヘッドレス伝送で機能し10.0.0.0/8ます。伝送サービスを実行しているユーザーに基づいてトラフィックを制限しています 。内部ネットワークはネットワークに合わせて変更する必要tun0があります。OpenVPNインターフェースeth0はLAN接続です。

sudoルートでない場合は、コマンドに追加します。

iptables -F (-Fスイッチを使用して既存のすべてのルールをフラッシュし、新しいルールを追加するためのクリーンな状態から開始します。)

iptables -L (現在のセットアップをリストする)

NET=10.0.0.0/8
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT

再起動後にiptablesを永続化する

apt-get install iptables-persistent
service iptables-persistent start

これは私に次を与えます:$ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m owner --gid-owner debian-transmission -o eth0 -j ACCEPT iptables v1.4.12:owner : "--gid-owner"オプションの不正な値: "debian-transmission"何かが足りませんか?
ohnoplus

はい、@ ohnoplus :)最初にグループ(または所有者)debian-transmissionを作成する必要があります。そして、このグループまたはユーザー:グループとしてアプリケーションを実行していることを確認してください。
ヨアヒム

これは、Transmission Remote Webインターフェイスを有効にするために必要なものでした。
ゼーンフーパー

4

これは、debian-transmissionユーザーグループ(つまり、送信)がvpnを介してのみデータをルーティングするようにするための、NOOBS(debianを使用)の完全な 'HOW TO'です。

複雑なシステムスクリプトに基づくvpnには、より長い「方法」を使用しないでください...! iptablesは最高の(そして確実な)方法です!!! -送信ユーザーとグループに基づいてvpnを制御するためのいくつかのIPTABLEルールを使用し(systemdスクリプト、upスクリプト、downスクリプトなどを使用するより複雑な「ハック」メソッドとは異なります)

ステップ1-セットアップ:(伝送がインストールされているため、debian-transmissionユーザーが存在すると仮定します!)

sudo apt-get install iptables
sudo apt-get install iptables-persistent

ステップ2-transmission-ip-rulesファイルを作成する

sudo nano transmission-ip-rules

以下のコードブロックにテキストを追加します #!/bin/bash

重要

  • ローカルネットワークが192.168.1.xの形式ではない場合、NET変数を、独自のローカルネットワークアドレス指定形式に対応するように変更します!!。
  • また、192.168.1.0 / 25が実際に192.168.1.0-255の範囲を与えるという癖に注意してください!
  • インターフェースeth0、tun0(vpn)などが異なる場合があります。異なる場合があります。「ifconfig」で確認し、必要に応じて変更します。
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD

ファイルを保存してから実行します

sudo iptables -F 
sudo chmod +x transmission-ip-rules
sudo ./transmission-ip-rules

次に、これらのルールがリブート間で持続することを確認します:

sudo dpkg-reconfigure iptables-persistent

両方のプロンプトで[はい]をタップします。完了!

このスクリプトの素晴らしい点は、デバイスを介してすべてのデータを追跡することです!発行するとき

sudo iptables -L -v

vpnスクリプトが適切に機能していることを確認できるように、どのインターフェイスおよびどの側のINPUTまたはOUTPUTにデータが送信されるかが表示されます。例えば;

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
1749K  661M ACCEPT     all  --  tun0   any     anywhere             anywhere                                                                                            
3416K 3077M ACCEPT     all  --  eth0   any     anywhere             anywhere                                                                                            
 362K  826M ACCEPT     all  --  lo     any     anywhere             anywhere                                                                                            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
    0     0            all  --  any    any     anywhere             anywhere                                                                                            

Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
 1260  778K ACCEPT     tcp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       tcp spt:9091 owner GID match debian-transmission
    0     0 ACCEPT     udp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT     all  --  any    tun0    anywhere             anywhere                                                                                                     owner GID match debian-transmission
 8880  572K ACCEPT     all  --  any    lo      anywhere             anywhere                                                                                                     owner GID match debian-transmission
13132  939K REJECT     all  --  any    any     anywhere             anywhere                                                                                                     owner GID match debian-transmission reject-with icmp-port-unreachable

このスクリプトは、VPNからの接続、切断、再起動で徹底的にテストされています。それは素晴らしく機能します。送信にはVPNのみを使用できます。他のスクリプトに対するこのスクリプトの大きな利点は、ご覧のとおり(iptables -L -v)データは、転送を介してプルされたもので集計されます(各インターフェイスeth0、vpn(tun0)にINPUT(all)およびForward(all)ルールを追加することにより)。それで、あなたは何が起こっているかを正確に知っています!!! データの合計は送信と正確には一致しません-残念ながら、debian-transmissionユーザーまでINPUT側で区別できず、余分なオーバーヘッドとおそらく同じVPNを使用する他のプロセスの両方がありますが、データは大体集計されますINPUT側で、vpnの動作を確認するためにOUTPUTで約半分になります。もう1つ注意すべきことは、VPNの切断(すべてのトラフィックが送信で停止する)に時間がかかり、新しいVPNで「取得」するために送信のために再接続するので、トレントを再び開始するのに約5分かかる場合でも心配しないでください。 。

ヒント-Google「MAN iptables」で、このスクリプトの仕組みを行ごとに知りたい場合は、帯域幅監視に関するこの記事を参照してください...


192.168.1.0/25の範囲は192.168.1.0-127です。
Zachary822

3

理想的には、特定のインターフェース(VPNインターフェース)にバインドする機能を持つトレントクライアントを使用する必要があります。

トレントクライアントの中で、デリュージはこれを行います。だから、Delugeをインストールして、Preferencesでインターフェースを設定すれば、設定は完了です!


ご回答有難うございます。実際のところ、私は現在、Transmissionを使用することにかなり慣れていますが、Transmissionを使用して特定のインターフェイスまたはIP範囲にバインドできるかどうかを知っていますか(したがって、VPNのみを使用します)?ありがとう!
エヴァン

2
@ user4124コマンドラインまたはwebuiを使用してDelugedを特定のネットワークインターフェイスにバインドする方法を知っていますか?Transmissionでこれを行う方法を誰も知らないので、私はDelugeを試しましたが、これまでのところ運がありませんでした。ありがとう!
エヴァン

3
@Evanではlisten_interface、delugeコンソールまたはInterface in Networkオプションで、DelugeにバインドするIPアドレスを指定できます 。
キャス

これは事実ですが、違法なトレントダウンロードを隠すことがあなたの唯一の目的であっても、VPNの匿名性を受け入れ、1つのプログラムだけでなくシステム全体のソリューションを探す必要があります。
redanimalwar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.