今天碰到外部網路無法存取 MySQL,調查原因發現是 firewall 把 port 3306 擋住了
考慮到安全性的問題,在 firewall 擋確實是一個有效的方法,但是如果直接改 MySQL listening port,內部服務要改動的幅度有點大
而 MySQL 也不支援同一服務對應多個 port
靈光一閃想到直接用 iptables 做 port forwarding,如此一來就能讓同一個 MySQL 服務同時監聽多個 port
此方法不限定 MySQL,也適用於只能指定一個 listening port 的服務
|
|
這時候用 port scanner 工具掃描 port 20000,state 是 open
但因為不是常見的 service listening port,所以會顯示為 unknown
|
|
因為自定義的 iptables rules 在重開機之後就會消失,所以我們要在重開機後能自動復原 rules
|
|
這時候外部網路就能以 port 20000 連線到 MySQL
而內部網路一樣可以用預設的 port 3306,也可以用新加入的 port 20000
最後還是要提醒一下直接改 service port 是比較好的
不過因為內部網路的服務有點多了怕麻煩只好偷吃步 XD