iptables: TCP 接続を SSH トンネルにリダイレクトする

iptables: TCP 接続を SSH トンネルにリダイレクトする

私はこれを「ProxyDroid」や「SSHTunnel」のような多くのAndroidベースのプロジェクトで使用しているのを見てきました。

プロキシまたは SSH トンネルへの接続を確立すると、iptables を使用して、作成したトンネルを介してすべての TCP 要求がリダイレクトされます。

これは「-I OUTPUT -p tcp --destination-not xxx.xxx.xx.xx --redirect-to xx.xxx.xx.xx:port」のようなものになるはずですが、これに関する例が見つからず、nat に挿入する必要があるのか​​、それとも他の何かに挿入する必要があるのか​​わかりません。また、たとえば着信接続用にもう 1 つなど、ルールを 1 つ以上用意する必要があるのか​​どうかもわかりません。

編集:

トンネルを直接使用することはできないようです。または、エージェントを使用せずにそれを実行する方法がわかりません。これを機能させるには、ローカル サーバーとして機能する redsocks というプログラムをインストールする必要がありました。

ここで使用される iptables コマンドは次のとおりです。

# do not redirect connection sent to localhost so redirected connections can reach
# its destination, otherwise we'll stuck in a loop.
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
# Redirect all tcp connections except ones that are going to my tunnel server 
# to the local redsocks port
iptables -t nat -A OUTPUT -p tcp ! -d tunnel.ip.goes.here -j REDIRECT --to-ports 31338

RedSocks リポジトリ:https://github.com/darkk/redsocks


今はすべてうまく動作していますが、これを redsocks なしで (トンネルに直接接続して) 実現できるかどうかをまだ知る必要があります。

答え1

SSH 経由で貧乏人の VPN を設定するつもりですか? もしそうなら、これに関する Ubuntu ドキュメントがいくつかあります:

https://help.ubuntu.com/community/SSH_VPN

基本的には、「-w」オプションを使用して新しい tun0 インターフェイスを設定し、それを介してルーティングを開始します。 iptablesは関係ありませんが、ルートを設定する必要があります。

TCPをTCP上で実行することは、悪いアイデアより良い選択肢としては、OpenVPN のようなシンプルな VPN が考えられますが、これは手っ取り早い SSH トンネルよりも複雑になります。

関連情報