D-Link 友訊科技工程師。喜好戶外運動、2008 年 5 月完成「跑步環島」。對於新技術跟程式碼有著強烈的偏執狂。
平常若要從外面連到公司內網,都是透過 Juniper Network Connector 來建立的 SSLVPN 連線。如果用的是 Windows 都沒有太大的問題,只要用 Internet Explorer 連到登入頁都可以透過 ActiveX 啟動或安裝 Network Connector。但我不喜歡將電腦帶來帶去,家裡通常是用 Mac 上網。可是呢,Mac 沒有 IE,必須要另外安裝 NetworkConnector.dmg 來連,但跟 MIS 拿的版本又有問題,所以我在家裡都沒辦法加班(老闆,我很想啊 XD)。
在前公司有用過 SSH 連線到公司內網、設定 Tunnel 的 Port Forwawrding 後、在 Browser 設定 SOCKS Proxy 即可瀏覽內部網頁。所以就在思考、也跟同事討論,既然已從公司建立 SSH 連線到家中,理論上應可利用此連線,不需要考慮 VPN 與 NAT 的限制、從家中再連回到公司。昨天上網搜尋了 SSH Tunnel、文章很多、標題很聳動 (利用SSH Tunnel 逃離 MIS 掌控魔爪) ,但大多是講正向 Tunnel,直到看到了這一篇:上班族 SSH Tunnel 求生手冊,最後有講到反向 Tunnel,正是我要的東東啊!
所以,你可以上班時用 SSH 連到 dev.corp,再用下面的指令連回家中 home.idv:
$ ssh -NfR 8080:dev.corp:22 user@home.idv
大概解釋一下:
如此一來你就建立好了一個反向的 SSH Tunnel 了。此時再開一個 Shell 連回至 home.idv、執行下面的指令:
$ ssh -p 8080 localhost
居然可以透過網路上重重的限制(VPN、NAT)連回公司!感覺真是超棒的啦。
高興沒多久後就開始思考:雖然 SSH 連回公司的需求已經解決了,但是... 公司內還有很多服務啊!像是內部員工網站、內部的 Wiki 系統、內部的 SCM Repository 存取等... 光只有 SSH 根本沒太大的幫助。該如何讓自己的家中的個人電腦也能存取這些資源呢?答案就是建立 SOCKS Server (謝謝小 Z 大大幫忙,原來只需多加一個參數即可建立)

$ ssh -p 8080 -D 3128 localhost
如此一來,家中的伺服器就會變成 SOCKS Proxy Server,你的網際網路設定的 SOCKS 欄位填入 home.idv:3128 即可。
感謝小 Z 提供。因為連線可能會斷掉,你可以在公司的伺服器上安裝一個叫 autossh 的東西,他會協助你自動重新建立連線,讓你無後顧之憂 :D
感謝 Jack 推薦。用 IPSec 這個 Protocol 可以更安全、而且連線更穩定。
以下是整理上班族 SSH Tunnel 求生手冊:
在外賺辛苦錢時,你是否有以下的困擾呢:
這些情況都可以透過 SSH Tunnel 將自己的連線加密與突破。
在公司,透過外面的電腦當 Proxy,連到外面。
Windows(下載 plink.ext)plink -ssh -L 3128:home.com:3128 username@home.comssh -NfD 3128 username@home.com
瀏覽器和 MSN 的 Socks 5 Proxy 設定的欄位填上 localhost:3128。連出去的連線就是加密,並且是穿過 home.com 的連線。
假設 MIS 鎖住了 bbs.ptt.cc
Windowsplink -ssh -L 2323:bbs.ptt.cc:23 username@home.comssh -NfL 2323:bbs.ptt.cc:23 username@home.com-L : 將local port 轉向
就可以連到批踢踢,而且加密。
telnet localhost 2323