Important update 10/14/2015:
It was my fault - my network was not good so some working methods may have been thought not working... I will keep my old answer, but it didn't seem correct - it failed after I rebooted both my minion and master.
What seems to work now is:
I put publish_port: 44505
in the file /etc/salt/master
on the master, so salt opens port 44505 on the master now. Then I changed the port mapping configuration on the router, to map the router's port 44505 to master's port 44505 (instead of 4505).
I don't know what the mechanism is, but it seems that the master can tell the minion which publish port to use, therefore the public port number on the router should be consistent with the local port number on the master.
Now my /etc/salt/minion
configuration is just:
master: xxx.xxx.xx.xxx
master_port: 44506
The original answer which is WRONG:
I think I made it work by simply using the same publish_port
option in the minion configuration file. I don't think it is mentioned on the documentation. It is NOT in the default /etc/salt/minion
configuration file either.
Now my /etc/salt/minion
configuration is like:
master: xxx.xxx.xx.xxx
publish_port: 44505
master_port: 44506
Simply adding publish_port: 44505
to the /etc/salt/master
configuration file on master does not make its minions connect to that publish port automatically. You will need to explicitly specify it in your minion configuration.