背景
由於自己在家搭建了一套雲服務集群,綁定域名后發現一個問題,小米路由器的DMZ和NAT功能不能同時開啟,考慮開啟DMZ之后,通過DMZ主機利用端口轉發實現集群的外網訪問。
方案
DMZ主機端口全部默認,由於集群有四個節點,另外三個節點的22端口分別用1122,1222,1322進行代替,這樣今后即可通過域名+對應端口實現CRT SSH免密碼訪問。
在DMZ主機執行命令:
# 開啟端口 firewall-cmd --zone=public --add-port=1122/tcp --permanent firewall-cmd --zone=public --add-port=1222/tcp --permanent firewall-cmd --zone=public --add-port=1322/tcp --permanent #轉發端口 firewall-cmd --permanent --zone=public --add-forward-port=port=1122:proto=tcp:toaddr=192.168.1.61:toport=22 firewall-cmd --permanent --zone=public --add-forward-port=port=1222:proto=tcp:toaddr=192.168.1.62:toport=22 firewall-cmd --permanent --zone=public --add-forward-port=port=1322:proto=tcp:toaddr=192.168.1.63:toport=22 #立即生效 firewall-cmd --reload
問題
執行后發現,通過“telnet 域名 轉發端口”不通,進入DMZ主機,“telnet 局域網IP 22”沒有問題,“telnet 本機 轉發端口”不通,通過命令“firewall-cmd --list-all”查詢,所有轉發設置都沒問題,考慮到對應端口都正常,應該是轉發受到了屏蔽之類的操作
解決方案
綜合百度各個文章,發現該問題受兩部分配置影響,一個是CentOS內核默認禁止轉發,另一個是防火牆默認禁止轉發,需要同時開啟兩部分配置,端口轉發方能生效,命令如下:
# 1、開啟內核 IP 地址轉發 # 查看net.ipv4.ip_forward值,1為允許轉發,0為不允許,如果為0改為1 /etc/sysctl.conf # 使之立即生效 sysctl -p # 2、防火牆允許 IP 地址轉發 # 執行 firewall-cmd --query-masquerade 查看狀態,如果是 no,可執行下面的命令開啟轉發。 # 開啟 IP 地址轉發 firewall-cmd --add-masquerade --permanent # 重載防火牆規則,使之立即生效 firewall-cmd --reload # 保險起見,重啟一下防火牆服務 systemctl restart firewalld
執行后,重新外網通過域名telnet測試成功。