3

別々のボックスで実行されている 2 つのノードを接続するのに苦労しています。Cookie の同期、DNS、またはファイアウォールに通常の問題がないことを確認しようとしました。

まず、Erlang のドキュメントで推奨されているように、デバッグ モードで epmd を実行します。

epmd -d -d

ボックス #1:
erl -name xmpp1@server1.net -kernel inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie

ボックス #2:
erl -name xmpp2@server2.net -kernel inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie

ping はうまくいきません。たとえば、ボックス #2 では次のようになります。

Erlang (BEAM) emulator version 5.6.4 [source] [64-bit] [smp:4] [async-threads:0] [kernel-poll:false] Eshell V5.6.4 (abort with ^G)
(xmpp2@server2.net)1> net_adm:ping('xmpp1@server1.net').
pang

server1.net の epmd は次のように表示されます。

epmd: Sun Sep 12 01:40:32 2010: opening connection on file descriptor 6
epmd: Sun Sep 12 01:40:32 2010: got 8 bytes
***** 00000000 00 06 7a 78 6d 70 70 31 |..zxmpp1|
epmd: Sun Sep 12 01:40:32 2010: ** got PORT2_REQ
epmd: Sun Sep 12 01:40:32 2010: got 18 bytes
***** 00000000 77 00 17 70 4d 00 00 05 00 05 00 05 78 6d 70 70 |w..pM.......xmpp|
***** 00000010 31 00 |1.|
epmd: Sun Sep 12 01:40:32 2010: ** sent PORT2_RESP (ok) for "xmpp1"
epmd: Sun Sep 12 01:40:32 2010: closing connection on file descriptor 6

つまり、2 番目のノードから ping 要求を受信し、ok で応答するように見えます。

Tshark が epmd ポート (TCP 4369) をリッスンすると、次のようになります (実際の IP をサーバー名に置き換えました)。

1 0.000000 server2.net -> server1.net TCP 43809 > epmd [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=776213773 TSER=0 WS=5
2 0.000433 server1.net -> server2.net TCP epmd > 43809 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSV=1595930818 TSER=776213773 WS=6
3 0.000483 server2.net -> server1.net TCP 43809 > epmd [ACK] Seq=1 Ack=1 Win=5856 Len=0 TSV=776213773 TSER=1595930818
4 0.000545 server2.net -> server1.net EPMD 43809 > epmd [PSH, ACK] Seq=1 Ack=1 Win=5856 Len=8 TSV=776213773 TSER=1595930818
5 0.001445 server1.net -> server2.net TCP epmd > 43809 [ACK] Seq=1 Ack=9 Win=5824 Len=0 TSV=1595930818 TSER=776213773
6 0.001466 server1.net -> server2.net EPMD epmd > 43809 [PSH, ACK] Seq=1 Ack=9 Win=5824 Len=18 TSV=1595930818 TSER=776213773
7 0.001474 server2.net -> server1.net TCP 43809 > epmd [ACK] Seq=9 Ack=19 Win=5856 Len=0 TSV=776213773 TSER=1595930818
8 0.001481 server1.net -> server2.net TCP epmd > 43809 [FIN, ACK] Seq=19 Ack=9 Win=5824 Len=0 TSV=1595930818 TSER=776213773
9 0.001623 server2.net -> server1.net TCP 43809 > epmd [FIN, ACK] Seq=9 Ack=20 Win=5856 Len=0 TSV=776213773 TSER=1595930818
10 0.001990 server1.net -> server2.net TCP epmd > 43809 [ACK] Seq=20 Ack=10 Win=5824 Len=0 TSV=1595930818 TSER=776213773

したがって、epmd インスタンスが相互に通信するため、ファイアウォールの問題はないように見えます。私は何が欠けていますか?

あなたのアドバイスは大歓迎です!

敬具、ボリス

4

2 に答える 2

1

私はerlangの初心者でもあります

私の最初のいくつかの実験は、絶対 IP アドレスをバインドするものでした。

  1. Erl -name coder@192.168.1.2 -setcookiesuismadness
  2. Erl -name Damum@192.168.1.3 -setcookiesuismadness

インターネット経由で接続している場合は、ルーター (アプリ ポート) + epmd ポートで inet_dist_listen_min と inet_dist_listen_max で指定されたポートを開いていることを確認してください。

Server1 -> epmd と app ポート用に開いている router1 ポート Server2 -> epmd と app ポート用に開いている router2 ポート 名前空間を使用する前に、最初に IP アドレスでバインドしてください。

于 2014-11-27T09:09:46.357 に答える
0

ファイアウォールの問題であることが判明しました。正しい方向性を示してくれた Michael Santos に感謝します。ここで彼の答えをチェックしてください。

于 2010-09-12T16:28:20.440 に答える