すべてのネットワークトラフィックをSSHでトンネルするにはどうすればよいですか?


117

安全でない場所(公共のwifiなど)からインターネットを使用しているときは常に、sshトンネル(ssh -D port host)を使用して、トラフィックが傍受されないようにします。残念ながら、プロキシを指定する方法を提供しないアプリケーションが多数あるようです(Flashは主要な例の1つです)。

私のコンピューターからのすべてのネットワークトラフィックにトンネルを使用する何らかの方法があるべきだと感じていますが、これを行う方法については完全に無知です。どんな助けも大歓迎です。


16
もちろん、文字通りすべてのトラフィックをsshでトンネリングすることはできません。これは、ssh自体をトンネリングすることを意味するためです。:)
CarlF

1
これは良い考えですが、コンピューターとsshエンドポイントの間でのみ保護されます。その後、トラフィックは(SSLなどの別の方法で保護されていない限り)クリアになります。確かに、ワイヤを介する可能性がはるかに高くなりますが、それでも...制御できないワイヤを本当に信頼することはできません。
いんちきのキホーテ2009年

6
しかし、インターネットに出ているときは、数十億のパケットの1つにすぎないという安全性がありますよね?あなたが公共のWi-Fiに接続すると、あなたは多分3つの接続の一つであり、あなたは、個人などを識別することができます
endolith

回答:


62

あなたがしたいことをするために、私はsshuttleをお勧めします

次のように使用します。

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

すべてのTCPトラフィックを自動的にトンネリングします。--dns引数を追加して、DNSトラフィックもトンネルさせることができます。リモートサーバーにインストールする必要があるのはPythonのみです。

特定のプログラムのみをトンネリングする場合は、proxychainsをお勧めします

インストールしたら、次のようにssh socksプロキシを起動します。

ssh -fND 127.0.0.1:<local port> username@sshserver

これにより、<ローカルポート>でリッスンする「SOCKS」プロキシが開始されます。

次に、/ etc / proxychains.confを編集して、<ローカルポート>と同じポートをポイントします。

最後に、次のようにプロキシ化するプログラムを起動します。

proxychains <program name>

うまくいくはずです。ただし、いくつかのプログラムではプロキシチェーンの操作に問題があります。また、Firefoxでは、about:configの下の追加項目を変更して、プロキシをバイパスする代わりにプロキシを介してDNSルックアップを強制する必要があることにも留意してください。

追加のメモとして、Webブラウザーについて。ソックスプロキシをサポートしている場合、上記のsshトンネルを使用するために追加の作業を行う必要はありません。SOCKSプロキシサーバーには127.0.0.1を、プロキシポートには<local port>を入力します。

編集3/29/16

この投稿にはまだいくつかの賛成票があるので、私はそれを更新すると思いました。Proxychainsは、まだほとんどのLinuxリポジトリにあり、Linuxでも動作します。ただし、プロジェクトは事実上放棄されており、OSXでは機能しません。LinuxまたはOSXのいずれについても、引き続きメンテナンスされているフォークにアップグレードすることを強くお勧めします:proxychains-ng:https : //github.com/rofl0r/proxychains-ng

LinuxとOSXの両方で動作することに加えて、コンパイルが簡単で、DNSトンネリングのサポートがはるかに優れています。

また、レッドソックという別のオプションについても言及する必要があります。proxychains(-ng)と同様に機能し、distリポジトリでも使用される可能性が高い:https : //github.com/darkk/redsocks


sshuttleを使用する新しいLinuxシステムに関する注意:執筆時点では、破損したパイプを与えるカーネルバグがあります。その場合には、使用:sshuttle -r root@host -x host 0/0
aggregate116​​6877

49

man sshまさにこれの例を示します。sshベースのvpn:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

~~ 切り取り ~~

     Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs.  More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

新しいインターフェイスを作成したら、それをデフォルトルートにするだけで済みますが、これは別の質問です。


1
もう少し説明してもらえますか?ifconfigコマンドは、tun0という名前の新しいインターフェイスを作成しますか?または、tun0はsshによって作成され、ifconfigによってさらに構成されますか?質問に関連する例を追加することはできますか?
誰も

6

sshで「トンネル」オプションを探します。これにより、IPアドレスを割り当てることができるトンネルデバイスが作成され、そのトンネルを使用するようにデフォルトルートを変更します。



0

SSHベースの仮想プライベートネットワークsshには、tun(4)ネットワーク擬似デバイスを使用した仮想プライベートネットワーク(VPN)トンネリングのサポートが含まれており、2つのネットワークを安全に結合できます。sshd_config(5)設定オプションPermitTunnelは、サーバーがこれをサポートするかどうか、およびどのレベル(レイヤー2または3トラフィック)で制御するかを制御します。

 The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option.  The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs.  More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).

1
情報のソースを追加してください。注:これは古い質問です。
ロレンツォフォンマッターホルン

-2

(ssh -D port host)は、トラフィックを傍受しない100%安全な方法ではないことを明確にしたかっただけです。(ssh -D -c blowfish port host)を追加することは、少なくともセッションに暗号化を追加するため、より良い選択です。追加できるオプションは他にもありますが、端末またはGoogleで「man ssh」と入力するだけで完全なリストが表示されます。

私があなたが探していると思うオプションは、VPN(仮想プライベートネットワーク)を設定することです

独自のVPNのセットアップに取り組む前に、この記事を参照して、2つの違い(SSHとVPN)または適切な要約バージョンの違いを理解してください。VPNルートに行くことにした場合は、OpenVPNをお勧めします。OpenVPNは、無料で多くのドキュメントとサポートを提供しています。


6
悪いアドバイス。「blowfish」はSSH-1暗号です。それは高速で、安全だと考えられています(1999年現在:unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1)、それでも。たぶんssh -2 -C -D [...](SSH2を強制し、圧縮を使用して)をドロップし-cます。私のシステムによると、man sshSSH2の暗号リストはデフォルトでになっていaes128-cbc,3des-cbc,blowfish-cbc,[etc]ます。私のポイントは、あなたがリクエストした-c blowfish場合、SSH2よりも安全性がはるかに低いSSH1になる可能性があるということです。
いんちきのキホーテ2009年

2
確かに、ジェレミーは、接続が-D 8080だけで安全であるという印象を受けていたので、彼が使用しているものよりも優れていると述べました。あなたは有効なポイントを作ります、そして、それは私がより多くのオプションのためにマニュアルに言及する理由です。
ricbax

そうでない場合は役立つので、答えを変更する必要があるかもしれません。
エンドリス

私がこれを尋ねたのを忘れて、このサイトを定期的に使用しないでください。説明をありがとう...私は、SSHがデフォルトで安全であるという強い印象を持っていました。
ジェレミー銀行

9
WTFはデフォルトで暗号化を使用してSSHではありませんか?
LatinSuD

-3

これらの例を使用してください:

  • リモートホストからローカルホストの8888にポート80を転送する

    ssh -fnN -L8888:localhost:80 user @ server

    これを使用して、リモートホスト上のサービスのみにアクセスします。

  • ローカルホストからリモートホストの8888にポート80を転送する

    ssh -fnN -R8888:localhost:80 user @ server

    これを使用して、ユーザーがWebサーバーなどのサービスにアクセスできるようにします。

乾杯!:)


良いコメントですが、ここで話していることとはまったく関係ありません。リバースsshを使用すると、サーバーはクライアントがトラフィックの1ポートをルーティングするように要求できます。そのトラフィックをインターネットにルーティングするには、さらに構成が必要になります。また、各ポートにSSHトンネルを設定する必要があります。そして、クライアントからではなく、サーバーから開始する必要があります-必要がない限り、なぜこれを行うのでしょうか?
ビーチハウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.