2017-07-07 14 views
0

私のワークステーションは企業のプロキシの背後にあります。環境変数を設定していますが、aws-sdk以外はNodeJSで使用できます。 TCPコネクションのここダンプ:3ウェイハンドシェイクがクライアントよりも、[OK]を行くことAWS SDKは企業のプロキシの背後に接続できません

No.  Time   Source    Destination   Protocol Length Info 
    2 1.834143  105.103.15.106  105.103.82.47   TCP  74  54952 → 8080 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=497254718 TSecr=0 WS=128 
    3 1.836141  105.103.82.47   105.103.15.106  TCP  74  8080 → 54952 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=3399116010 TSecr=497254718 WS=128 
    4 1.836165  105.103.15.106  105.103.82.47   TCP  66  54952 → 8080 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=497254719 TSecr=3399116010 
    5 1.836779  105.103.15.106  105.103.82.47   TCP  310 54952 → 8080 [PSH, ACK] Seq=1 Ack=1 Win=29312 Len=244 TSval=497254719 TSecr=3399116010 
    6 1.838250  105.103.82.47   105.103.15.106  TCP  66  8080 → 54952 [ACK] Seq=1 Ack=245 Win=15616 Len=0 TSval=3399116012 TSecr=497254719 
20 123.670911  105.103.82.47   105.103.15.106  TCP  66  8080 → 54952 [FIN, ACK] Seq=1 Ack=245 Win=15616 Len=0 TSval=3399237839 TSecr=497254719 
21 123.674168  105.103.15.106  105.103.82.47   TCP  66  54952 → 8080 [FIN, ACK] Seq=245 Ack=2 Win=29312 Len=0 TSval=497285178 TSecr=3399237839 
22 123.676592  105.103.82.47   105.103.15.106  TCP  66  8080 → 54952 [ACK] Seq=2 Ack=246 Win=15616 Len=0 TSval=3399237843 TSecr=497285178 

お知らせが(IP 106に終了)パッケージ番号5に(PSH、ACK)いくつかのデータを送信し、すぐに、proxy'をreceiveis s ACK(パケット番号6)。その後、長期間の通信がない(7と19の間のパッケージはこのtcpの会話からのものではない)、パケット20はFIN(パッケージが送信されないためのプロキシタイムアウト)である。この会話はexample provided by Amazonによって生成されました。

ノードのバージョン:今日インストール6.10、6.11.0および8.1.3 SDKでテスト(2.82.0)

比較として、私は、同じUbuntuマシンでaws cloudformatin describe-stack-resources --stack-name my-stackを実行します。知られている、aws CLIのpythonであるため、コマンドがOKで実行され、会話のような行く:1から3までのパケットは三方ハンドシェイクとJS SDKとまったく同じであることを

No.  Time   Source    Destination   Protocol Length Info 
    1 0.000000  105.103.15.106  105.103.82.47   TCP  74  54940 → 8080 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=496906305 TSecr=0 WS=128 
    2 0.001987  105.103.82.47   105.103.15.106  TCP  74  8080 → 54940 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=3397722434 TSecr=496906305 WS=128 
    3 0.002008  105.103.15.106  105.103.82.47   TCP  66  54940 → 8080 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=496906305 TSecr=3397722434 
    4 0.002100  105.103.15.106  105.103.82.47   TCP  127 [TCP segment of a reassembled PDU] 
    5 0.003967  105.103.82.47   105.103.15.106  TCP  66  8080 → 54940 [ACK] Seq=1 Ack=62 Win=14592 Len=0 TSval=3397722436 TSecr=496906306 
    6 0.003974  105.103.15.106  105.103.82.47   HTTP  68  CONNECT cloudformation.us-east-1.amazonaws.com:443 HTTP/1.0 
    7 0.006035  105.103.82.47   105.103.15.106  TCP  66  8080 → 54940 [ACK] Seq=1 Ack=64 Win=14592 Len=0 TSval=3397722438 TSecr=496906306 
    8 0.247802  105.103.82.47   105.103.15.106  HTTP  185 HTTP/1.0 200 Connection established 
    9 0.247810  105.103.15.106  105.103.82.47   TCP  66  54940 → 8080 [ACK] Seq=64 Ack=120 Win=29312 Len=0 TSval=496906367 TSecr=3397722681 
10 0.248938  105.103.15.106  105.103.82.47   TLSv1.2 583 Client Hello 
11 0.250985  105.103.82.47   105.103.15.106  TCP  66  8080 → 54940 [ACK] Seq=120 Ack=581 Win=15616 Len=0 TSval=3397722683 TSecr=496906367 
12 0.684003  105.103.82.47   105.103.15.106  TLSv1.2 1995 Server Hello 
13 0.684011  105.103.15.106  105.103.82.47   TCP  66  54940 → 8080 [ACK] Seq=581 Ack=2049 Win=33152 Len=0 TSval=496906476 TSecr=3397723117 
14 0.690001  105.103.82.47   105.103.15.106  TLSv1.2 1488 CertificateServer Key Exchange, Server Hello Done 
15 0.690866  105.103.15.106  105.103.82.47   TLSv1.2 216 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 
16 0.692974  105.103.82.47   105.103.15.106  TCP  66  8080 → 54940 [ACK] Seq=3471 Ack=731 Win=16640 Len=0 TSval=3397723125 TSecr=496906478 
17 0.968807  105.103.82.47   105.103.15.106  TLSv1.2 141 Change Cipher Spec, Encrypted Handshake Message 
18 0.969476  105.103.15.106  105.103.82.47   TLSv1.2 679 Application Data 
19 0.970992  105.103.82.47   105.103.15.106  TCP  66  8080 → 54940 [ACK] Seq=3546 Ack=1344 Win=17920 Len=0 TSval=3397723403 TSecr=496906547 
20 1.319977  105.103.82.47   105.103.15.106  TLSv1.2 617 Application Data 
21 1.324998  105.103.82.47   105.103.15.106  TCP  2114 [TCP segment of a reassembled PDU] 
22 1.325003  105.103.15.106  105.103.82.47   TCP  66  54940 → 8080 [ACK] Seq=1344 Ack=6145 Win=43008 Len=0 TSval=496906636 TSecr=3397723753 
23 1.329979  105.103.82.47   105.103.15.106  TLSv1.2 133 Application Data 
24 1.332987  105.103.15.106  105.103.82.47   TCP  66  54940 → 8080 [FIN, ACK] Seq=1344 Ack=6212 Win=43008 Len=0 TSval=496906638 TSecr=3397723763 
25 1.373825  105.103.82.47   105.103.15.106  TCP  66  8080 → 54940 [ACK] Seq=6212 Ack=1345 Win=17920 Len=0 TSval=3397723807 TSecr=496906638 
26 1.606041  105.103.82.47   105.103.15.106  TLSv1.2 119 Encrypted Alert 
27 1.606063  105.103.15.106  105.103.82.47   TCP  54  54940 → 8080 [RST] Seq=1345 Win=0 Len=0 

は注意してください、パケット4はパケット5に似ていますJS SDKのそれは要約には示されていませんが、PSHフラグとACKもあります。違いは内容(予想)で、パケット5はそのデータへのプロキシACKです。 aws ACKがパケット6に到着すると、CLIは次のパックを送信します。aws CLIはFINを送信し、ACKを受信し、アラートを暗号化し、RSTを送信します(これはEncrypt Alertが必要ではないためです) 。

JS SDKが最後のサーバーACKの後にデータを送信しない理由を見つけることができません。

{ NetworkingError: socket hang up 
at TLSSocket.onHangUp (_tls_wrap.js:1124:19) 
at TLSSocket.g (events.js:292:16) 
at emitNone (events.js:91:20) 
at TLSSocket.emit (events.js:185:7) 
at endReadableNT (_stream_readable.js:974:12) 
at _combinedTickCallback (internal/process/next_tick.js:80:11) 
at process._tickDomainCallback (internal/process/next_tick.js:128:9) 

メッセージ:アウトプロキシ時間とは、いつか後にFIN ACKを送って、私のノードのスクリプトは以下のエラーで中止されるまで長い間ハングするようですので、しかし、「NetworkingError」、 地域: コード、「ソケットハングアップ」 : 'us-west-2'、 ホスト名: 'bucket.s3-us-west-2.amazonaws.com'、 再試行可能:true、 時間:2017-07-07T19:31:29.494Z} null

手がかり?

答えて

2

出力を調べると、CLI接続は、hereのようにCONNECT(HTTPトンネリング)を使用していますが、NodeJS SDKコールはそうではないようです。 CONNECTタイプのプロキシを持つNodeJS SDKはちょっと変わったようです。私は残念ながら、私はそれは少なくともあなたにどのようにスタートを与えることを願っていますこれをテストするための環境のセットアップを持っていませんが

var AWS = require('aws-sdk'); 
var tunnel = require('tunnel'); 

var tunnelingAgent = tunnel.httpsOverHttp({ 
    proxy: { // Proxy settings 
    host: 'proxyhost', 
    port: 8080, 
    proxyAuth: "user:pass", 
    } 
}); 

AWS.config.update({ 
    httpOptions: { 
    agent: tunnelingAgent 
    } 
}); 

var s3 = new AWS.S3({region: 'us-west-2'}); 
s3.getObject({Bucket: 'bucket', Key: 'key'}, function (err, data) { 
    console.log(err, data); 
}); 

:私はこのような何かを与えることをnode-tunnelを使用して言及しbug on itを見ているお勧めします問題に近づく

+0

Good find。彼らが「CONNECT」をサポートしないことがどれほど奇妙であるか。アドオンモジュールhttps://www.npmjs.com/package/aws-sdk-proxyに言及して、バグレポートの最後のコメントに注目してください。 –

+0

まだ接続できませんが、プロキシとの会話には時間がかかります。私は調査を続けます。 @ Michael-sqlbot、aws-sdk-proxyは以前と同じ動作をしませんでした。 – JrBenito

+0

TunnelAgentはaws-sdkで動作します – JrBenito

関連する問題