<div dir="ltr"><div dir="ltr">> Validates the node name and the version number: <a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L772-L773" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L772-L773</a><div><br></div><div>Yes, this seems to be the answer.</div><div><br></div><div><br></div><div>Ok, what have I done:</div><div><br></div><div>1) I launch my server with hostname server.l:</div><div><br></div><div>master@server.l</div><div><br></div><div>2) I add this hostname to control tool:</div><div><br></div><div>  inet_db:set_lookup([file, dns]),<br>  inet_db:add_host({127,0,0,1}, ["server.l"]),<br></div><div><br></div><div>Now I can connect to master@server.l</div><div><br></div><div>Server admin can put any hostname that he wants, I do not depend on it anymore.</div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jun 28, 2019 at 4:16 PM Dániel Szoboszlay <<a href="mailto:dszoboszlay@gmail.com">dszoboszlay@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I'm not claiming the response to the challenge itself would be dependent on the node names. It is not.<div><br></div><div>What I'm trying to say, is that together with the challenge, in the same SEND_CHALLENGE message there are two more pieces of information: the protocol version and the node name.</div><div><br></div><div>Upon receiving the challenge (<a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L770" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L770</a>) the node that's trying to connect:</div><div><ul><li>Validates the node name and the version number: <a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L772-L773" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L772-L773</a></li><li>Only after this step will look at the challenge sent in the message: <a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L777" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L777</a></li><li>And calculate a challenge response at the place you identified: <a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L447" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L447</a></li></ul><div>So the recv_challenge/1 function is where the connection attempt fails if there's a mismatch in the node names. And that's what you originally asked: where does this check happen, what prevents us from connecting to a node with the wrong name (in the post-@ part)?</div></div><div><br></div><div>If you rewrite the handshake on your own, and omit this check, than fine, you can of course connect. But this is probably not a good thing to do, because you've just introduced some inconsistency into the cluster: the nodes will disagree on what their name is. That can cause a lot of problems, not in the distribution connection layer probably, but higher up in the application layer (e.g. you send the value of node() across to your peer and it will believe you're not talking about yourself, but a third, unknown node).</div><div><br></div><div>And as a side note, the is_allowed check has nothing to do with this problem. That's a rarely used feature where you can blacklist/whitelist nodes that are allowed to connect to you.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 28 Jun 2019 at 14:07, Max Lapshin <<a href="mailto:max.lapshin@gmail.com" target="_blank">max.lapshin@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I do not understand, what for to use words like "believe"<div><br></div><div>I've rewritten the handshake from scratch and I see that nodes send their names, but encryption digest does not use node name.</div><div><br></div><div><a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L447" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L447</a><br></div><div><br></div><div>Perhaps problem is here:</div><div><br></div><div><a href="https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L715" target="_blank">https://github.com/erlang/otp/blob/master/lib/kernel/src/dist_util.erl#L715</a><br></div><div><br></div><div>When we change node name, we can pass interconnect handshake, but do not allow to connect.</div></div>
</blockquote></div>
</blockquote></div>