私はこの答えに従いました: すべての非ローカルトラフィックを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つのルールしか持っていません。
まず、SOCKSプロキシは、ある種の透過モードでも機能する必要があります(つまり、SOCKSプロトコルを使用してリクエストを受信することはありませんが、とにかく サイドバンド情報 を使用して処理する必要があります。 iptables
'REDIRECT
アクションから)。 あなたがリンクしたQ/A は同じことを伝えます:
これらのルールを使用すると、要求はすべてを機能させるために適切に構成された「何か」が存在するポートに到着します。
したがって、このソリューションがあなたが求めている以上のことをすることを期待しないでください:すべてをSOCKSプロキシにリダイレクトします。
不足しているのは、iptables
REDIRECT
を実行しているホストからテストを実行していることです。つまり、ローカル発信トラフィックのルーターではないため、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
になりましたが、 使用は少し注意が必要です それでも(異なる)が必要です透過プロキシからのサポート。