反向建立 SSH Tunnel、免 VPN 連回公司

此篇文章最近更新時間為2010-01-21 05:01:34 目前共有15篇留言
相關標籤:

關於作者 - JosephJ

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,正是我要的東東啊!

Step 1 : 建立反向的 SSH Tunnel

建立反向 SSH Tunnel

所以,你可以上班時用 SSH 連到 dev.corp,再用下面的指令連回家中 home.idv:

$ ssh -NfR 8080:dev.corp:22 user@home.idv

大概解釋一下:

  • Nf 是指背景運作且不執行任何命令,所以此指令不會開一個新的 Terminal。
  • R 代表要建立一個反向(Reversed) 的 SSH Tunnel,也就是要讓對方可以連進來、而不是跟平常一樣只是自己連到對方。
  • 8080 為 home.idv 的 Port 8080,可隨意指定。
  • dev.corp 為 dev.corp 的 Port 22,必須是這台 SSH 所使用的 Port。
  • 8080:dev.corp:22 合起來看就是將傳送到 home.idv:8080 全部灌到 dev.corp:22(這種技術就叫 Port Forwarding)。

如此一來你就建立好了一個反向的 SSH Tunnel 了。此時再開一個 Shell 連回至 home.idv、執行下面的指令:

$ ssh -p 8080 localhost

-p 代表連到 Port 8080。因為之前在公司主機上已經建立好了 Tunnel,所以 localhost:8080 就會直接用此 Tunnel 連到 dev.corp:22 去。

居然可以透過網路上重重的限制(VPN、NAT)連回公司!感覺真是超棒的啦。


Step 2 : 建立 SOCKS Server

高興沒多久後就開始思考:雖然 SSH 連回公司的需求已經解決了,但是... 公司內還有很多服務啊!像是內部員工網站、內部的 Wiki 系統、內部的 SCM Repository 存取等... 光只有 SSH 根本沒太大的幫助該如何讓自己的家中的個人電腦也能存取這些資源呢?答案就是建立 SOCKS Server (謝謝小 Z 大大幫忙,原來只需多加一個參數即可建立)

小改一下建立與使用 SOCKS Server
$ ssh -p 8080 -D 3128 localhost

-D 3128 表示將本機的 Port 3128 設為 SOCKS Proxy Server。

如此一來,家中的伺服器就會變成 SOCKS Proxy Server,你的網際網路設定的 SOCKS 欄位填入 home.idv:3128 即可。


延伸閱讀

  • autossh :

    感謝小 Z 提供。因為連線可能會斷掉,你可以在公司的伺服器上安裝一個叫 autossh 的東西,他會協助你自動重新建立連線,讓你無後顧之憂 :D

  • IPSec :

    感謝 Jack 推薦。用 IPSec 這個 Protocol 可以更安全、而且連線更穩定。


SSH Tunnel 必學

以下是整理上班族 SSH Tunnel 求生手冊

在外賺辛苦錢時,你是否有以下的困擾呢:

  • 擔心網管監控你的一舉一動?(104 事件)
  • 你公司網路防火牆擋掉 Facebook?沒辦法 QK 一下...
  • 除了 80 與 443 Port 外全部被擋掉?

這些情況都可以透過 SSH Tunnel 將自己的連線加密與突破。

在公司,用自己的主機連線

在公司,透過外面的電腦當 Proxy,連到外面。

Windows(下載 plink.ext)
plink -ssh -L 3128:home.com:3128 username@home.com

Linux / Unix
ssh -NfD 3128 username@home.com
  • -N : 不執行任何命令
  • -f : 在背景執行
  • -D : 建 Socks5 的 Proxy

瀏覽器和 MSN 的 Socks 5 Proxy 設定的欄位填上 localhost:3128。連出去的連線就是加密,並且是穿過 home.com 的連線。

在公司,用自己的主機連 BBS

假設 MIS 鎖住了 bbs.ptt.cc

Windows
plink -ssh -L 2323:bbs.ptt.cc:23 username@home.com

Linux / Unix
ssh -NfL 2323:bbs.ptt.cc:23 username@home.com

-L : 將local port 轉向

就可以連到批踢踢,而且加密。

telnet localhost 2323


Comments

  1. Robert 2010-09-07 18:01:48
    Juniper Network Connector 現在可以再MAC上run了, 走Java solution.
  2. j 2010-08-11 19:24:06
    误人子弟
  3. tension 2010-07-19 04:50:57
    很好的学习文章,这样可以省去很多麻烦了!
  4. Terry 2010-03-15 22:12:57
    您好~

    謝謝您回覆,小弟今天家裡的 fedora 跑 firefox 成功的連線回公司。不過小弟發現,建立 SOCKS SERVER 之後,他卻只有本機(這台fedora)能利用 port 3128 連回公司,
    家裡的 windows 試著去 telnet fedora 的 3128 是拒絕連線的。

    下netstat 看到的結果是 listen 127.0.0.1:3128 ,這是不是代表他只 listen 本機的連線呢?

    謝謝您。
  5. 小z 2010-03-15 19:13:02
    socks server可不止針對browser, 理論上所有軟體都可以支援....有的軟體直接內建支援 (需設定) , 不直接支援的, 可以在winsock這層作手腳. 建議是socks / portforwarding 玩熟了的人 (知道怎麼排除問題的) 再來玩. 現成可以玩的 '讓不支援socks的軟體走socks' 的軟體很多....請上網搜尋.
  6. 小z 2010-03-15 19:09:03
    最近有個比較熱門的是.....hack ip分享器軔體!

    上述的一些挖洞法總是需要自家有linux/ssh server , 如果自家的主機不常開, 可以玩玩hack一些ip分享器/無線AP 的軔體. (因為很多ip分享器/無線AP跟本就是linux, 後來為了符合GNU就只好release出source, 接著就開始有人去hack)

    改機完後, 就有個現成可以挖洞的ssh server, 而且可以不用開電腦. 有興趣的人可以上網搜尋 dd-wrt , tomado, OpenWRT, Tarifa, freewrt .....等等......
  7. terry 2010-03-15 00:34:07
    請問最後的 socks server 是針對網頁瀏覽器嗎?

    讓家裡的j網頁瀏覽器利用反向ssh tunnel 連線公司內部的web server?
  8. chihyibg 2010-02-22 20:45:03
    請問一下
    若兩端的主機都在nat之後是不是就完全沒辦法連線了?
  9. Archangelwu 2010-01-25 14:20:59
    引用 "為啥要連到批踢踢的 ssh ? 上批踢踢當然是要看 telnet 啦 XD
    這個的用途當網路環境(例如許多公司)僅開放 443 與 80、封鎖 MSN 、Facebook 時
    你可以建立 SSL Tunnel 來存取所有資源,不被限制。

    另外一個好用的就是像大陸許多網站不能用,SSL Tunnel 也是一個救星。 "

    打錯字囉 SSL Tunnel 要改為 SSH Tunnel ^_^
  10. Josephj 2010-01-22 18:40:53
    Soga 又上了一課
  11. allenown 2010-01-22 16:49:29
    ptt直接有提供ssh可以連線至bbs畫面,有ssh加密可以防止竊聽。
  12. josephj 2010-01-22 11:06:44
    X,

    為啥要連到批踢踢的 ssh ? 上批踢踢當然是要看 telnet 啦 XD
    這個的用途當網路環境(例如許多公司)僅開放 443 與 80、封鎖 MSN 、Facebook 時
    你可以建立 SSL Tunnel 來存取所有資源,不被限制。

    另外一個好用的就是像大陸許多網站不能用,SSL Tunnel 也是一個救星。
  13. josephj 2010-01-22 10:14:30
    相關討論:
    http://www.facebook.com/josephj6802?v=feed&story_fbid=1306902946344
  14. X 2010-01-22 01:44:33
    有 ssh client 可以用的話,直接連 ssh://bbs@ptt.cc:22/ 就可以了吧?
  15. 裕波 2010-01-21 23:33:58
    cool
暱稱: 必填。
Email: 非必填。若填寫為不公開欄位,僅供站長參考聯繫。
內容: 必填。限 255 個字元以內。
送出

Facebook Comment