實驗環境:A、B、C三臺虛擬機器,A、B一個子網、B、C一個子網,AC之間通訊透過B進行轉發。
現象:A、C相互能夠ping通,但是嘗試建立TCP連線時卻一直顯示No route to host。
能夠ping通,按理講路由表應該沒問題,但是還是先對幾個虛擬機器之間的路由表進行檢查。
透過以下指令檢視路由表:
ip route
檢視之後確實都是正常的,B也開啟了資料轉發。
懷疑是防火牆的問題。
檢視iptables規則
iptables -L
預設都接收並轉發。
檢視firewalld。
sudo firewall-cmd --list-all
都開啟firewalld,並且未配置規則。
嘗試直接從B與C建立TCP連線,發現被拒絕。
開啟C對應的防火牆埠:
sudo firewall-cmd --permanent --add-port=10001/tcp
sudo firewall-cmd --reload
開啟後B可以和C建立TCP連線了,但是A仍舊沒法正常建立連線。
嘗試關閉B的防火牆:
sudo systemctl stop firewalld
嘗試連線,發現可以正常連線了,那麼也就是說B也應該要對firewalld進行配置。
重新啟動防火牆,並將兩個埠加入信任區域,允許轉發所有流量:
sudo systemctl start firewalld
sudo firewall-cmd --zone=trusted --change-interface=ens192 --permanent
sudo firewall-cmd --zone=trusted --change-interface=ens224 --permanent
sudo firewall-cmd --zone=trusted --add-masquerade --permanent
sudo firewall-cmd --reload
之後A、C就可以正常進行通訊了。