Red Hat Enterprise Linux 9.5 (Plow) 檢查是否 listen : sudo ss -tuln 或 sudo netstat -tuln 檢查防火牆規則 $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: 12345/tcp 12347/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: 查詢特定 port 是否開放 sudo firewall-cmd --query-port=12345/tcp 從另一台機器掃描 (目標電腦your-server-ip): nmap -p 8080 your-server-ip 測試連線(目標電腦your-server-ip) telnet your-server-ip 8080 或 curl http://your-server-ip:8080 # 開放 port sudo firewall-cmd --zone=public --permanent --add-port=12345/tcp sudo firewall-cmd --zone=public --permanent --add-port=12347/tcp 重新載入防火牆設定, 記得要做! sudo firewall-cmd --reload 驗證防火牆是否開放 sudo firewall-cmd --query-port=12345/tcp sudo firewall-cmd --query-port=12347/tcp 確認程式在監聽這些 port $ sudo ss -tulnp | grep 12345 tcp LISTEN 0 4096 0.0.0.0:12345 0.0.0.0:* users:(("yourprogram",pid=579992,fd=9)) $ sudo ss -tulnp | grep 12347 tcp LISTEN 0 4096 0.0.0.0:12347 0.0.0.0:* users:(("yourprogram",pid=579992,fd=31)) 若沒有輸出,代表沒有程式在這些 port 上監聽. 確認監聽的 IP 是 0.0.0.0 或特定外部 IP 如果程式只監聽 `127.0.0.1`(localhost),外部是無法連線的。你可以用以下指令檢查: sudo ss -tulnp | grep 12345 若 看到 `127.0.0.1:12345`,代表只接受本機連線。 則需要修改程式設定,讓它監聽 `0.0.0.0:12345` 或外部 IP。 確認 SELinux 是否阻擋連線 RHEL 預設啟用 SELinux,可能會阻擋某些 port 的使用。你可以暫時測試是否是 SELinux 問題: $ sudo setenforce 0 然後再測試連線。如果成功,代表 SELinux 是原因。 可以再設定 SELinux 允許這些 port: $ sudo setenforce 0 $ sudo semanage port -a -t unreserved_port_t -p tcp 12345 $ sudo semanage port -a -t unreserved_port_t -p tcp 12347 如果 `semanage` 指令不存在,請安裝: sudo dnf install policycoreutils-python-utils 最後要確認網路環境與 NAT / 雲端安全組設定 如果你的 RHEL 是在雲端(如 AWS、Azure、GCP),還需要確認: - 安全組(Security Group)是否允許這些 port。 - 是否有 NAT 或防火牆設備阻擋外部連線。 可使用 `nmap` 或 `telnet` 從另一台機器測試: nmap -p 12345 your-server-ip telnet your-server-ip 12345