web-dev-qa-db-ja.com

SSHを介してすべてのネットワークトラフィックをトンネルする方法を教えてください。

安全でない場所(公共のwifiなど)からインターネットを使用しているときはいつでも、自分のトラフィックが盗聴されないようにするためにsshトンネル(ssh -D port Host)を使用するのが好きです。残念ながら、プロキシを指定する方法を提供していないアプリケーションがたくさんあるようです(Flashはその一例です)。

私のコンピュータからのすべてのネットワークトラフィックにトンネルを使用する方法があるように思われるかもしれませんが、私はこれを行う方法を完全に知らないのです。任意の助けは大歓迎です。

113
Jeremy

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

あなたはこのようにそれを使います:

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

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

特定のプログラムだけをトンネリングしたい場合は、 プロキシチェーン をお勧めします。

それがインストールされたら、次のようにあなたのSSH Socksプロキシを起動します。

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

これにより、<local port>で待機している "SOCKS"プロキシが起動します。

次に/etc/proxychains.confを編集して<local port>と同じポートを指定します。

最後にあなたのようにproxy-edしたいプログラムを起動します。

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でも、まだメンテナンスされているforkにアップグレードすることを強くお勧めします。proxychains-ng: https://github.com/rofl0r/proxychains-ng

LinuxとOSXの両方で動作することに加えて、それはコンパイルするのが簡単であり、そしてまたDNSトンネリングのためのずっと良いサポートをしています。

私はまた別の選択肢、レッドソックスについて言及するべきです。これはproxychains(-ng)と同じように動作し、あなたのdistリポジトリにもあるでしょう: https://github.com/darkk/redsocks

57
shellster

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

~~snip~~

     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).

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

48
PriceChild

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

6

私はあなたがすべてのTCPそして必要に応じてシステム全体でSOCKS5プロキシを通してUDPを転送することを可能にするソフトウェアを開発しました。

http://code.google.com/p/badvpn/wiki/tun2socks

LAN上のコンピュータからのすべての接続を転送するためにルーターにインストールすることもできます。

4
Ambroz Bizjak

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).
0