金曜日の朝、顧客は、ログイン/パスワードによる認証、IPバインディング、およびユーザーが接続しているのと同じIPからの要求の送信により、最大100人のユーザーのためにソックスサーバーを上げることを要求しました。 同時に、顧客は作業のタイミングについて質問し、インストール/セットアップ時間を予測するのは好きではありませんが、アルファ版は3〜4時間で準備できると確信しました。 さて、真実は、Googleが適切なソックスサーバーを選択し、インストールし、マナを読んで、デフォルトの設定を自分で調整することで... 4時間かかるでしょう。
OS FreeBSD 9.2。ただし、以下で説明するすべては10-kiに当てはまります。
奇妙なことに、 3proxy 0.6.1とDante (ポート1.3.2)の2つの一致するsocks-serverリクエストしかありませんでした。 もちろん、私は何かを見逃したかもしれませんが、認証がないか、int_ip-> ext_ipモードがありません。 おそらくsquidはこれらの要求に対応していますが、単純なタスクのためにこのモンスターを入れたくありませんでした。
私は3proxyに対して何もしていません、私はポートマッピングモードで何年も取り組んでいますが、特に不満はありませんが、2009年から開発を続けています。
だから、ダンテ。
バージョン1.3より前では、int_ip-> ext_ip Danteのサポートはありませんでした。または、非常に非民主的な価格であるEUR400の有償版に同様の実装がありましたが、Lysenko Konstantinはこの機能をDante 1.2.2の「同じ」パッチとして追加し、含まれていましたリリース1.3.0へ。
この構造が1.3.0で機能したかどうかを述べるふりはできませんが、1.3.2では、リクエストは構成内で見つかった最初の外部IPを永続的に残します。 無駄のない男をシャベルで掘った後、私は開発者のページに目を向けました。 そこにはもう少し情報がありますが、必要なものと同じものを起動するのは失敗しました。 ただし、2013年11月以降、 サイトにはバージョン1.4があり、何らかの理由でポートに含まれていません。 ダウンロード、収集。
1.4の設定は見た目が変更されていることに注意する必要がありますが、マンには以前のバージョンのパラメーターの例がまだありますが、Danteは非推奨であり、正しいパラメーターを要求する場合があります。
テスト構成:
/usr/local/etc/sockd.conf
# cat /usr/local/etc/sockd.conf logoutput: /var/log/socks/socks.log debug: 0 internal: 11.12.13.1 port = 1080 internal: 11.12.13.2 port = 1080 internal: 11.12.13.3 port = 1080 external: 11.12.13.1 external: 11.12.13.2 external: 11.12.13.3 external.rotation: same-same socksmethod: username user.privileged: root user.unprivileged: nobody user.libwrap: nobody compatibility: sameport client pass { from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0 } client block { from: 0.0.0.0/0 to: 127.0.0.0/8 log: connect error } client block { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect error } socks pass { from: 21.22.23.0/24 to: 0.0.0.0/0 log: connect error user: chaturanga } socks block { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect error }
そして... 1.4の期待に反して、同じものも機能しませんでした。 今回は、1.3とは異なり、次のようなエラー
warning: getoutaddr(): using external.rotation = same-same, local address 21.22.23.48 was selected for forwarding from our local client 21.22.23.48.45980 to target 77.72.80.15.80, but that local address is not set on our external interface(s). Configuration error in /usr/local/etc/sockd.conf?
ここで、21.22.23.48はローカルマシンのアドレスですが、ここではクライアントが接続しているサーバーの内部IPである必要があります。 「/usr/local/etc/sockd.confの構成エラー?」というフレーズに混乱しています。構成をむち打ちしてマナを調べていますが、情報が十分にないため、最高の人-ソースに登ります。 の形でコメントを笑顔
/* * Just return the first address of the appropriate type from our internal * list and hope the best. */
問題の原因を見つけます(./sockd/sockd_request.c、行4173):
/ *
*クライアントにバインドするアドレスを検索します。 最初にipaddress。
* /
if(getoutaddr(&io-> dst.laddr、
&io-> src.raddr、
req.command、
標的
emsg、
emsglen)== NULL)
return -1;
変更&io-> src。 r addr on &io-> src。 l addr 、再構築、実行、そして最終的に目的のものを見る:
info: pass(1): tcp/connect [: username%chaturanga@21.22.23.48.46050 11.12.13.3.1080 -> 11.12.13.3.27819 77.72.80.15.80
静かに誓って、開発者にバグレポートを作成します。
その結果、3〜4時間の読書、設定の検討、刑務所ではなくDanteの実行、FreeBSDの代わりにCentosでのテスト、ソースコードの掘り出しの代わりに、私は数日を殺しました...その後約束します...
UPD1 :メモを書いている間、開発者は次のように答えました。
こんにちは、バグレポートをありがとう。 あなたは正しい、あります
ここでエラー。 提案されたソリューションは基本的に正しいですが、
おそらく、修正は少し異なる方法で実装します。
UPD2 :さらに対応する過程で:
現在のワークロードにもよりますが、私が提供できるとは思えません
少なくとも1か月間は公式パッチをお届けします。
まあ、ありがとう。
UPD3(2014-09-03) :
開発者は、バグが修正されたと報告しました(v.1.4.1)。
チェックすると、すべてが期待どおりに機能します。