會需要這個功能,是因為 MySQL Replication 乃由 MySQL Slave 主動向 Master 要資料,而 MySQL Master 放在 LANMySQL Slave 放在 DMZ 。以公司的防火牆規則,當然是不允許 DMZ to LAN。這樣就有點難處理啦!所以,說不得只好用 Reverse SSH Tunnel 來處理囉!

參考:綠色工廠ubuntu-tw這樣做就對了中央大學
相關:電腦茶包Jamyy's WeblogInDeepNightTsung's Blog

MySQL Slave透過Reverse SSH Tunne

一開始對於 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 在執行的。

MySQL Slave透過Reverse SSH Tunne

執行 netstat 來檢視 SSH 連線,是存在的。

MySQL Slave透過Reverse SSH Tunne

再執行 netstat 來檢視本機監聽的 port

MySQL Slave透過Reverse SSH Tunne

最後再到 MySQL Slave 主機上執行 netstate 來檢視本機監聽的 port,果然有 port 3307

MySQL Slave透過Reverse SSH Tunne

接下來執行 mysql 的指令進行測試,果然,是成功的!嘿!

MySQL Slave透過Reverse SSH Tunne

再來就是來做 MySQL Replication 囉!不過,跑了一、兩天後,就發現 SSH Tunnel 沒多久就會斷線。所以網路上才會有 autosshSolution 出現吧?因為要在 Windows 底下安裝 autossh 有點兒麻煩。所以,有在網路上找到一個 Solution,是針對 SSHD 做設定的。依照它的說明,在 /etc/ssh/sshd_config 加了下列幾行設定:

GatewayPorts yes
TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 99999

跑了一、兩天,嗯!果然 SSH Tunnel 還是持續存在。

20130317

arrow
arrow
    創作者介紹
    創作者 游蜂 的頭像
    游蜂

    暉獲無度的步烙閣

    游蜂 發表在 痞客邦 留言(0) 人氣()