How are Bitcoin Core GUI nodes properly connected and disconnected in regtest mode? I'm trying to set up a private Bitcoin network using Bitcoin Core in regtest mode. However, there are two problems:


the port reported by the Bitcoin Core GUI doesn't match the one the node is running at; and
when a peer is disconnected (or even banned) it re-connects automatically.


Here's what I did. I create two folders, alice and bob. I then launch the GUI from the OSX Terminal:

# start Alice node
$ open -n /Applications/Bitcoin-Qt.app --args -regtest -datadir=/Users/{username}/Desktop/alice/ -port=18444

# start Bob node
$ open -n /Applications/Bitcoin-Qt.app --args -regtest -datadir=/Users/{username}/Desktop/bob/ -port=18445


From Alice's Console, I do:

addnode 127.0.0.1:18445 add


This creates a connection to both nodes.

I want to disconnect both nodes from each other.

From Alice's Console, I use:

addnode 127.0.0.1:18445 remove


On Alice's node, the peer is:

127.0.0.1:18445

However, on Bob's node, the peer is

127.0.0.1:57594

but I expect it to be:

127.0.0.1:18444

I try to remove Bob's node from Alice with:

addnode 127.0.0.1:18445 remove

Console returns null but doesn't remove the node.

When I try this from Alice's node:

addnode 127.0.0.1:57549 remove

I get Error: Node has not been added. (code -24)

I then try to disconnect Bob's node from Alice's node using the the Peers tab. Right click on peer (Bob) and choose disconnect.

The node is disconnected for about 45 seconds, then reconnects.

To summarize, I have two questions:


Why doesn't the port number on Bob's node match the port number I gave it?
How can I keep regtest nodes permanently disconnected for arbitrary periods of time and then reconnect them?
I want to disconnect both nodes from each other.
  
  From Alice's Console, I use:

addnode 127.0.0.1:18445 remove



This is incorrect. This command will only remove Bob's node from the list of addnode'd peers. The correct command to actually disconnect Bob's node is

disconnectnode "127.0.0.1:18445"



  On Alice's node, the peer is:
  
  127.0.0.1:18445
  
  However, on Bob's node, the peer is
  
  127.0.0.1:57594
  
  but I expect it to be:
  
  127.0.0.1:18444


Outbound connections are not made from the P2P port. Rather a random high numbered port is chosen to bind to and the outbound connection is made from there. IIRC this is done by the kernel and not the software itself. This behavior is standard for most software that make outbound connections.


  I then try to disconnect Bob's node from Alice's node using the the Peers tab. Right click on peer (Bob) and choose disconnect.
  
  The node is disconnected for about 45 seconds, then reconnects.


A connection is still being made because you did not remove the other node from both nodes (i.e. one node still has the other one in its peers database).

The proper way to do this would be to use the onetry option as that means that the node is not actually added to the peers database but rather tried once. To disconnect, you should be using the disconnectnode command.