如下結論bash
結論1
因爲minion配置文件裏能配置的只有master的IP和master的ret_port,而沒法指定master的publish_port
所以minion獲取的master的publish_port是在認證經過以後,master告訴它的。再認證經過以前minion端是不知道master的publish_porttcp
使用tcpdump抓包驗證了,以及lsof :4506驗證了。剛開始是連4506端口的blog
結論2
假如salt-master和salt-minion不在一個機房。而且2個機器均無外網IP,可是均可以上網
salt-master和salt-minion若是正常通訊的話,須要在master機房防火牆作端口映射
假如master機器內網IP是192.168.56.11 master機房防火牆IP是200.200.200.200
minion端配置文件裏master的IP是200.200.200.200,其中ret_port也是master機房防火牆的端口ip
ret_port能夠不一對一映射
好比下面格式。 master監聽在4506端口。防火牆能夠映射54506端口到master機器的4506端口
192.168.56.11:4506-----200.200.200.200:54506io
其中publish_port必須一對一映射
master配置文件裏的publish_port端口必須和防火牆外網端口一致
192.168.56.11:4505-----200.200.200.200:4505
或者說
192.168.56.11:54505-----200.200.200.200:54505table
實際生產環境也驗證了。ast
某地區的minion配置以下class
minion配置的ret_port以下配置
配置本身的id,和主機名不同iptables
防火牆端口映射
其中publish_port是一對一映射的
master的端口
master端的配置文件
場景3
若是防火牆沒一對一映射,好比下面場景,防火牆映射2個端口給salt使用 10.0.1.61:4505-----200.200.200.200:14505 10.0.1.61:4506-----200.200.200.200:14506 解決辦法 若是防火牆沒一對一映射。還能夠在master上經過iptables解決,作一個nat 能夠這麼處理,修改master的配置,讓publish_port監聽14505端口,4506給ret_port使用不變 iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 4505 -j DNAT --to-destination 10.0.1.61:14505