安全でない場所(公共のwifiなど)からインターネットを使用しているときはいつでも、自分のトラフィックが盗聴されないようにするためにsshトンネル(ssh -D port Host
)を使用するのが好きです。残念ながら、プロキシを指定する方法を提供していないアプリケーションがたくさんあるようです(Flashはその一例です)。
私のコンピュータからのすべてのネットワークトラフィックにトンネルを使用する方法があるように思われるかもしれませんが、私はこれを行う方法を完全に知らないのです。任意の助けは大歓迎です。
あなたが望んでいることをするために、私は 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
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).
新しいインターフェースを起動したら、それをデフォルトルートにするだけでいいのですが、これは別の質問です。
Sshで "Tunnel"オプションを探してください。これにより、IPアドレスを割り当てることができるトンネルデバイスが作成され、そのトンネルを使用するようにデフォルトルートが変更されます。
私はあなたがすべてのTCPそして必要に応じてシステム全体でSOCKS5プロキシを通してUDPを転送することを可能にするソフトウェアを開発しました。
http://code.google.com/p/badvpn/wiki/tun2socks
LAN上のコンピュータからのすべての接続を転送するためにルーターにインストールすることもできます。
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).