web-dev-qa-db-ja.com

すべてのトラフィックをsocks5プロキシポートに転送します

私はこの答えに従いました: すべての非ローカルトラフィックをsocksプロキシにリダイレクトします

root@xxx:~# cat /proc/sys/net/ipv4/ip_forward
1

root@xxx:~# netstat -tapln | grep :4545 | grep LISTEN
tcp        0      0 127.0.0.1:4545          0.0.0.0:*

Curlを介してsocks5を接続すると、ポートは正常に機能します。

root@xxx:~# curl -x socks5h://127.0.0.1:4545 ifconfig.co
1.2.3.4

Enable iptablesルールを実行すると、コンピューターのIPが表示されます。

iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 4545

root@xxx:~# curl ifconfig.co
9.8.7.6

ただし、4545番目のポートはsocks5プロキシです。うまくいくはずです。

何が悪いのか分かりませんでした。

FoxyProxyを使ってみました。それはうまくいきます。しかし、socks5proxyを介してすべてのトラフィックをリダイレクトしたいと思います。どうすればいいですか?

追伸:iptablesにDROP/REJECTルールがありません。私はこれら3つのルールしか持っていません。

1
user337738

まず、SOCKSプロキシは、ある種の透過モードでも機能する必要があります(つまり、SOCKSプロトコルを使用してリクエストを受信することはありませんが、とにかく サイドバンド情報 を使用して処理する必要があります。 iptables'REDIRECTアクションから)。 あなたがリンクしたQ/A は同じことを伝えます:

これらのルールを使用すると、要求はすべてを機能させるために適切に構成された「何か」が存在するポートに到着します。

したがって、このソリューションがあなたが求めている以上のことをすることを期待しないでください:すべてをSOCKSプロキシにリダイレクトします。

不足しているのは、iptablesREDIRECT を実行しているホストからテストを実行していることです。つまり、ローカル発信トラフィックのルーターではないため、PREROUTINGチェーンが呼び出されることはありません。

代わりに(またはさらに)使用する必要があるのはnat/OUTPUT chain(ただし、後で説明する追加の問題を参照してください):

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 4545

これを単独で試した場合、ループが発生します。SOCKSプロキシ(実際に透過的に機能できると仮定します。上記を参照)はそれ自体にリダイレクトされ、何も出力されなくなります。これを回避する最も簡単な方法は、専用のユーザーまたはグループでプロキシを実行して例外を作成することです。プロキシがユーザーとして実行されていると仮定しましょう... proxy、代わりに上記をこれに置き換えます:

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy -j REDIRECT --to-ports 4545

または、たとえば、この例外も追加することで、ルートユーザーをリダイレクトしないように選択することもできますbefore(したがって-I here)前の行:

iptables -t nat -I OUTPUT -p tcp -m owner --uid-owner root -j RETURN

最後の注意:REDIRECTは廃止され、 TPROXY になりましたが、 使用は少し注意が必要です それでも(異なる)が必要です透過プロキシからのサポート。

1
A.B