會需要這個功能,是因為 MySQL Replication 乃由 MySQL Slave 主動向 Master 要資料,而 MySQL Master 放在 LAN,MySQL Slave 放在 DMZ 。以公司的防火牆規則,當然是不允許 DMZ to LAN。這樣就有點難處理啦!所以,說不得只好用 Reverse SSH Tunnel 來處理囉!
參考:綠色工廠、ubuntu-tw、這樣做就對了、中央大學
相關:電腦茶包、Jamyy's Weblog、InDeepNight、Tsung's Blog
一開始對於 Reverse SSH Tunnel 的運作原理並不是很懂,雖然網路上的資訊一堆,看到都花掉了。哈!就是找不到完全符合我需求的做法。說不得,只好找一個範例來試試,並且觀察到底是怎麼連線的?
花了不少時間,終於測成功 Reverse SSH Tunnel 的做法了。因為有一端是 Windows 7,所以就用 plink 來做 SSH Tunnel 的建立。它的指令如下:
plink [options] [user@]host [command]
d:\sch\plink_db -ssh -i %USERPROFILE%\dsa-key.ppk -N -batch -R 3307:127.0.0.1:3306 root@122.116.75.43 |
使用參數說明如下:
-ssh:強制使用 ssh 通訊協定。
-i key:使用所指定的檔案當作私鑰。
-N:不要開啟任何 shell/command。
-batch:取消所有交談提示。
-R listen-port:host:port:轉送遠端電腦的連接埠至近端。
上面指令的說明就是讓遠端的 port 3307 轉送到本機的 port 3306。執行後檢視一下「工作管理員」是有 plink_db.exe 在執行的。
執行 netstat 來檢視 SSH 連線,是存在的。
再執行 netstat 來檢視本機監聽的 port。
最後再到 MySQL Slave 主機上執行 netstate 來檢視本機監聽的 port,果然有 port 3307。
接下來執行 mysql 的指令進行測試,果然,是成功的!嘿!
再來就是來做 MySQL Replication 囉!不過,跑了一、兩天後,就發現 SSH Tunnel 沒多久就會斷線。所以網路上才會有 autossh 的 Solution 出現吧?因為要在 Windows 底下安裝 autossh 有點兒麻煩。所以,有在網路上找到一個 Solution,是針對 SSHD 做設定的。依照它的說明,在 /etc/ssh/sshd_config 加了下列幾行設定:
GatewayPorts yes TCPKeepAlive yes ClientAliveInterval 30 ClientAliveCountMax 99999 |
跑了一、兩天,嗯!果然 SSH Tunnel 還是持續存在。
20130317