linux – SSHを使ってネットワークトラフィックをすべてトンネリングするにはどうすればいいですか?

linux proxy socks ssh tunnel

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

私のコンピュータからのすべてのネットワークトラフィックのためのトンネルを使用する方法があるはずのように感じますが、これを行う方法については全くの無知です。何か助けがあれば、大いに感謝します

  128  Jeremy  2009-10-29


ベストアンサー

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

こんな風に使うんですね

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

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

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

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

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

これにより、<local port>でリスニングしている “SOCKS “プロキシが起動します

そして、/etc/proxychains.confを編集して、<local port>と同じポートを指すようにします

最後に、プロキシ化したいプログラムを起動します

proxychains <program name>

これで動くはずです。しかし、いくつかのプログラムはプロキシチェーンを使った動作に問題があるでしょう。また、Firefox では、プロキシをバイパスするのではなくプロキシを通して DNS 検索を行うように強制するために about:config の下に追加の項目を変更しなければならないことにも注意してください

追加のメモとして、Web ブラウザ上で。SOCKS プロキシサーバには 127.0.0.1、プロキシポートには <local port> と入力するだけです

EDIT 3/29/16

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

Linux と OSX の両方で動作することに加えて、コンパイルが簡単で、DNS トンネリングのサポートも充実しています

もう一つのオプションとして、redsocks を挙げておきます。これは proxychains(-ng) と同様に動作し、あなたの dist レポにもあるでしょう。https://github.com/darkk/redsocks

EDIT 11/27/19 もしproxychainsルートを使う場合は、proxychains-ngを使ってください。レガシーバージョンよりも深刻なバグ修正がされています。https://github.com/rofl0r/proxychains-ng/issues/292

70  shellster  2014-05-23


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

新しいインターフェイスを立ち上げたら、それをデフォルトルートにすればいいだけの話で、それはまた別の問題です

53  Pricey  2011-07-18


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

6  Peter Eisentraut  2009-11-01


SOCKS5のプロキシを使って、すべてのTCPとオプションでUDPをシステム全体で転送できるソフトウェアを開発しました

Google Code Archive - Long-term storage for Google Code Project Hosting.

ルーターに設置して、LAN上のコンピュータからの接続をすべて転送することもできます

4  Ambroz Bizjak  2011-07-18


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  Kristian Hermansen  2013-03-12


(ssh -D ポートホスト) はトラフィックを盗聴されないようにするための 100% 安全な方法ではないということをはっきりさせておきたいだけです。(ssh -D -c blowfish port host) を追加することで、少なくともセッションに暗号化を追加することができるので、より良い選択となるでしょう。追加できるオプションは他にもありますが、ターミナルで “man ssh” と入力するだけで十分簡単です

お探しのオプションは、VPN(仮想プライベートネットワーク)の設定だと思います

この記事を見て、この2つの違いを理解するか (SSH vs. VPN)、または要約版 を見て、自分のVPNの設定に取り組む前に理解を深めてください。もしあなたがVPNルートを選ぶのであれば、OpenVPNをお勧めします

-2  ricbax  2009-10-29


これらの例を参考にしてください

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

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

    これを使用して、そこでしか利用できないリモートホスト上のサービスにアクセスします

  • リモートホストの80番ポートをあなたのローカルホストから8888に転送します

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

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

Cheers! 🙂

-3  kolypto  2009-11-01


タイトルとURLをコピーしました