GoProxy は、高性能の http プロキシ、https プロキシ、socks5 プロキシ、ss プロキシ、websocket プロキシ、tcp プロキシ、udp プロキシ、ゲーム シールド、ゲーム プロキシをサポートします。フォワード プロキシ、リバース プロキシ、透過プロキシ、インターネット nat プロキシ、https プロキシをサポートします。ロード バランシング、http プロキシ ロード バランシング、socks5 プロキシ ロード バランシング、ソケット プロキシ ロード バランシング、SS プロキシ ロード バランシング、TCP / UDP ポート マッピング、SSHトランジット、TLS 暗号化送信、プロトコル変換、汚染防止 DNS プロキシ、API 認証、速度制限、接続制限など、NAT またはファイアウォールの背後にあるローカル サーバーをインターネットに公開して、ユーザーや訪問者がアクセスできるようにするリバース プロキシ。直接かつ簡単に。
ProxyAdmin は snail007/goproxy の強力な Web コンソールです。
このページのマニュアルは goproxy の最新バージョンに適用されますが、他のバージョンには適用できない場合がありますので、独自の手順に従ってコマンドを使用してください。
クリックしてテレグラムに参加します
ヒント: すべての操作には root 権限が必要です。
無料版では次のことが実行されます。
bash -c " $( curl -s -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh ) "
商用バージョンでは次のことが行われます。
bash -c " $( curl -s -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto_commercial.sh ) "
インストールが完了しました。設定ディレクトリは /etc/proxy です。インストールが失敗した場合、または使用する vps が linux64 ビットでない場合は、上記のマニュアル ディレクトリを参照してください。システムをインストールするには、以下の半自動手順に従ってください。
ダウンロードアドレス: https://github.com/snail007/goproxy/releases/latest
v7.9 を例に挙げます。最新バージョンをお持ちの場合は、以下のダウンロード リンクのバージョン番号が最新バージョンであることに注意してください。
無料版では次のことが実行されます。
cd /root/proxy/
wget https://github.com/snail007/goproxy/releases/download/v7.9/proxy-linux-amd64.tar.gz
商用バージョンでは次のことが行われます。
cd /root/proxy/
wget https://github.com/snail007/goproxy/releases/download/v7.9/proxy-linux-amd64_commercial.tar.gz
無料版では次のことが実行されます。
cd /root/proxy/
wget https://raw.githubusercontent.com/snail007/goproxy/master/install.sh
chmod +x install.sh
./install.sh
商用バージョンでは次のことが行われます。
cd /root/proxy/
wget https://raw.githubusercontent.com/snail007/goproxy/master/install_commercial.sh
chmod +x install_commercial.sh
./install_commercial.sh
プロキシ更新はミラーを使用してダウンロードします。更新にミラーでエラーがある場合は、環境変数UPDATE_MIRROR=false
設定できます。
Windows: set UPDATE_MIRROR=false
てからproxy update
Linux: export UPDATE_MIRROR=false
てからproxy update
proxy update
強制的に更新します。
proxy update -f
たとえば、 proxy
c:gpproxy
に配置されます。
c:
cd gp
proxy update
強制的に更新します。
c:
cd gp
proxy update -f
プロキシは GPLv3 ライセンスに基づいてライセンスされています。
公式 Telegram グループ: goproxy
このプロジェクトの作成者は、多数の開発者が二次開発のためにプロジェクトに基づいているか、GPLv3 契約に準拠せずにプロジェクトの多数のコア コードを使用していることを発見しました。これは、GPLv3 オープン ソース契約を使用するという本来の意図に重大に違反しています。この状況を考慮して、このプロジェクトでは、オープンソースを尊重せず、他者の成果を尊重しない行為を抑制するために、コードのリリースを遅らせます。繰り返しを更新し続けますまた、フル プラットフォーム バイナリ プログラムのリリースを継続し、強力で便利なプロキシ ツールを提供します。カスタマイズしたビジネス ニーズがある場合は、 [email protected]
に電子メールを送信してください。
クリックして Linux インストールを入手
クリックして MacOS のインストールを入手
「クリックして Windows インストールを入手」
「クリックして Windows インストールを入手」
このマニュアルでは、製品版に含まれるすべての機能について説明しますが、認証などの高度な機能パラメータは無料版には含まれていません。
無料版を使用して一部のコマンドを実行するときに、次の xxx パラメータのようなプロンプトが表示されない場合は、このパラメータが製品版の機能であることを示します。
err: unknown long flag '-a'
無料版と製品版の機能の比較、製品版の購入方法と使用方法の詳細な操作はここをクリックしてご覧ください
手動チュートリアルでは、デフォルトのシステムは Linux であり、プログラムはプロキシです。すべての操作には root 権限が必要です。
Windows の場合は、Windows バージョンの proxy.exe を使用してください。
次のチュートリアルでは、コマンドラインパラメータによる使用方法を紹介します。または、設定ファイルを読み込んでパラメータを取得することもできます。
具体的な形式は、@ 記号で構成ファイルを指定することです (例: proxy @configfile.txt)。
configfile.txt の形式では、最初の行はサブコマンドの名前で、2 行目は 1 行につき 1 つのパラメーターで始まります。
形式: parameter Parameter value
、パラメータ値なしの直接書き込みパラメータ、例: --nolog
たとえば、configfile.txt の内容は次のとおりです。
Http
-t tcp
-p :33080
--forever
デフォルトでは、ログによって出力される情報にはファイルの行数は含まれていません。場合によっては、プログラムのトラブルシューティングを行うために、問題をすぐに特定することができます。
--debug パラメータを使用すると、コードの行数とミリ秒を出力できます。
デフォルトでは、ログはコンソールに直接表示されます。ファイルに保存したい場合は、--log パラメータを使用できます。
例: --log proxy.log。トラブルシューティングを容易にするために、ログが proxy.log に出力されます。
デフォルトでは INFO と WARN をログに記録しますが、 --warn
設定して警告ログのみを出力することができます。
http、tcp、udp プロキシ プロセスは、セキュリティのために暗号化された通信を使用します。もちろん、このチュートリアルのすべての通信と証明書ファイルは暗号化されません。が必要です。
次のコマンドを使用して、自己署名証明書とキー ファイルを生成します。
proxy keygen -C proxy
証明書ファイル proxy.crt とキー ファイル proxy.key が現在のプログラム ディレクトリに生成されます。
次のコマンドを使用して、自己署名証明書 proxy.crt とキー ファイル proxy.key を使用して新しい証明書を生成します: goproxy.crt および goproxy.key。
proxy keygen -s -C proxy -c goproxy
証明書ファイル goproxy.crt とキー ファイル goproxy.key が現在のプログラム ディレクトリに生成されます。
デフォルトでは、証明書内のドメイン名はランダムであり、 -n test.com
パラメーターを使用して指定できます。
詳細な使用法: proxy keygen --help
。
デフォルトでプロキシが実行された後、プロキシを実行し続けたい場合はコマンド ラインを閉じることはできません。
プロキシをバックグラウンドで実行する場合は、コマンド ラインを閉じることができ、コマンドの最後に --daemon パラメータを追加するだけです。
例えば:
proxy http -t tcp -p "0.0.0.0:38080" --daemon
デーモンはパラメータ --forever を実行します。例: proxy http --forever
、
プロキシは子プロセスをフォークし、子プロセスを監視します。子プロセスが異常終了した場合は、5 秒後に子プロセスを再起動します。
このパラメータは、バックグラウンド実行パラメータ --daemon およびログ パラメータ --log と一致します。これにより、プロキシが誤って終了することなく常にバックグラウンドで実行されることが保証されます。
また、ログ ファイルを通じてプロキシの出力ログの内容を確認できます。
例: proxy http -p ":9090" --forever --log proxy.log --daemon
VPS が NAT デバイスの背後にある場合、vps ネットワーク インターフェイス IP はイントラネット IP になります。このとき、-g パラメーターを使用して vps 外部ネットワーク IP を追加し、無限ループを防ぐことができます。
VPS の外部ネットワーク IP が 23.23.23.23 であるとします。次のコマンドは、-g パラメーターを使用して 23.23.23.23 を設定します。
proxy http -g "23.23.23.23"
HTTP(S)SOCKS5SPS プロキシは、上位レベルの負荷分散と高可用性をサポートし、複数のアップストリームrepeat-Pパラメータを使用できます。
負荷分散ポリシーは 5 つのタイプをサポートしており、 --lb-method
パラメーターで指定できます。
順番に使用されるラウンドロビン
Leastconn は最小数の接続を使用します
最小時間では接続時間が最小になります
ハッシュはクライアント アドレスに基づいて固定アップストリームを使用します
重み 各アップストリームの重みと接続数に従ってアップストリームを選択します
プロンプト:
負荷分散チェック間隔は--lb-retrytime
でミリ秒単位で設定できます。
負荷分散接続のタイムアウトは--lb-timeout
でミリ秒単位で設定できます。
負荷分散ポリシーが重みの場合、-P 形式は 2.2.2.2: 3880?w=1 になります。ここで、1 は重みであり、0 より大きい整数です。
負荷分散ポリシーがハッシュの場合、デフォルトではクライアント アドレスに基づいてアップストリームを選択します。アクセスの宛先アドレス--lb-hashtarget
を使用してアップストリームを選択できます。
TCP プロキシにはパラメータ--lb-hashtarget
がありません。
デフォルトは負荷分散 + 高可用性モードです。 --lb-onlyha
パラメータを使用すると、高可用性モードのみが使用され、負荷分散戦略に従ってノードが選択され、このノードは選択されなくなるまで使用されます。生きている場合、別のノードが使用するために選択されるため、循環します。
すべてのノードがアクティブでない場合は、使用するノードがランダムに選択されます。
HTTP エージェント、SPS エージェント、イントラネット ペネトレーション、TCP エージェントは、中間のサードパーティ エージェントを介したアップストリームの接続をサポートします。
パラメータは次のとおりです: --jumper、すべての形式は次のとおりです。
http://username:password@host:port
http://host:port
https://username:password@host:port
https://host:port
socks5://username:password@host:port
socks5://host:port
socks5s://username:password@host:port
socks5s://host:port
ss://method:password@host:port
Http,socks5 は、通常の http および sock5 プロキシを表します。
Https,socks5s は、tls によって保護されている http および sock5 エージェントを表します。
つまり、TLS 経由の http プロキシ、TLS 経由のソックスです。
Socks/http(s)/sps プロキシは、ドメイン名のブラック リストとホワイト リストをサポートします。
--stop パラメータを使用してドメイン名ブラックリスト ファイルを指定すると、ユーザーがファイル内のこれらのドメインに接続すると接続が切断されます。
--only パラメータでドメイン名のホワイトリスト ファイルを指定すると、ユーザーがファイル内のドメイン以外のドメインに接続すると接続が切断されます。
--stop と --only の両方が設定されている場合は、--only のみが機能します。
白黒ドメイン名リスト ファイルの形式は次のとおりです。
**.baidu.com
*.taobao.com
A.com
192.168.1.1
192.168.*.*
?.qq.com
説明:
*
と?
をサポートします。 *
任意の文字を表します?
2. **.baidu.com
すべてのサフィックスが ..baidu.com` であるレベルの数に関係なく一致します。
3. *.taobao.com
一致するサフィックスは、 .taobao.com
の第 3 レベルのドメイン名です。
5. コメントの先頭に#
付けます。
Socks/http(s)/sps プロキシはすべてポート ブラックリストをサポートしています。
--stop-port
パラメータを使用してポート ブラックリスト ファイルを指定すると、ユーザーがファイル内のポートに接続すると、接続を確立できます。
ポート ブラックリスト ファイルの内容の形式は次のとおりです。
3306
22
注記:
#
で始まるものはコメントです。Socks/http(s)/sps/tcp/udp/dns/ イントラネット ペネトレーション ブリッジ/イントラネット ペネトレーション tbridge、クライアント IP ブラック/ホワイト リストをサポートします。
--ip-deny パラメータを使用してクライアント IP ブラックリスト リスト ファイルを指定すると、ユーザーの IP がこのファイルに含まれる場合に接続が切断されます。
--ip-allow パラメータを使用してクライアント IP ホワイトリスト ファイルを指定すると、ユーザーの IP がファイルに存在しない場合に接続が切断されます。
--ip-deny と --ip-allow の両方が設定されている場合は、--ip-allow のみが機能します。
クライアント IP ブラックリストおよびホワイトリスト ファイルの形式は次のとおりです。
192.168.1.1
192.168.*.*
192.168.1?.*
説明:
*
と?
がサポートされます。 *
任意の文字を表し、 ?
任意の文字を表します。 2. コメントの先頭に#
付けます。
プロキシのさまざまなプロキシ関数には、ファイルを設定するための場所が多数あります。例: --blocked 上位レベルに直接移動するドメイン名リスト ファイルを指定します。パラメータ値はファイルのパスです。
パラメータがファイルをロードするプロトコルをサポートしている場合、ファイル パスはファイル パスだけでなく、次のものも使用できます。
a. 「base64://」の先頭の Base64 エンコードは、上記のファイルの内容を示します (例:base64://ajfpoajsdfa=)。
b. 英語のカンマ区切りの複数の先頭にある「str://」 (str://xxx、yyy など)
プロキシのブロックされた、ダイレクト、停止、のみ、ホスト、resolve.rules、rewriter.rules、ip.allow、ip.deny ファイルは、プロトコルの読み込みをサポートします。
Socks5spshttp プロキシ、同時クライアント接続数を制御するパラメータは次のとおりです: --max-conns-rate
、1 秒あたりの最大クライアント接続数を制御します、デフォルト: 20、0 は無制限です
「tcp / http / sock / sps」は、複数のポートおよび範囲ポートでのリッスンをサポートします。通常の状況では、1 つのポートでリッスンするだけで十分ですが、複数のポートでリッスンする必要がある場合は、-p パラメーターの形式がサポートされます。は: -p 0.0.0.0:80,0.0.0.0:443,.0.0.0.0:8000-9000,:5000-6000
、詳細 バインディングは次のとおりです。カンマで区切ってください。
proxy http -t tcp -p "0.0.0.0:38080"
リッスン ポートの引数-p
次のとおりです。
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000 and 9001 to 9999, 1002 total ports
アップストリーム HTTP プロキシが22.22.22.22:8080
であると仮定して、ローカル ポート 8090 を使用します。
proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
Web サイトのドメイン名のブラック/ホワイト リスト ファイルを 1 行に 1 つのドメイン名で指定することもできます。一致ルールは右端の一致です(例: baidu.com、一致は .baidu.com、ブラックリストのドメイン名)。上流エージェントに直接送信されます。ホワイトリスト ドメイン名は上流エージェントに送信されません。
proxy http -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt
注: セカンダリ プロキシで使用される
proxy.crt
およびproxy.key
、プライマリ プロキシと一致している必要があります。
レベル 1 HTTP プロキシ (VPS、IP: 22.22.22.22)
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
セカンダリ HTTP プロキシ (ローカル Linux)
proxy http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
次に、ローカル ポート 8080 にアクセスすると、VPS 上のプロキシ ポート 38080 にアクセスします。
セカンダリ HTTP プロキシ (ローカル Windows)
proxy.exe http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
次に、Windos システムを設定します。プロキシ インターネット プログラムを経由する必要があるプロキシは http モード、アドレスは 127.0.0.1、ポートは 8080、プログラムは暗号化されたチャネルを介して vps 経由でインターネットにアクセスできます。
レベル 1 HTTP プロキシ VPS_01、IP: 22.22.22.22
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
セカンダリ HTTP プロキシ VPS_02、IP: 33.33.33.33
proxy http -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
レベル 3 HTTP プロキシ (ローカル)
proxy http -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
ローカル ポート 8080 にアクセスすると、プライマリ HTTP プロキシのプロキシ ポート 38080 にアクセスすることになります。
プロキシ HTTP プロトコルの場合、認証されたユーザー名とパスワードをコマンド ラインで指定できます。
proxy http -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
複数のユーザーの場合は、-a パラメーターを繰り返します。
「ユーザー名:パスワード」の形式でファイルに配置し、-F で指定することもできます。
proxy http -t tcp -p ":33080" -F auth-file.txt
さらに、http(s) プロキシには外部 HTTP API 認証も統合されており、--auth-url パラメータを使用して http URL インターフェイス アドレスを指定できます。
その後、ユーザー接続があると、プロキシは GET モードで URL を要求し、次の 4 つのパラメーターを取得します。HTTP ステータス コード 204 が返された場合、認証は成功です。
それ以外の場合は、認証に失敗しました。
例えば:
proxy http -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
ユーザーが接続すると、プロキシは GET モードで URL (「http://test.com/auth.php」) を要求します。
user、pass、ip、local_ip、target の 5 つのパラメータを取ります。
http://test.com/auth.php?user={USER}&pass={PASS}&ip={IP}&local_ip={LOCAL_IP}&target={TARGET}
ユーザー: ユーザー名
パス: パスワード
IP: ユーザーの IP、例: 192.168.1.200
Local_ip: ユーザーがアクセスしたサーバーの IP (例: 3.3.3.3)
ターゲット: ユーザーがアクセスした URL (例: http://demo.com:80/1.html または https://www.baidu.com:80)
-a または -F または --auth-url パラメーターがない場合、基本認証はオフになります。
デフォルトでは、プロキシは Web サイトのドメイン名にアクセスできないかどうかをインテリジェントに判断し、アクセスできない場合は、--always を使用してすべての HTTP プロキシ トラフィックを上位の HTTP プロキシに送信することができます。プロキシ。
proxy http --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
説明: ssh 転送の原理は、ssh の転送機能を使用することです。つまり、ssh に接続した後、ssh プロキシを介してターゲット アドレスにアクセスできます。
次のものがあると仮定します: vps
ローカル HTTP(S) プロキシ ポート 28080、実行:
proxy http -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
ローカル HTTP(S) プロキシ ポート 28080、実行:
proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
KCP プロトコルでは、データの暗号化と復号化のためのパスワードを設定するために --kcp-key パラメーターが必要です。
レベル 1 HTTP プロキシ (VPS、IP: 22.22.22.22)
proxy http -t kcp -p ":38080" --kcp-key mypassword
セカンダリ HTTP プロキシ (ローカル Linux)
proxy http -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
次に、ローカル ポート 8080 にアクセスすると、VPS 上のプロキシ ポート 38080 にアクセスします。データは kcp プロトコルを通じて送信されます。kcp は udp プロトコルであるため、ファイアウォールは 380p udp プロトコルを解放する必要があることに注意してください。
プロキシは、他のソフトウェアのプロキシ設定をサポートするだけでなく、他のソフトウェアのプロキシ サービスも提供します。また、要求された Web サイトのドメイン名をプロキシ リッスン IP に直接解析し、プロキシは 80 および 443 ポートをリッスンします。プロキシは、アクセスする必要がある HTTP(S) Web サイトへのアクセスを自動的にプロキシします。
使用方法:
「最終レベルのプロキシ プロキシ」マシンでは、プロキシがすべての Web サイトとして偽装されるため、Web サイトのデフォルトの HTTP ポートは 80、HTTPS は 443 で、プロキシはポート 80 と 443 をリッスンできます。 パラメータ -p multipleアドレスはカンマ区切りで指定します。
proxy http -t tcp -p :80,:443
このコマンドは、マシン上でプロキシ エージェントを開始し、同時にポート 80 と 443 をリッスンします。通常のプロキシとして使用することも、このマシンの IP にプロキシする必要があるドメイン名を直接解決することもできます。
上流エージェントがある場合は、上記のチュートリアルを参照して上流エージェントを設定します。使用方法はまったく同じです。
proxy http -t tcp -p :80,:443 -T tls -P "2.2.2.2:33080" -C proxy.crt -K proxy.key
注記:
プロキシが配置されているサーバーの DNS 解決結果はカスタム解決の影響を受けることができません。そうでない場合は、プロキシ プロキシで--dns-address 8.8.8.8
パラメータを指定する必要があります。
このモードには特定のネットワーク基盤が必要です。関連する概念が理解できない場合は、自分で検索してください。
プロキシがルーター上で実行されていると仮定すると、起動コマンドは次のようになります。
proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key
次に、iptables ルールを追加します。参照ルールは次のとおりです。
# Upper proxy server IP address:
Proxy_server_ip=2.2.2.2
#路由器Running port for proxy listening:
Proxy_local_port=33080
# The following does not need to be modified
# create a new chain named PROXY
Iptables -t nat -N PROXY
# Ignore your PROXY server's addresses
# It's very IMPORTANT, just be careful.
Iptables -t nat -A PROXY -d $proxy_server_ip -j RETURN
# Ignore LANs IP address
Iptables -t nat -A PROXY -d 0.0.0.0/8 -j RETURN
Iptables -t nat -A PROXY -d 10.0.0.0/8 -j RETURN
Iptables -t nat -A PROXY -d 127.0.0.0/8 -j RETURN
Iptables -t nat -A PROXY -d 169.254.0.0/16 -j RETURN
Iptables -t nat -A PROXY -d 172.16.0.0/12 -j RETURN
Iptables -t nat -A PROXY -d 192.168.0.0/16 -j RETURN
Iptables -t nat -A PROXY -d 224.0.0.0/4 -j RETURN
Iptables -t nat -A PROXY -d 240.0.0.0/4 -j RETURN
# Anything to port 80 443 should be redirected to PROXY's local port
Iptables -t nat -A PROXY -p tcp --dport 80 -j REDIRECT --to-ports $proxy_local_port
Iptables -t nat -A PROXY -p tcp --dport 443 -j REDIRECT --to-ports $proxy_local_port
# Apply the rules to nat client
Iptables -t nat -A PREROUTING -p tcp -j PROXY
# Apply the rules to localhost
Iptables -t nat -A OUTPUT -p tcp -j PROXY
--dns-address および --dns-ttl パラメータは、プロキシがドメイン名にアクセスするために使用する DNS (--dns-address) を指定するために使用されます。
解析結果のキャッシュ時間 (--dns-ttl) 秒は、プロキシへのシステム DNS 干渉を回避するために、キャッシュ機能に加えて、DNS 解決時間を短縮してアクセス速度を向上させることもできます。
例えば:
proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
--dns-address
カンマで区切られた複数の DNS アドレス、負荷分散をサポートします。例: --dns-address "1.1.1.1:53,8.8.8.8:53"
また、パラメータ--dns-interface
使用して、DNS 解決に使用される帯域幅を指定することもできます。たとえば、 --dns-interface eth0
、DNS 解決では eth0 帯域幅が使用されます。このパラメータは、 --dns-address
に設定する必要があります。効果的であること。
プロキシの http(s) プロキシは、tls および kcp 後のカスタマイズをサポートすることに加えて、tls 標準暗号化および tcp 上の kcp プロトコルを介して tcp データを暗号化できます。
暗号化、つまりカスタム暗号化と tls|kcp を組み合わせて使用できます。AES256 暗号化の内部使用では、使用時にパスワードを定義するだけで済みます。
暗号化は 2 つの部分に分かれており、1 つはローカル (-z) の暗号化と復号化、もう 1 つはアップストリーム (-Z) との送信を暗号化するか復号化するかどうかです。
カスタム暗号化では、両端がプロキシである必要があります。例として、次の 2 つのレベルと 3 つのレベルが使用されます。
セカンダリインスタンス
レベル 1 vps (ip: 2.2.2.2) で実行します。
proxy http -t tcp -z demo_password -p :7777
ローカルでのセカンダリ実行:
proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
このように、ローカルエージェント8080を介してウェブサイトにアクセスする場合、上流との暗号化通信により目的のウェブサイトにアクセスすることになる。
3 レベルのインスタンス
レベル 1 vps (ip: 2.2.2.2) で実行します。
proxy http -t tcp -z demo_password -p :7777
セカンダリ vps (ip: 3.3.3.3) で実行します。
proxy http -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888
ローカルの 3 レベルの実行:
proxy http -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
このように、ローカルエージェント8080を介してウェブサイトにアクセスする場合、上流との暗号化通信により目的のウェブサイトにアクセスすることになる。
プロキシ http(s) プロキシは、tls 標準暗号化と tcp 上の kcp プロトコルを通じて tcp データを暗号化でき、カスタム暗号化の前にデータを圧縮することもできます。
つまり、圧縮とカスタム暗号化、および tls|kcp を組み合わせて使用できます。圧縮は 2 つの部分に分割され、1 つの部分はローカル (-m) 圧縮送信になります。
その一部は、アップストリーム (-M) 送信で圧縮されます。
圧縮では、両側がプロキシである必要があります。また、次では例としてレベル 2 とレベル 3 を使用して (暗号化された) データを保護します。
セカンダリインスタンス
レベル 1 vps (ip: 2.2.2.2) で実行します。
proxy http -t tcp -m -p :7777
ローカルでのセカンダリ実行:
proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
このように、ローカル エージェント 8080 を介して Web サイトにアクセスすると、アップストリームによる圧縮を介してターゲット Web サイトにアクセスします。
3 レベルのインスタンス
レベル 1 vps (ip: 2.2.2.2) で実行します。
proxy http -t tcp -m -p :7777
セカンダリ vps (ip: 3.3.3.3) で実行します。
proxy http -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
ローカルの 3 レベルの実行:
proxy http -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
このように、ローカル エージェント 8080 を介して Web サイトにアクセスすると、アップストリームによる圧縮を介してターゲット Web サイトにアクセスします。
HTTP(S) プロキシは上位レベルの負荷分散をサポートしており、複数のアップストリームrepeat-Pパラメータを使用できます。
proxy http --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080
proxy http --lb-method=leastconn --lb-retrytime 300 --lb-timeout 300 -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -t tcp - p :33080
proxy http --lb-method=weight -T tcp -P 1.1.1.1:33080?w=1 -P 2.1.1.1:33080?w=2 -P 3.1.1.1:33080?w=1 -t tcp - p :33080
proxy http --lb-hashtarget --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -t tcp -p :33080
速度制限は 100K で、 -l
パラメータで指定できます。たとえば、 100K 2000K 1M は制限なしを意味します。
proxy http -t tcp -p 2.2.2.2:33080 -l 100K
--bind-listen
パラメータを使用して、ポータル IP とのクライアント接続を開き、そのポータル IP を送信 IP として使用してターゲット Web サイトにアクセスできます。間違った IP がバインドされている場合、プロキシは機能しません。つまり、プロキシは IP をバインドせずにターゲットをバインドしようとし、ログにプロンプトが表示されます。
proxy http -t tcp -p 2.2.2.2:33080 --bind-listen
上記の--bind-listen
パラメータでは発信 IP を指定できますが、 entry IP
と発信outgoing IP
人為的に参照することはできません。場合は--bind-ip
使用できます。パラメータ、形式: IP:port
、例: 1.1.1.1:8080
、 [2000:0:0:0:0 :0:0:1]:8080
複数のバインディング要件の場合、 --bind-ip
パラメータは繰り返すことができます。
たとえば、このマシンは IP 5.5.5.5
、 6.6.6.6
持ち、2 つのポート8888
と7777
を監視します。コマンドは次のとおりです。
Proxy tcp -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888 -T tcp -P 2.2.2.2:3322
次に、クライアントのアクセス ポート7777
、発信 IP は5.5.5.5
、アクセス ポート8888
、発信 IP は6.6.6.6
です ( --bind-ip
と--bind- are set at the same time listen
、 --bind-ip
の方が優先されます。 ■ さらに、 --bind-ip
パラメータのIP
部分は、 network interface name
、 wildcards
の指定をサポートしており、複数の指定が可能です。詳細な説明は次のとおりです。
--bind-ip eth0:7777
などのネットワーク インターフェイス名を指定すると、クライアントは7777
ポートにアクセスし、出力 IP は eth0 ネットワーク インターフェイスの IP になります。--bind-ip eth0.*:7777
などのワイルドカードをサポートします。その場合、クライアントはポート7777
にアクセスし、 eth0.
で始まるネットワーク インターフェイスの IP からエグレス IP がランダムに選択されます。--bind-ip 192.168.?.*:777
などのワイルドカードをサポートします。この場合、クライアントは7777
ポートにアクセスします。発信 IP はマシンのすべての IP であり、 192.168.?.*
.* A の IP と一致します。ランダムに選ばれたもの。-bind-ip pppoe??,192.168.?.*:7777
などの半角を使用したいくつかの選択的な分割も可能で、その後、クライアントは7777
ポートにアクセスします。発信 IP は、 pppoe??
に一致するマシンのネットワーク インターフェイス名です。これは、マシン IP の192.168.?.*
に一致する IP からランダムに選択されます。*
0 から任意の文字を表し、 ?
1 文字を表します。--bind-refresh
パラメータを使用して、ローカル ネットワーク インターフェイス情報を更新する間隔を指定できます。デフォルトは5
で、単位は秒です。デフォルトでは、-C、-K パラメータは crt 証明書とキー ファイルへのパスです。
それがbase64://の先頭である場合、後者のデータはbase64でエンコードされているとみなされ、デコード後に使用されます。
インテリジェント モード設定は、インテリジェント、ダイレクト、親のいずれかになります。
デフォルトは親です。
各値の意味は次のとおりです。
--intelligent=direct
、ブロックされたターゲットは直接接続されていません。
--intelligent=parent
、直接にないターゲットはより高いレベルに移動します。
--intelligent=intelligent
、ブロックされ、ダイレクトにはターゲットがありません。アップストリーム アクセス ターゲットを使用するかどうかをインテリジェントに決定します。
proxy help http
ローカル実行:
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"
次に、ローカル ポート 33080 にアクセスすると、192.168.22.33 のポート 22 にアクセスします。
-p
パラメータは以下をサポートします。
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000, 9001 to 9999 for a total of 1002 ports
ローカル リスニング ポートの数が 1 より大きい場合、ローカル ポートに対応する対応する上位ポートが接続され、 -P
のポートは無視されます。
すべてのポートからの接続が必要な場合は、上位の指定ポートに接続し、パラメーター--lock-port
追加できます。
のような:
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:0"
次に、 33080
ポートの接続は 192.168.22.33 の33080
ポートに接続され、他のポートも同様です。このとき、パラメータ-P
のポートは0
使用します。
33080
33081
のポートを192.168.22.33の22
ポートに接続する場合は、パラメーター--lock-port
を追加できます。
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port
VPS(IP:22.22.2.33)が実行されます。
proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"
ローカル実行:
proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"
次に、ローカルポート23080にアクセスして、22.22.22.33のポート8020にアクセスします。
プライマリTCPプロキシVPS_01、IP:22.22.22.22
proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"
セカンダリTCPプロキシVPS_02、IP:33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
レベル3 TCPプロキシ(ローカル)
proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"
次に、ローカルポート8080にアクセスして、暗号化されたTCPトンネルを介して66.66.66.66のポート8080にアクセスします。
VPS(IP:22.22.2.33)が実行されます。
proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key
ローカル実行:
proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
次に、ローカルポート23080にアクセスして、暗号化されたTCPトンネルを介して22.22.22.33のポート8080にアクセスします。
プライマリTCPプロキシVPS_01、IP:22.22.22.22
proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key
セカンダリTCPプロキシVPS_02、IP:33.33.33.33
proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
レベル3 TCPプロキシ(ローカル)
proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
次に、ローカルポート8080にアクセスして、暗号化されたTCPトンネルを介して66.66.66.66のポート8080にアクセスします。
プロキシが配置されているネットワークは、HTTPSまたはSocks5プロキシを使用して、今度はアクセスする必要があります
-Jパラメーターは、プロキシTCPポートをマッピングするときに、HTTPSまたはSOCKS5プロキシを介してプロキシをPEER -Pに接続し、外部ポートをローカルにマッピングするのに役立ちます。
-jパラメーター形式は次のとおりです。
HTTPSプロキシライティング:
プロキシには認証、ユーザー名:ユーザー名パスワード:パスワードが必要です
https:// username:password@host:port
エージェントは認証を必要としません
https:// host:port
Socks5プロキシライティング:
プロキシには認証、ユーザー名:ユーザー名パスワード:パスワードが必要です
socks5:// username:password@host:port
エージェントは認証を必要としません
socks5:// host:port
ホスト:プロキシのIPまたはドメイン名
ポート:プロキシのポート
TCPプロキシが優れたタイプ(パラメーター--bind-listen
-t)がTCPである場合、指定された発信IPをサポートします。ターゲットWebサイトにアクセスするための発信IPがバインドされている場合、プロキシは機能しません。
proxy tcp -p ":33080" -T tcp -P" 192.168.22.33:22" -B
上記の--bind-listen
パラメーターは発信IPを指定できますが、 entry IP
とoutgoing IP
--bind-ip
的に参照することはできません。パラメーター、形式: IP:port
、例: 1.1.1.1:8080
、 [2000:0:0:0:0:0:0:1]:8080
--bind-ip
パラメーター識別を繰り返すことができます。
たとえば、このマシンにはIP 5.5.5.5
6.6.6.6
あり、2つのポート8888
と7777
を監視しています。コマンドは次のとおりです。
Proxy tcp -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888 -T tcp -P 2.2.2.2:3322
次に、クライアントアクセスポート7777
、発信--bind-ip
--bind-ip
5.5.5.5
、 --bind- are set at the same time listen
ポート8888
、発信IPは6.6.6.6
です。 --bind-ip
優先度が高くなっています。
さらに、 --bind-ip
パラメーターのIP
部分は、 network interface name
、 wildcards
、および詳細な説明を指定することをサポートしています。
--bind-ip eth0:7777
、その後、クライアントは7777
ポートにアクセスし、出力IPはETH0ネットワークインターフェイスのIPです。--bind-ip eth0.*:7777
、その後、クライアントは7777
ポートにアクセスしますeth0.
--bind-ip 192.168.?.*:7777
、その後、クライアントは7777
ポートにアクセスし、発信IPはマシンのすべてのIPSであり、 192.168.?.*
ランダムに選択されたもの。--bind-ip pppoe??,192.168.?.*:7777
、その後、クライアントはポート7777
にアクセスします。 IPは、 192.168.?.*
に一致するマシンのネットワークインターフェイス名ですかpppoe??
*
任意の数の文字を表し?
1文字を表します。--bind-refresh
パラメーターを使用して間隔を指定してローカルネットワークインターフェイス情報を更新できます。デフォルトは5
、ユニットは2番目です。--max-conns
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --max-conns 1000
あたりの接続の最大数を制限できます。ポートあたりの最大数を1000に制限します。 proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --max-conns 1000
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k
--rate-limit
は、各TCP接続のレートを制限できます。各TCP接続のレートを100K/sに制限します。 proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M
--ip-rate
各クライアントIPの合計レートを制限します。 proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M
--port-rate
各サービスポートの合計レートを制限します。各ポートの合計レートは10m/sに制限されます。 proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M
--rate-limit
および( --ip-rate
または--port-rate
)は、合計レートを制限し、単一のTCPのレートを制限できます。--c
ローカルとクライアントの間の伝送を圧縮するかどうか、デフォルトのfalse --C
制御します。
例:
VPS(IP:22.22.22.33)実装: proxy tcp -t tcp --c -p ":33080" -T tcp -P "127.0.0.1:8080"
ローカル実行: proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C
proxy help tcp
ローカル実行:
proxy udp -p ":5353" -T udp -P "8.8.8.8:53"
次に、ローカルUDP:5353ポートにアクセスして、8.8.8.8 UDP:53ポートにアクセスします。
-p
パラメーターはサポートしています:
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000, 9001 to 9999 for a total of 1002 ports
ローカルリスニングポートの数が1を超える場合、ローカルポートに対応する対応する上部ポートが接続され、 -P
のポートは無視されます。
すべてのポートから接続が必要な場合は、指定された上部ポートに接続すると、パラメーター--lock-port
追加できます。
のような:
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:0"
33080
ポートの接続は、 0
の33080
ポートに接続-P
れ、他のポートは同じです。
33080
33081
のポートを192.168.22.33の2222
ポートに接続する場合は、パラメーター--lock-port
追加できます。
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port
VPS(IP:22.22.2.33)が実行されます。
proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"
ローカル実行:
proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080"
次に、ローカルUDPにアクセス:5353ポートは、VPSアクセス8.8.8.8 UDP:53ポートを介して、TCPトンネルを介して行われます。
プライマリTCPプロキシVPS_01、IP:22.22.22.22
proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"
セカンダリTCPプロキシVPS_02、IP:33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
レベル3 TCPプロキシ(ローカル)
proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080"
次に、ローカル5353ポートへのアクセスは、VPSを介してTCPトンネルを介してポート8.8.8.8にアクセスします。
VPS(IP:22.22.2.33)が実行されます。
proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key
ローカル実行:
proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
次に、ローカルUDPにアクセスしてください:5353ポートは、VPS Access 8.8.8.8 UDP:53ポートを介して、暗号化されたTCPトンネルを介して行われます。
プライマリTCPプロキシVPS_01、IP:22.22.22.22
proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key
セカンダリTCPプロキシVPS_02、IP:33.33.33.33
proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
レベル3 TCPプロキシ(ローカル)
proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
次に、ローカル5353ポートにアクセスして、暗号化されたTCPトンネルを介して8.8.8.8ポート53からVPS_01にアクセスします。
UDPアップストリームプロキシ(パラメーター:-t)がUDPである場合、指定さ--bind-listen
た発信IPをサポートします。ターゲットにアクセスするIP。
proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B
proxy help udp
イントラネットの侵入は、「マルチリンクバージョン」と「多重化バージョン」という2つのバージョンに分割されています。これは一般的にWebサービスのように、このサービスは長期的な接続ではありません。「マルチリンクバージョン」を使用することをお勧めします。時間を長く維持することは、「多重化バージョン」を使用することを提案することです。
次のチュートリアルでは、「多重化バージョン」を例として使用して、使用方法を説明します。
イントラネットの侵入は、クライアント、サーバー、およびブリッジの3つの部分で構成されています。
背景:
要求:
自宅では、VPSのポート28080にアクセスして、会社のマシンAのポート80にアクセスできます。
手順:
VPSで実行しますproxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
完了
背景:
要求:
Wechatの開発アカウントのWebページコールバックインターフェイスの構成:http://22.22.22.22/calback.phpのアドレスに入力してください
次に、ノートブックの80ポートの下でcalback.phpにアクセスできます。独自のドメイン名を使用できます。
たとえば、wx-dev.xxx.comは22.22.22.22に解決し、次に独自のノートブックNginxで解決します
ドメイン名wx-dev.xxx.comを特定のディレクトリに構成します。
手順:
VPSで実行して、VPのポート80が他のプログラムで占有されていないことを確認します。
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
ラップトップで実行しますproxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
完了
背景:
要求:
自宅では、ローカルDNSを22.22.22.22に設定することにより、会社のマシンAを使用してドメイン名の解像度サービスを実行できます。
手順:
VPSで実行しますproxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
完了
背景:
要求:
安全になるためには、VPS上の会社マシンAにアクセスしたくないので、自宅のマシンのポート28080にアクセスできます。
暗号化されたトンネルを介して、会社のマシンAのポート80へのアクセス。
手順:
VPSで実行しますproxy bridge -p ":33080" -C proxy.crt -K proxy.key
会社のマシンで実行a
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
自宅のコンピューターで実行しますproxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
完了
ヒント:
複数のクライアントが同時に同じブリッジに接続されている場合、-Kパラメーターで設定し、-kは一意の文字列で設定できる別のキーを指定する必要があります。
同じ橋の上にいる唯一のものです。
サーバーがブリッジに接続されている場合、同時に同じブリッジに接続する複数のクライアントがある場合、クライアントを選択するには-kパラメーターを使用する必要があります。
-Rパラメーターを繰り返して複数のポートを公開します。
背景:
要求:
自宅では、VPSのポート28080にアクセスして、会社のマシンAのポート80にアクセスできます。
自宅では、VPSのポート29090にアクセスして、21ポートの会社マシンAにアクセスできます。
手順:
VPSで実行しますproxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key
proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
完了
-rの完全な形式は次のとおりです。 PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT
4.7.1。
例: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"
-udpパラメーターが指定されている場合、プロトコルはudpにデフォルトで、次に: -r ":8080@:80"
はudpにデフォルトです。
-udpパラメーターが指定されていない場合、プロトコルはTCPにデフォルトであり、次に: -r ":8080@:80"
はTCPにデフォルトです。
4.7.2:デフォルトはデフォルトです。
例:-r "udp://:10053@[test1]:53" -r "tcp://:10800@[test2]:1080" -R ":8080@:80"
-kテストなど、-kパラメーターが指定されている場合、次に: -r ":8080@:80"
client_keyがデフォルトでテストします。
-kパラメーターが指定されていない場合、: -r ":8080@:80"
client_keyはデフォルトになります。
0.0.0.0
は、デフォルト127.0.0.1
。
サーバーまたはクライアントが配置されているネットワークは、HTTPSまたはSOCKS5プロキシを使用して、今度はアクセスできません
-jパラメーターは、HTTPSまたはSocks5を介してサーバーまたはクライアントをブリッジに接続するのに役立ちます。
-jパラメーター形式は次のとおりです。
HTTPSプロキシライティング:
プロキシには認証、ユーザー名:ユーザー名パスワード:パスワードが必要です
https:// username:password@host:port
エージェントは認証を必要としません
https:// host:port
Socks5プロキシライティング:
プロキシには認証、ユーザー名:ユーザー名パスワード:パスワードが必要です
socks5:// username:password@host:port
エージェントは認証を必要としません
socks5:// host:port
ホスト:プロキシのIPまたはドメイン名
ポート:プロキシのポート
通常、HTTPリクエストクライアントはサーバーのIPとポートを使用してホストフィールドを設定しますが、予想されるバックエンドの実際のホストと同じではありません。これにより、TCPが渡されます。 Virtual Hostと--http-host
は、HTTPヘッダーのホストフィールド値--http-host
バックエンドの実際の値にするように機能しません。 --http-host
パラメーター、各HTTP要求のX-Forwarded-For
に2つのヘッダーが追加されます。X X-Real-IP
値はクライアントIPです。
server
-http -hostパラメーターの形式は次のとおりです。
--http-host www.test.com:80@2200
、サーバーが複数のポートに耳を傾ける場合は、各ポートのホストを設定するために--http-host
パラメーターを繰り返します。
例:
たとえば、クライアントローカルNginx、127.0.0.1:80は、Domain Name local.com
にバインドされているWebサービスを提供します。
その場合、サーバーの起動パラメーターは次のとおりです。
proxy server -P :30000 -r :[email protected]:80 --http-host local.com@2500
説明:
-r :[email protected]:80
および--http-host local.com:80@2500
2500ポートは、サーバーがローカルに耳を傾けるポートです。
HTTPプロトコルを使用して、サーバーのIP:2500ポートを要求する場合、HTTPのヘッダーホストフィールドはlocal.com
に設定されます。
サーバーのドッキングピアを別々に起動すると、プロキシアドミンコントロールパネルが必要です。
次に、サーバーを起動して、パラメーター-Server-ID =マッピングルールのIDを追加してトラフィックをカウントします。
イントラネット侵入サポートサーバーとクライアントのネットワーク条件が満たされている場合、サーバーとクライアントはP2Pを介して直接接続されます。
ブリッジ、サーバー、クライアントを起動するとき、 --p2p
パラメーターを使用して、ポートのP2P(PTCPおよびPUDP)を有効にします。
サーバーとクライアントの間でP2Pホールが故障した場合、ブリッジ転送データは自動的に切り替えられます。
イントラネットの侵入ブリッジは、クライアントキーホワイトリストを設定できます。
aファイルコンテンツ1つのクライアントは、クライアントのスタートアップパラメーターの値です。
b「base64://」の冒頭でのbase64エンコードは、上記のファイルのコンテンツです。
c。
デフォルトは空で、すべてのキーを許可します。
SENATタイプの判断、ネットワークがP2Pをサポートするかどうかproxy tools -a nattype
簡単に確認できます。
proxy help bridge
proxy help server
proxy help client
プロンプト:
Socks5 Proxy、Supports Connect、UDP Protocolは、バインドをサポートせず、ユーザー名とパスワード認証をサポートします。
*** Socks5 --udp-port 0
UDP関数は、 --udp
でオンになります。 --udp-port 0
0
フリーポートがランダムに選択されていることを表します。または、特定のポートを手動で指定できます。
proxy socks -t tcp -p "0.0.0.0:38080"
ポート引数-p
聞くことができます:
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000 and 9001 to 9999, 1002 total ports
上流のSocks5プロキシが22.22.22.22:8080
であると仮定して、ローカルポート8090を使用してくださいproxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
また、Webサイトドメイン名、1つのドメイン名、1つのドメイン名の黒と白のリストファイルを指定することもできますドメイン名ドメイン名はアップストリームエージェントに直接送られます。リストのドメイン名は、ドメイン名がブラックリストにあり、ホワイトリストにある場合、ブラックリストが機能します。
proxy socks -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt
レベル1ソックスプロキシ(VPS、IP:22.22.22.22)
proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
セカンダリソックスプロキシ(ローカルLinux)
proxy socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
次に、ローカルポート8080にアクセスして、VPSのプロキシポート38080にアクセスします。
セカンダリソックスプロキシ(ローカルウィンドウ)
proxy.exe socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
次に、Windosシステムを設定します。プロキシインターネットプログラムを通過する必要があるプロキシはSocks5モードです。アドレスは127.0.0.1、ポートは8080です。プログラムは、暗号化されたチャネルを介してVPSを介してインターネットにアクセスできます。
レベル1ソックスプロキシVPS_01、IP:22.22.22.22
proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
セカンダリソックスプロキシVPS_02、IP:33.33.33.33
proxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
レベル3ソックスプロキシ(ローカル)
proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
次に、ローカルポート8080にアクセスすることは、第1レベルのソックスプロキシのプロキシポート38080にアクセスすることです。
デフォルトでは、プロキシは、ウェブサイトドメイン名がアクセスできない場合、上流のソックスプロキシにアクセスできないかどうかを判断します。 。
proxy socks --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
説明:SSH転送の原則は、SSHの転送機能を使用することです。つまり、SSHに接続した後、SSHプロキシを介してターゲットアドレスにアクセスできます。
VPSがあるとします
ローカルソックス5プロキシポート28080、実行:
proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
ローカルソックス5プロキシポート28080、実行:
proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
次に、ローカルポート28080にアクセスして、VPSを介してターゲットアドレスにアクセスします。
Socks5プロキシプロトコルでは、ユーザー名とパスワードの認証を実行できます。
proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
複数のユーザーの場合、-Aパラメーターを繰り返します。
また、「username:password」の形式のファイルに配置し、-fで指定することもできます。
proxy socks -t tcp -p ":33080" -F auth-file.txt
さらに、SOCKS5エージェントは、外部HTTP API認証も統合できます。
次に、ユーザー接続がある場合、プロキシは、HTTPステータスコード204が返された場合、Get ModeでURLを要求します。
それ以外の場合、認証は失敗しました。
例えば:
proxy socks -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
ユーザーが接続すると、プロキシはGet ModeでURL( "http://test.com/auth.php")を要求します。
ユーザー、パス、IP、local_ipの4つのパラメーターをお届けします:
http://test.com/auth.php?user= {user}&pass = {pass}&pass&local_ip = {local_ip}
ユーザー:ユーザー名
パス:パスワード
IP:ユーザーのIP、例:192.168.1.200
local_ip:ユーザーがアクセスしたサーバーのIP、例:3.3.3.3
-aまたは-fまたは-auth -urlパラメーターがない場合、認証はオフになります。
KCPプロトコルでは、データを暗号化および復号化するためのパスワードを設定するために、-KCP-Keyパラメーターが必要です。
レベル1 HTTPプロキシ(VPS、IP:22.22.22.22)
proxy socks -t kcp -p ":38080" --kcp-key mypassword
セカンダリHTTPプロキシ(ローカルLinux)
proxy socks -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
次に、ローカルポート8080にアクセスして、VPSのプロキシポート38080にアクセスします。データはKCPプロトコルを介して送信されます。
-DNS-ADDRESSおよび-DNS-TTLパラメーター。プロキシで使用されるDNS(-DNS-Address)を指定してドメイン名にアクセスするために使用されます。
また、分析の結果キャッシュ時間(-DNS-TTL)秒、プロキシへのシステムDNS干渉を回避します。また、キャッシュ機能に加えて、DNS解像度時間を短縮してアクセス速度を改善することもできます。
例えば:
proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
パラメーター-DNS --dns-interface eth0
--dns-interface
使用して、DNS解像度に使用される帯域幅を指定することもできます。たとえば、 --dns-address
のようになります。効果的である。
プロキシのソックスプロキシは、TLS標準暗号化とTCPの上にあるKCPプロトコルを介してTCPデータを暗号化できますAES256暗号化では、パスワードを使用するときにのみ定義する必要があります。
暗号化は2つの部分に分割されます。1つは、ローカル(-Z)暗号化と復号化のかどうか、もう1つは上流(-Z)の伝送が暗号化されているか復号化されているかです。
カスタム暗号化には、双方がプロキシである必要があります。
次の2つのレベル、たとえば3つのレベル:
二次インスタンス
レベル1 VPSで実行(IP:2.2.2.2):
proxy socks -t tcp -z demo_password -p :7777
ローカル二次実行:
proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
このようにして、Webサイトにローカルエージェント8080からアクセスされると、ターゲットWebサイトは上流の暗号化された送信を介してアクセスされます。
3レベルインスタンス
レベル1 VPSで実行(IP:2.2.2.2):
proxy socks -t tcp -z demo_password -p :7777
セカンダリVPSで実行する(IP:3.3.3.3):
proxy socks -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888
ローカル3レベルの実行:
proxy socks -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
このようにして、Webサイトにローカルエージェント8080からアクセスされると、ターゲットWebサイトは上流の暗号化された送信を介してアクセスされます。
プロキシのソックスプロキシは、カスタム暗号化とTCPプロトコルを使用してTCPデータを暗号化できます。
データ、つまり圧縮関数とカスタム暗号化とTLS | KCPを組み合わせて使用でき、圧縮は2つの部分に分割されます。
その一部はローカル(-m)圧縮伝達であり、一部は上流(-m)の伝送が圧縮されているかどうかです。
圧縮には両側が代理である必要があり、圧縮はある程度データを保護(暗号化)します。
次の2つのレベル、たとえば3つのレベル:
二次インスタンス
レベル1 VPSで実行(IP:2.2.2.2):
proxy socks -t tcp -m -p :7777
ローカル二次実行:
proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
このようにして、Webサイトにローカルエージェント8080からアクセスされると、ターゲットWebサイトはアップストリームとの圧縮によりアクセスされます。
3レベルインスタンス
レベル1 VPSで実行(IP:2.2.2.2):
proxy socks -t tcp -m -p :7777
セカンダリVPSで実行する(IP:3.3.3.3):
proxy socks -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
ローカル3レベルの実行:
proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
このようにして、Webサイトにローカルエージェント8080からアクセスされると、ターゲットWebサイトはアップストリームとの圧縮によりアクセスされます。
Socksプロキシは、上位レベルの負荷分散をサポートし、複数の上流のリピートPパラメーターを使用できます。
proxy socks --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp
proxy socks --lb-method=leastconn --lb-retrytime 300 --lb-timeout 300 -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp
proxy socks --lb-method=weight -T tcp -P 1.1.1.1:33080?w=1 -P 2.1.1.1:33080?w=2 -P 3.1.1.1:33080?w=1 -p :33080 -t tcp
proxy socks --lb-hashtarget --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp
速度制限は100kで、 -l
パラメーターで指定できます。たとえば、100k 2000k 1mを意味します。
proxy socks -t tcp -p 2.2.2.2:33080 -l 100K
--bind-listen
パラメーターを使用して、ポータルIPとのクライアント接続を開き、ポータルIPを発信IPとして使用してターゲットWebサイトにアクセスできます。イングレスIP。
proxy socks -t tcp -p 2.2.2.2:33080 --bind-listen
上記の--bind-listen
パラメーターは、発信IPを指定できますが、 entry IP
IPをEgress IPとは違う場合は、 --bind-ip
outgoing IP
できます。パラメーター、形式: IP:port
、例: 1.1.1.1:8080
、 [2000:0:0:0:0:0:0:1]:8080
--bind-ip
パラメーターを繰り返します。
たとえば、マシンにはIP 5.5.5.5
6.6.6.6
あり、2つのポート8888
と7777
を監視しています。コマンドは次のとおりです。
proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
次に、クライアントアクセスポート7777
、発信--bind-ip
--bind-ip
5.5.5.5
、 --bind- are set at the same time listen
ポート8888
、発信IPは6.6.6.6
です。 --bind-ip
優先度が高くなっています。
さらに、 --bind-ip
パラメーターのIP
部分は、 network interface name
、 wildcards
、および複数のものを指定することをサポートしています。
--bind-ip eth0:7777
、その後、クライアントは7777
ポートにアクセスし、出力IPはETH0ネットワークインターフェイスのIPです。eth0.
カードを7777
しています--bind-ip eth0.*:7777
--bind-ip 192.168.?.*:7777
、その後、クライアントは7777
ポートにアクセスし、発信IPはマシンのすべてのIPSであり、 192.168.?.*
ランダムに選択されたもの。--bind-ip pppoe??,192.168.?.*:7777
、その後、クライアントはポート7777
にアクセスします。 IPは、 192.168.?.*
に一致するマシンのネットワークインターフェイス名ですかpppoe??
*
任意の数の文字を表し?
1文字を表します。--bind-refresh
パラメーターを使用して間隔を指定してローカルネットワークインターフェイス情報を更新できます。デフォルトは5
、ユニットは2番目です。Socks5はカスケード認証をサポートし、-aはアップストリーム認証情報を設定できます。
上流:
proxy socks -t tcp -p 2.2.2.2:33080 -a user:pass
地元:
proxy socks -T tcp -P 2.2.2.2:33080 -A user:pass -t tcp -p :33080
デフォルトでは、-c、-kパラメーターは、CRT証明書とキーファイルへのパスです。
Base64://の始まりである場合、後者のデータはbase64エンコードされていると見なされ、デコード後に使用されます。
インテリジェントモード設定は、インテリジェント| direct |親の1つになります。
デフォルトは次のとおりです。
各値の意味は次のとおりです。
--intelligent=direct
、ブロックされたターゲットは直接接続されていません。
--intelligent=parent
、ダイレクトにないターゲットはより高いレベルになります。
--intelligent=intelligent
、Blocked、Directにはターゲットがなく、アップストリームアクセスターゲットを使用するかどうかを知的に決定します。
デフォルトでは、SOCKS5のUDP関数のポート番号であるプロキシは、 rfc1982 draft
リクエストにインストールされます。これは、プロトコルハンドシェイクプロセス中にランダムに指定され、事前に指定する必要はありません。
ただし、場合によっては、 --udp-port port number
ポートを使用して、UDP関数のポート番号を修正する必要があります。
proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080
デフォルトでは、プロキシ--udp-compat
Socks5プロキシの機能は、Socks5 RFC 1928の仕様に従って動作します--udp-compat
パラメーターを追加して、SOCKS5 UDP機能の互換性モードをアクティブにすることができます。
さらに、 -udp-gc
パラメーターを使用して、この時間のしきい値を超えると、UDP接続がリリースされます。
proxy help socks
プロキシプロトコル変換は、SPS自体を使用しています既存のHTTP(S)プロキシまたはSocks5プロキシまたはSSプロキシを置くと、HTTPとSOCKS5およびSSプロキシの両方をサポートするポートに変換され、HTTP(S)プロキシはフォワードプロキシとリバースプロキシをサポートします(SNI)、変換されたSocks5プロキシ、UDP関数は、Socks5またはSSの場合も依然としてサポートされています。チェーン接続がサポートされています。つまり、複数のSPSノードレベルをサポートできます。
ss
関数によってサポートされる暗号化方法は、AES-128-CFB、AES-128-CTR、AES-128-GCM、AES-192-CFB、AES-192-CTR、AES-192-GCM、AES-256-– CFB、AES-256-CTR、AES-256-GCM、BF-CFB、 CAST5-CFB、CHACHA20、CHACHA20-IITF、CHACHA20-IITF-POLY1305、DES-CFB、RC4-MD5、RC4-MD5-6、SALSA20、XCHACHA20
ポート引数-p
聞くことができます:
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000 and 9001 to 9999, 1002 total ports
SSのUDP関数は--ssudp
でオフになり、SOCKS5のUDP関数が--udp
でオフになり、Defaultが握手用のランダムポートであることがあります。パフォーマンスは、パラメーターで0
された--udp-port 0
を修正することで改善できます。
すでに通常のHTTPがあるとします:127.0.0.1:8080では、HTTPとSOCKS5とSSの両方をサポートする共通のプロキシに変えます。 192-CFB、SSパスワード:パス。
コマンドは次のとおりです。
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
TLS HTTP(s)プロキシ:127.0.0.1:8080があるとします。ファイル。、SS暗号化:AES-192-CFB、SSパスワード:パス。
コマンドは次のとおりです。
proxy sps -S http -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass
KCP HTTP(パスワードIS:DEMO123):127.0.1:8080があるとします。これにより、HTTPとSOCKS5とSSの両方をサポートする通常のプロキシに変えます、SS暗号化:AES-192-CFB、SSパスワード:パス。
コマンドは次のとおりです。
proxy sps -S http -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass
すでに通常のSocks5プロキシ:127.0.0.1:8080があるとします。これは、HTTP(S)とSOCKS5およびSSの両方をサポートする共通のプロキシに変えます。 、SSパスワード:合格。
コマンドは次のとおりです。
proxy sps -S socks -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
TLS Socks5プロキシ:127.0.0.1:8080が既にあるとします。これにより、HTTP(S)とSocks5とSSの両方をサポートする共通のプロキシに変換します。 :AES-192-CFB、SSパスワード:パス。
コマンドは次のとおりです。
proxy sps -S socks -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass
Suppose there is already a kcp socks5 proxy (password: demo123): 127.0.0.1:8080, now we turn it into a common proxy that supports both http(s) and socks5 and ss. The converted local port is 18080, ss Encryption method: aes-192-cfb, ss password: pass.
The command is as follows:
proxy sps -S socks -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass
SPS upstream and local support ss protocol, the upstream can be SPS or standard ss service.
SPS locally provides HTTP(S)SOCKS5SPS three defaults. When the upstream is SOCKS5, the converted SOCKS5 and SS support UDP.
Suppose there is already a normal SS or SPS proxy (ss is enabled, encryption: aes-256-cfb, password: demo): 127.0.0.1:8080, now we turn it to support both http(s) and socks5 and The ordinary proxy of ss, the converted local port is 18080, the converted ss encryption mode: aes-192-cfb, ss password: pass.
The command is as follows:
proxy sps -S ss -H aes-256-cfb -J pass -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
.
The above mentioned multiple sps nodes can be connected to build encrypted channels in a hierarchical connection, assuming the following vps and the home PC.
Vps01:2.2.2.2
Vps02:3.3.3.3
Now we want to use pc and vps01 and vps02 to build an encrypted channel. This example uses tls encryption or kcp. Accessing local 18080 port on the PC is to access the local 8080 port of vps01.
First on vps01 (2.2.2.2) we run a locally accessible http(s) proxy and execute:
proxy http -t tcp -p 127.0.0.1:8080
Then run a sps node on vps01 (2.2.2.2) and execute:
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tls -p :8081 -C proxy.crt -K proxy.key
Then run a sps node on vps02 (3.3.3.3) and execute:
proxy sps -S http -T tls -P 2.2.2.2:8081 -t tls -p :8082 -C proxy.crt -K proxy.key
Then run a sps node on the pc and execute:
proxy sps -S http -T tls -P 3.3.3.3:8082 -t tcp -p :18080 -C proxy.crt -K proxy.key
実行する。
Sps supports http(s)socks5 proxy authentication, which can be cascaded and has four important pieces of information:
1: The user sends the authentication information user-auth
.
2: Set the local authentication information local-auth
.
3: Set the connection authentication information 'parent-auth used by the upstream. 4: The authentication information
auth-info-to-parent` that is finally sent to the upstream.
Their situation is as follows:
User-auth | local-auth | parent-auth | auth-info-to-paren |
---|---|---|---|
はい/いいえ | はい | はい | From parent-auth |
はい/いいえ | いいえ | はい | From parent-auth |
はい/いいえ | はい | いいえ | いいえ |
いいえ | いいえ | いいえ | いいえ |
はい | いいえ | いいえ | From user-auth |
For the sps proxy we can perform username and password authentication. The authenticated username and password can be specified on the command line.
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -a "user1:pass1:0:0:" -a "user2:pass2:0:0: "
For multiple users, repeat the -a parameter.
Can also be placed in a file, the format is one line a username: password: number of connections: rate: upstream
, and then specified with -F.
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -F auth-file.txt
If the upstream has authentication, the lower level can set the authentication information with the -A parameter, for example:
upstream: proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -a "user1:pass1:0:0:" -a "user2:pass2:0: 0:"
Subordinate: proxy sps -S http -T tcp -P 127.0.0.1:8080 -A "user1:pass1" -t tcp -p ":33080"
For more details on certification, please refer to 9.API Certification
and 10.Local Certification
If there are multiple upstreams, they can be specified by multiple -Ps.
のような:
proxy sps -P http://127.0.0.1:3100 -P socks5://127.0.0.1:3200
The complete format of -P
is as follows:
protocol://a:[email protected]:33080#1
Each section is explained below:
protocol://
is the protocol type, possible types and contains the following:
Http is equivalent to -S http -T tcp
Https is equivalent to -S http -T tls --parent-tls-single , which is http(s) proxy over TLS
Https2 is equivalent to -S http -T tls
Socks5 is equivalent to -S socks -T tcp
Socks5s is equivalent to -S socks -T tls --parent-tls-single , which is socks over TLS
Socks5s2 is equivalent to -S socks -T tls
Ss is equivalent to -S ss -T tcp
Httpws is equivalent to -S http -T ws
Httpwss is equivalent to -S http -T wss
Socks5ws is equivalent to -S socks -T ws
Socks5wss is equivalent to -S socks -T wss
a:b
is the username and password of the proxy authentication. If it is ss, a
is the encryption method, b
is the password, and no username password can be left blank, for example: http://2.2.2.2:33080
If the username and password are protected, special symbols can be encoded using urlencode.
2.2.2.2:33080
is the upstream address, the format is: IP (or domain name): port
, if the underlying is ws/wss protocol can also bring the path, such as: 2.2.2.2: 33080/ws
;
You can also set the encryption method
and password
of wswss
by appending the query parameters m
and k
, for example: 2.2.2.2:33080/ws?m=aes-192-cfb&k=password
#1
When multiple upper-level load balancing is a weighting strategy, the weights are rarely used.
The proxy sps proxy can encrypt tcp data through tls standard encryption and kcp protocol on top of tcp, in addition to support after tls and kcp
Custom encryption, that is, custom encryption and tls|kcp can be used in combination, internally using AES256 encryption, only need to define it when using
A password can be used, the encryption is divided into two parts, one part is whether the local (-z) encryption and decryption, and the part is the encryption and decryption with the upstream (-Z) transmission.
Custom encryption requires both sides to be proxy.
The following two levels, three levels for example:
Suppose there is already an http(s) proxy: 6.6.6.6:6666
Secondary instance
Execute on level 1 vps (ip: 2.2.2.2):
proxy sps -S http -T tcp -P 6.6.6.6:6666 -t tcp -z demo_password -p :7777
Local secondary execution:
proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through encrypted transmission with the upstream.
Three-level instance
Execute on level 1 vps (ip: 2.2.2.2):
proxy sps -S http -T tcp -P 6.6.6.6:6666 -t tcp -z demo_password -p :7777
Execute on the secondary vps (ip: 3.3.3.3):
proxy sps -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888
Local three-level execution:
proxy sps -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through encrypted transmission with the upstream.
The proxy sps proxy can encrypt tcp data through custom encryption and tls standard encryption and kcp protocol on top of tcp. It can also be used before custom encryption.
Compress the data, that is, the compression function and the custom encryption and tls|kcp can be used in combination, and the compression is divided into two parts.
Part of it is local (-m) compression transmission, and part is whether the transmission with the upstream (-M) is compressed.
Compression requires both sides to be proxy, and compression also protects (encrypts) data to some extent.
The following two levels, three levels for example:
Secondary instance
Execute on level 1 vps (ip: 2.2.2.2):
proxy sps -t tcp -m -p :7777
Local secondary execution:
proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through compression with the upstream.
Three-level instance
Execute on level 1 vps (ip: 2.2.2.2):
proxy sps -t tcp -m -p :7777
Execute on the secondary vps (ip: 3.3.3.3):
proxy sps -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
Local three-level execution:
proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through compression with the upstream.
By default, SPS supports http(s) and socks5 two proxy protocols. We can disable a protocol by parameter.
例えば:
Disable the HTTP(S) proxy function to retain only the SOCKS5 proxy function, parameter: --disable-http
.
proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 --disable-http
Disable the SOCKS5 proxy function to retain only the HTTP(S) proxy function, parameter: --disable-socks
.
proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 --disable-socks
Suppose there is a SOCKS5 upstream:
proxy socks -p 2.2.2.2:33080 -z password -t tcp
SPS lower level, speed limit 100K
proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp -p :33080
It can be specified by the -l
parameter, for example: 100K 2000K 1M . 0 means no limit.
The --bind-listen
parameter can be used to open the client connection with the portal IP, and use the portal IP as the outgoing IP to access the target website. If the ingress IP is an intranet IP, the egress IP does not use the ingress IP.
proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp --bind-listen -p :33080
Although the above --bind-listen
parameter can specify the outgoing IP, the entry IP
and outgoing IP
cannot be interfered by humans. If you want the ingress IP to be different from the egress IP, you can use the --bind-ip
parameter, format: IP:port
, for example: 1.1.1.1:8080
, [2000:0:0:0:0:0:0:1]:8080
. For multiple binding requirements, you can repeat the --bind-ip
parameter.
For example, the machine has IP 5.5.5.5
, 6.6.6.6
, and monitors two ports 8888
and 7777
, the command is as follows:
proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
Then the client access port 7777
, the outgoing IP is 5.5.5.5
, access port 8888
, the outgoing IP is 6.6.6.6
, if both --bind-ip
and --bind- are set at the same time listen
, --bind-ip
has higher priority.
In addition, the IP
part of the --bind-ip
parameter supports specifying the network interface name
, wildcards
, and more than one. The details are as follows:
--bind-ip eth0:7777
, then the client accesses the 7777
port, and the egress IP is the IP of the eth0 network interface.--bind-ip eth0.*:7777
, then the client accesses the 7777
port, and the egress IP is a randomly selected one of the network interface IPs starting with eth0.
.--bind-ip 192.168.?.*:7777
, then the client accesses the 7777
port, and the outgoing IP is all the IPs of the machine, matching the IP of 192.168.?.*
A randomly selected one.--bind-ip pppoe??,192.168.?.*:7777
, then the client accesses the port 7777
, The outgoing IP is the machine's network interface name matching pppoe??
It is a randomly selected one among all IPs of the machine that matches 192.168.?.*
.*
represents 0 to any number of characters, and ?
represents 1 character.--bind-refresh
parameter to specify the interval to refresh the local network interface information, the default is 5
, the unit is second.By default, the -C, -K parameter is the path to the crt certificate and the key file.
If it is the beginning of base64://, then the latter data is considered to be base64 encoded and will be used after decoding.
A sps port can complete the full-featured proxy httpsocksss
function.
The following command is to open the http(s)sssocks service with one click, and enable the udp of socks5 and the udp of ss at the same time.
proxy sps -p: 33080 --ssudp --udp --udp-port 0
The https(s)socks5ss proxy function provided by the sps function, the client connects to the specified "target" through the sps proxy. This "target" is generally a website or an arbitrary tcp address.
The website "target" is generally foo.com: 80, foo.com: 443, sps supports the use of the --rewrite parameter to specify a "target" redirection rule file, redirect the target, the client is non-perceived,
For example, if you redirect to "target": demo.com:80 to 192.168.0.12:80, then the client visits the website demo.com, in fact, the website service provided by 192.168.0.12.
Example of a "target" redirection rule file:
# example
Www.a.com:80 10.0.0.2:8080
**.b.com:80 10.0.0.2:80
192.168.0.11:80 10.0.0.2:8080
When sps is an independent service, an additional local socks5 service will be opened to occupy a random port. Now the parameter --self-port
can be manually specified when needed. The default is 0 to use random.
By default, the port number of the UDP function of ss's socks5 is specified by the rfc1982 draft
. It is randomly specified during the protocol handshake process and does not need to be specified in advance.
However, in some cases, you need to fix the UDP function port. You can fix the port number of the UDP function by the parameter --udp-port port_number
, for example:
proxy sps -t tcp -p "0.0.0.0:38080" --udp-port 38081
It should be noted that the ss function of sps also has UDP function, and the UDP port of ss is the same as the tcp port, so avoid the conflict between the UDP port of socks5 and the UDP port of ss.
To specify a port that is different from the tcp port.
The sps mode supports the iptables transparent forwarding support of the Linux system, which is commonly referred to as the iptables transparent proxy. If a iptables transparent proxy is performed on the gateway device, the device that is connected through the gateway can realize a non-aware proxy.
Example start command:
proxy sps --redir -p :8888 -P httpws: //1.1.1.1:33080
Here it is assumed that there is an http superior proxy 1.1.1.1:33080, which uses ws to transmit data.
Then add iptables rules, here are the reference rules:
# upstream proxy server IP address:
proxy_server_ip = 1.1.1.1
# Router running proxy listening port:
proxy_local_port = 33080
# There is no need to modify the following
# create a new chain named PROXY
iptables -t nat -N PROXY
# Ignore your PROXY server's addresses
# It's very IMPORTANT, just be careful。
iptables -t nat -A PROXY -d $proxy_server_ip -j RETURN
# Ignore LANs IP address
iptables -t nat -A PROXY -d 0.0.0.0/8 -j RETURN
iptables -t nat -A PROXY -d 10.0.0.0/8 -j RETURN
iptables -t nat -A PROXY -d 127.0.0.0/8 -j RETURN
iptables -t nat -A PROXY -d 169.254.0.0/16 -j RETURN
iptables -t nat -A PROXY -d 172.16.0.0/12 -j RETURN
iptables -t nat -A PROXY -d 192.168.0.0/16 -j RETURN
iptables -t nat -A PROXY -d 224.0.0.0/4 -j RETURN
iptables -t nat -A PROXY -d 240.0.0.0/4 -j RETURN
# Anything to port 80 443 should be redirected to PROXY's local port
iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports $proxy_local_port
# Apply the rules to nat client
iptables -t nat -A PREROUTING -p tcp -j PROXY
# Apply the rules to localhost
iptables -t nat -A OUTPUT -p tcp -j PROXY
By default, the UDP functionality of the SOCKS5 proxy in the proxy operates in accordance with the SOCKS5 RFC 1928 specification. However, there are certain SOCKS5 clients that do not adhere to the specified rules. To ensure compatibility with such clients, the --udp-compat
parameter can be added to activate the compatibility mode for SOCKS5 UDP functionality.
Additionally, the -udp-gc
parameter can be utilized to set the maximum idle time for UDP. When this time threshold is exceeded, UDP connections will be released.
The --dns-address
and --dns-ttl
parameters are used to specify the dns used by the proxy to access the domain name ( --dns-address
) As well as the number of seconds for caching the parsing results (--dns-ttl) to avoid the interference of the system dns on the proxy. The additional caching function can also reduce the dns parsing time and improve the access speed. Translation: Agent sps -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
You can also use the parameter --dns-interface
to specify the bandwidth used for dns resolution, for example: --dns-interface eth0
, dns resolution will use the eth0 bandwidth, this parameter must be set to --dns-address
to be effective.
proxy help sps
Many functions of the proxy support the kcp protocol. Any function that uses the kcp protocol supports the configuration parameters described here.
Therefore, the KCP configuration parameters are introduced here.
There are a total of 17 KCP configuration parameters, you can not set them, they have default values, if for the best effect,
You need to configure the parameters according to your own network conditions. Because the kcp configuration is complex, it requires a certain network basics.
If you want to get more detailed configuration and explanation of kcp parameters, please search for yourself. The command line name for each parameter, along with the default values and simple function descriptions are as follows:
--kcp-key="secrect" pre-shared secret between client and server
--kcp-method="aes" encrypt/decrypt method, can be: aes, aes-128, aes-192, salsa20, blowfish,
Twofish, cast5, 3des, tea, xtea, xor, sm4, none
--kcp-mode="fast" profiles: fast3, fast2, fast, normal, manual
--kcp-mtu=1350 set maximum transmission unit for UDP packets
--kcp-sndwnd=1024 set send window size(num of packets)
--kcp-rcvwnd=1024 set receive window size(num of packets)
--kcp-ds=10 set reed-solomon erasure coding - datashard
--kcp-ps=3 set reed-solomon erasure coding - parityshard
--kcp-dscp=0 set DSCP(6bit)
--kcp-nocomp disable compression
--kcp-acknodelay be carefull! flush ack immediately when a packet is received
--kcp-nodelay=0 be carefull!
--kcp-interval=50 be carefull!
--kcp-resend=0 be carefull!
--kcp-nc=0 be carefull! no congestion
--kcp-sockbuf=4194304 be carefull!
--kcp-keepalive=10 be carefull!
ヒント:
Parameters: -- four fast3, fast2, fast, normal modes in kcp-mode,
Equivalent to setting the following four parameters:
Normal: --nodelay=0 --interval=40 --resend=2 --nc=1
Fast : --nodelay=0 --interval=30 --resend=2 --nc=1
Fast2: --nodelay=1 --interval=20 --resend=2 --nc=1
Fast3: --nodelay=1 --interval=10 --resend=2 --nc=1
DNS is known as the service provided by UDP port 53, but with the development of the network, some well-known DNS servers also support TCP mode dns query, such as Google's 8.8.8.8, the DNS anti-pollution server principle of the proxy is to start a proxy DNS proxy locally. Server, which uses TCP to perform dns query through the upstream agent. If it communicates with the upstream agent, it can perform secure and pollution-free DNS resolution. It also supports independent services, concurrent parsing, and enhanced enhanced hosts file function to support flexible concurrent parsing and forwarding.
Dns resolution order:
ヒント:
The host file format specified by the --hosts parameter is the same as the system hosts file, and the domain name supports wildcards. You can refer to the hosts file.
The parsing forwarding rule file specified by the --forward parameter can be referenced to the resolve.rules file. The domain name supports wildcards. It supports multiple dns servers for each domain name to be parsed concurrently. Whoever resolves the fastest resolution will use the resolution result.
The -q parameter can specify multiple remote dns servers to perform concurrent parsing. Whoever resolves the fastest parsing success, the default is: 1.1.1.1, 8.8.8.8, 9.9.9.9, multiple comma-separated,
For example, you can also bring ports: 1.1.1.1, 8.8.8.8#53, 9.9.9.9
If you are a standalone service, you don't need a upstream:
Can perform:
proxy dns --default system -p :5353
またはproxy dns --default direct -p :5353
Suppose there is a upstream agent: 2.2.2.2:33080
Local execution:
proxy dns -S http -T tcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides DNS resolution.
Suppose there is a upstream agent: 2.2.2.2:33080
Local execution:
proxy dns -S socks -T tcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides DNS resolution.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy http -t tls -C proxy.crt -K proxy.key -p :33080
Local execution:
proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy socks -t tls -C proxy.crt -K proxy.key -p :33080
Local execution:
proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy http -t kcp -p :33080
Local execution:
proxy dns -S http -T kcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy socks -t kcp -p :33080
Local execution:
proxy dns -S socks -T kcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy http -t tcp -p :33080 -z password
Local execution:
proxy dns -S http -T tcp -Z password -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy socks -t kcp -p :33080 -z password
Local execution:
proxy dns -S socks -T tcp -Z password -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
The proxy's http(s)/socks5/sps proxy function supports user-to-agent access via the API.
user
or client ip
or server port
. The proxy's http(s)/socks5/sps proxy API function is controlled by three parameters: --auth-url
and --auth-nouser
and --auth-cache
.
The parameter --auth-url
is the HTTP API interface address. When the client connects, the proxy will request the url in GET mode, with the following parameters. If the HTTP status code 204 is returned, the authentication is successful. In other cases, the authentication fails.
An example of a complete request API:
http://test.com/auth.php?user=a&pass=b&client_addr=127.0.0.1:49892&local_addr=127.0.0.1:8100&target=http%3A%2F%2Fwww.baidu.com&service=http&sps=0
user and pass
When the proxy turns on authentication, here is the username and password provided by the client.
client_addr
The address used by the client to access the proxy, format IP: port.
local_addr
The proxy address accessed by the client, format IP: port.
service
Proxy type, divided into: http, socks.
Whether the sps
proxy is provided by sps, 1: yes, 0: no.
target
The target to be accessed by the client. If it is an http(s) proxy, the target is the specific url accessed; if it is a socks5 proxy, the target is empty.
Suppose --auth-url http://127.0.0.1:333/auth.php points to a php interface address.
The contents of auth.php are as follows:
<?php
#all users and password
$ alluser =[
" user1 " => " pass1 " ,
" user2 " => " pass2 " ,
" user3 " => " pass3 " ,
" user4 " => " pass4 " ,
];
$ proxy_ip = $ _GET [ ' local_addr ' ];
$ user_ip = $ _GET [ ' client_addr ' ];
$ service = $ _GET [ ' service ' ];
$ is_sps = $ _GET [ ' sps ' ]== ' 1 ' ;
$ user = $ _GET [ ' user ' ];
$ pass = $ _GET [ ' pass ' ];
$ target = $ _GET [ ' target ' ];
//business checking
//....
$ ok = false ;
foreach ( $ alluser as $ dbuser => $ dbpass ) {
if ( $ user == $ dbuser && $ pass == $ dbpass ){
$ ok = true ;
break ;
}
}
//set the authentication result
if ( $ ok ){
header ( " userconns:1000 " );
header ( " ipconns:2000 " );
header ( " userrate:3000 " );
header ( " iprate:8000 " );
header ( " userqps:5 " );
header ( " ipqps:2 " );
header ( " upstream:http://127.0.0.1:3500?parent-type=tcp " );
header ( " outgoing:1.1.1.1 " );
header ( " userTotalRate:1024000 " );
//header("ipTotalRate:10240");
//header("portTotalRate:10240");
//header("RotationTime:60");
header ( " HTTP/1.1 204 No Content " );
}
userconns
: The maximum number of connections for the user, not limited to 0 or not set this header.
ipconns
: The maximum number of connections for the user IP, not limited to 0 or not set this header.
userrate
: User's single TCP connection rate limit, in bytes/second, is not limited to 0 or does not set this header.
iprate
: The single TCP connection rate limit of the client IP, in bytes/second, not limited to 0 or not set this header.
userqps
: The maximum number of connections per second (QPS) for the user, not limited to 0 or not set this header.
ipqps
: The maximum number of connections per second (QPS) for the client IP, not limited to 0 or not set this header.
upstream
: The upstream used, not empty, or not set this header.
outgoing
: The outgoing IP used. This setting is only effective when the upstream is empty. The IP set here must be owned by the machine where the proxy is located, otherwise, the proxy will not function properly. Starting from version v13.2
, outgoing
supports multiple subnet formats separated by commas. The proxy will randomly select an IP from the subnet as the outgoing IP. This randomness will also be keep when authentication cache is enabled. The following formats are supported for subnets:
192.168.1.1
, Description: Single IP, IPv43001:cb2::
, Description: Single IP, IPv6192.168.1.1/24
, Description: CIDR format subnet, IPv43001:cb2::/126
, Description: CIDR format subnet, IPv6192.168.1.1-192.168.1.200
, Description: IP range, IPv42311:ca2::-2311:ca2::10
, Description: IP range, IPv6 Example: 192.16.1.1,192.161.1.2,192.168.1.2-192.168.1.255
userTotalRate
: Limit the user
total bandwidth speed (bytes per second), unit is byte, not limited to 0 or not set this header.
ipTotalRate
:Limit the client ip
total bandwidth speed (bytes per second), unit is byte, not limited to 0 or not set this header.
portTotalRate
:Limit the server port
total bandwidth speed (bytes per second), unit is byte, not limited to 0 or not set this header.
RotationTime
: (requires version >= v13.2)
Controls the time interval, in seconds, for randomly selecting the outgoing IP. Leave it blank or unset this header if not needed.When the outgoing returned by the API is a subnet, and if you don't want the proxy to randomly select a new IP for each client connection, you can use this parameter to control the time interval for random IP selection. If within the interval period, the previously selected IP will be used. If the API does not return the RotationTime
header or if RotationTime
is set to 0, the proxy will randomly select an IP from the outgoing subnet as the outgoing IP for each client connection.
userrate
、 iprate
and userTotalRate
、 ipTotalRate
、 portTotalRate
can be set at same time, for example: set userrate
with 1024000 to limit the user's total bandwidth speed to 1M/s of user's all tcp connections. And set userrate
with 102400 to limit the user one tcp connection speed to 100K/s.userTotalRate
、 ipTotalRate
、 portTotalRate
set at same time, the valid order is : userTotalRate
-> ipTotalRate
-> portTotalRate
userTotalRate
、 portTotalRate
set at same time, and set --auth-nouser
,all clients that not send username will be as an "empty username" user,they are using a same limiter. --auth-url
is required to provide the user name and password. If you do not need the client to provide the username and password, and authenticate, you can add --auth-nouser
. The visit will still access the authentication address --auth-url
for authentication. Only the $user authentication username and the $pass authentication password received in the php interface are empty when client didn't send username and password.--auth-cache
authentication cache, cache the authentication result for a certain period of time, improve performance, reduce the pressure on the authentication interface, --auth-cache unit seconds, default 0, set 0 to close the cache.--auth-cache
only caches the results of successful authentication and does not cache the results of failed authentication. If you need to cache the failed authentication results for a certain period of time, It can be set through the parameter -auth-fail-cache
to improve performance and reduce the pressure on the authentication interface. The unit of --auth-fail-cache is seconds. The default is 0. Setting 0 turns off the cache. sps
is 0.http://127.0.0.1:3100?argk=argv
socks5://127.0.0.1:3100?argk=argv
Explanation: http://
, socks5://
is fixed, 127.0.0.1:3100
is the address of the upstream
When sps
is 1.
Upstream supports socks5, http(s) proxy, support authentication, format: protocol://a:[email protected]:33080?argk=argv
, please refer to SPS chapter for details, multiple upstreams , the description of the -P
パラメータ。
Parameters, ?
followed by argk=argv
are parameters: parameter name = parameter value, multiple parameters are connected with &
.
All the supported parameters are as follows, and the meaning of the command line with the same name is the same.
4.Upstream supports multiple instances, regardless of whether SPS is 1 or 0, and they are separated by semicolons ;. When connecting to an upstream, by default, one upstream is randomly chosen. However, it supports setting the weight parameter for each upstream. If the weight is set for any upstream, all upstreams must have the weight parameter set. The weight must be greater than 0; otherwise, the weight is considered invalid, and random selection is applied. This selection logic is also working after the authentication cache is有効になりました。
Examples of multiple upstreams:
http://127.0.0.1:3100?argk=argv;http://127.0.0.2:3100?argk=argv
http://127.0.0.1:3100?argk=argv&weight=10;http://127.0.0.2:3100?argk=argv&weight=20
Weight selection logic:
When a weight is set for an upstream, it divides the total weight among the upstreams based on their order. For example, if there are two upstreams with weights 10 and 20 respectively, the total weight is 30. The first upstream's weight range is 1-10, and the second upstream's weight range is 11-30. This logic extends to more upstreams. Each time, a random number within the total weight range is chosen, and the corresponding upstream is selected based on this number's range.
The proxy's http (s) / socks5 / sps / tcp / udp proxy function supports traffic reporting. You can set an http interface address through the parameter --traffic-url
. The proxy will report the traffic used for this connection to this address.Specifically, the proxy sends an HTTP to GET request to the HTTP URL address set by --traffic-url
. There are two reporting modes, which can be specified by the --traffic-mode
parameter. It can be reported in the normal mode or in the fast mode.
Report in normal
normal mode
When the connection is released, the proxy will report the traffic used for this connection to this --traffic-url
address.
Report in fast
mode
For each connection that has been established, the proxy will timely
report the traffic generated by this connection to this --traffic-url
address.
Timing
defaults to 5 seconds, and you can modify Timing
to the appropriate number of seconds via the parameter --traffic-interval
.
Report in fast
global mode
By default, if the API can't handle high concurrency report access, you can use the fast global mode, Use the parameter --fast-global
to open, this parameter is only valid when --traffic-mode=fast
. In fast global mode, for a --traffic-url
, no matter how many concurrent connections there are, only have one reporter, and the reporting interval is 5 seconds. In this mode, the reporting request method is POST
, Content-Type
is application/json
, the post body data is JSON Array
, example: [{},{}]
, the keys of object in the array are same with the following Reqeust parameter description
.
The traffic reporting function combined with the above API authentication function can control the user's traffic usage in real time. The traffic is reported to the interface. The interface writes the traffic data to the database, and then the authentication API queries the database to determine the traffic usage and determine whether the user can be successfully authenticated.
The following is a complete URL request example:
http://127.0.0.1:33088/user/traffic?bytes=337&client_addr=127.0.0.1%3A51035&id=http&server_addr =127.0.0.1%3A33088&target_addr=myip.ipip.net%3A80&username=a
Request parameter description:
id
: service id flag.
server_addr
: proxies's address requested by the client, format: IP: port.
client_addr
: client address, format: IP: port.
target_addr
: target address, format: "IP: port", when tcp / udp proxy, this is empty.
username
: proxy authentication user name, this is empty when tcp / udp proxy.
bytes
: the number of traffic bytes used by the user.
out_local_addr
: outgoing tcp connection's local address,format: IP: port.
out_remote_addr
: outgoing tcp connection's remote address,format: IP: port.
upstream
: upstream used by outgoing tcp connection, if none upstream be used, it's empty.
The --traffic-url
URL must respond the HTTP status code 204
Only when the traffic is reported will the report be considered successful, and if it responds other status codes, it will be considered that the reported traffic failed, and the log will出力される。
The proxy's http (s) / socks5 / sps proxy function supports a control interface, which can be specified by the parameter --control-url http interface address, Then the proxy will interval send all the usernames or client IPs currently connected to the proxy to this URL. Specifically, the proxy sends an HTTP to POST request to the HTTP URL address set by --control-url.
interval
defaults to 30 seconds, this value can be modified via the --control-sleep parameter.
When the user expires, or the user's traffic has been used up, the authentication API can only control the user cannot create a new connection, but the connection with the proxy has been established and the connection cannot be immediately disconnected. Then this problem can be solved through the control interface. The control interface will return the content through the control interface in the slowest interval
time, and the end is invalid when the user establishes the connection.
An HTTP POST request will be sent to the control. The interface form
has three fields: interface, ip, conns, and the conns
field requires a user whose proxy version is greater than proxy 12.2
.
user
The username currently connected to the agent, multiple separated by commas, for example: user1, user2
ip
The client IP is connected to the proxy, and multiple clients using English are split addresses, for example: 1.1.1.1, 2.2.2.2
conns
The tcp connection information currently connecting to the proxy port to transmit data. The conns value is a json string, the format is a sequence of connections, the element is an object, the object contains the details of the connection, conns format: [{"id":"ab7bf1f10501d6f7","client":"127.0.0.1:62112","server":"127.0.0.1:9092","user":""}]
Object field description: id: connection id, client: client's unique IP address and port, server: client's IP and no port access, user's connection authentication (null if any)
The data returned by the control interface is invalid user and IP or connection. The format is a json object data. There are three fields user, ip, and conns. The conns
field requires the proxy version greater than or equal to 12.2
. Format: {"user":"a,b","ip":"",conns:["ab7bf1f10501d6f7","cb7bf1f10501d6f7"]}
user
: The username currently connected to the proxy, multiple separated by commas, not left blank, for example: user1, user2
ip
: The ip address of the client currently connected to the proxy, multiple separated by commas, not left blank, for example: 1.1.1.1, 2.2.2.2
conns
: is an array, the element is a connection id, this id is the id field of the connection object in conns in the above Request Description
.
導入:
user
or IP
authentication cache will be cleared. Suppose --control-url http://127.0.0.1:33088/user/control.php
points to a PHP interface address. The content of control.php is as follows:
<?php
#revcieve proxy post data
$ userArr = explode ( " , " , $ _POST [ ' user ' ]);
$ ipArr = $ _GET [ ' ip ' ];
//invalid users array
$ badUsers =[];
foreach ( $ userArr as $ user ) {
//logic business, push invalid user into $badUsers
$ badUsers []= $ user ;
}
$ data =[ " user " => implode ( " , " $ badUsers), " ip " => "" , " conns " =>[]];
echo json_encode ( $ data );
The proxy http(s)/socks5/sps proxy function supports the user to access the proxy pair through the configuration file, and supports the http(s) proxy ``Proxy Basic proxy authentication` and the socks5 proxy authentication.
The proxy's http(s)/socks5/sps proxy function can pass
--auth-file
, --max-conns
, --ip-limit
, --rate-limit
, -a
These five parameters control.
--auth-file
The authenticated user name and password file. This parameter specifies a file, one line per rule, in the format: "username: password: number of connections: rate: upstream".
Connection number
is the maximum number of connections for the user. The 'rate' is the maximum speed of each tcp connection of the user. The unit is: byte/second. The upper level is the upper level used by the user.
Not only can the authenticated user be set by --auth-file
, but also the -a
parameter can be set directly. Multiple users can repeat multiple -a
parameters.
For example: proxy http -aa:b:0:0: -ac:d:0:0:
Example explanation:
For example: user:pass:100:10240:http://192.168.1.1:3100
user
is the authentication username
pass
is the authentication user password (cannot contain a colon:)
100
is the maximum number of connections for this user, not limited to write 0
10240
is the rate limit of this user's single tcp connection, the unit is: byte / sec, no limit write 0
http://192.168.1.1:3100
is the upstream used by this user, no space is left blank
--max-conns
Limit the maximum number of global connections for the proxy service, a number, 0 is unrestricted, default is 0.
--ip-limit
Controls the number of connections and connection rate of the client IP. This parameter specifies a file, one rule per line, and the beginning of # is gaze.
The sample file ip.limit, the rule format is as follows:
127.0.0.1:100:10240:http://192.168.1.1:3100
Rule interpretation:
127.0.0.1
is the IP to be restricted
100
is the maximum number of connections for this IP, not limited to write 0
10240
is the rate limit of IP single tcp connection, the unit is: byte / s, no limit write 0
http://192.168.1.1:3100
is the upstream used by this IP, and it is not left blank.
--rate-limit
Limit the speed of each tcp connection of the service, for example: 100K 2000K 1M . 0 means unlimited, default 0.
The proxy supports the cluster management. The proxy is installed on each machine node as an agent, with the control panel [ proxyadmin cluster edition
] (https://github.com/snail007/proxy-admin-cluster) Unified management of proxy services on massive machines.
If the proxy is to be run as an agent, assume that the cluster port address of the control panel is: 1.1.1.1: 55333
.
The command example is as follows:
proxy agent -k xxx -c 1.1.1.1:55333 -i test
Command explanation:
agent: is a function parameter, which means running agent mode.
-k : The encryption and decryption key for communication with proxyadmin cluster edition
. This key is set in the configuration file of proxyadmin cluster edition
.
-c : The cluster port address of proxyadmin cluster edition
, format: IP:port.
-i : The unique identifier of the agent ensures that each agent is different. The "unique identifier" specified here is used when adding a node to the control panel. The IP is filled with this "unique identifier". If -i is not specified, the default is empty, and the control panel adds the IP field to fill in: the agent's internet IP.
-u: proxy parameter, empty by default. You can specify an agent, and the agent will communicate with the cluster through this agent.
The format is the same as that of --jumper
. For details, please refer to the --jumper
part of the manual.
知らせ:
When the client service is configured in the control panel, all nodes use the same key, which leads to only one client working. To solve this problem, Client service parameters can use placeholders: {AGENT_ID}
to refer to the agent's id as the client's key, so as to ensure that each client has a unique key.
For example, client service parameters:
client -T tcp -P 1.1.1.1:30000 --k {AGENT_ID}
The proxy can reverse proxy http and https websites.
The supported features are as follows:
Example, configure file: rhttp.toml
。
proxy rhttp -c rhttp.toml
For detail usage, please refer to the configuration file rhttp.toml, which has a complete configuration description.