隱形的跳板 / 臨時的 vpn —sshuttle

因應資安緣故(網路上的壞人太多),所以單位裡很多機器都藏到防火牆後面,除非特別開對外連接埠,否則單位外機器是無法直接從外面連接進來。又,現在最常見的安全性作法便是機器一定要在某限定的網域內,才能執行某工作,或是使用某資源。

但現實總是會有例外,會有無法實際在限定的網域裡,但又有實際連接的短暫需求時,面對此問題,不少單位則會使用架設 vpn 服務來因應。

不過,若不想因為臨時短暫的需求而大費周章的架設 vpn 服務時,可以利用 sshuttle 來做個臨時通道,讓自己的機器暫時成為該網域底下主機的一員。

整個概念如下圖:

主機(192.168.0.100)位在 192.192.0.0 此網域之外,透過 sshuttle 連接 192.192.0.100 這部主機後,便隱身到 192.192.0.100 主機裡面,所有的對外連線需求則全部都以 192.192.0.100 這部主機的名義對外發出,這就好像變成了 192.192.0.0 此網域裡面的主機的一員了。

sshuttle 官網表示目前只支援 Linux, FreeBSD, 或 MacOS 等作業系統,而我個人認為其實只要能跑「ssh + python」便可。因為 sshuttle 是奠基在 ssh 服務上由 python 寫成的小程式,只需要 client 端能執行此程式,再由 server端開啟 ssh 服務並對外開啟連接埠,便可以達成!

至於為什麼 ssh server 上只需要 python 而不用裝 sshuttle 呢?因為 sshuttle 在執行後,會自動將 client 裡的 sshuttle 的檔案上傳,並且執行,這樣不但省麻煩,而且也不會有版本不同的問題。(此段是依據「窮人的 vpn – sshuttle 介紹」的說法)

 

取得與安裝

sshuttle 可直接在 github 中取得, https://github.com/sshuttle/sshuttle。也可以直接透過各作業系統的套件管理程式庫,直接取得安裝

我個人是嫌套件庫裡的程式太舊,更新太慢,所以我都盡可能直接去官網下載最新版回來安裝。整個動作,看起來很威,其實也就三個步驟:

  1. 下載
  2. git clone https://github.com/sshuttle/sshuttle.git

  3. 安裝
  4. cd sshuttle
    sudo ./setup.py install

  5. 清除
  6. cd ..
    sudo rm -Rf sshuttle

特別注意點有二:

首先,在安裝完成之後,sshuttle 會被放在 /usr/local/bin/ 目錄中,而此時要注意 client 這部機器 python 的執行檔的位置在哪裡,以我的機器來說,是放在 /usr/bin/ 此目錄底下,但 sshuttle 程式是預設 python 放在 /bin/ 底下,所以要先去更改 sshuttle 。(使用文字編輯器便可,例如:vim )

其次,要注意 client 端與 server 端 python 版本號碼是否一致,若有連接失敗的狀況,可能是兩端版本號碼不同,此時調整一下,便可以!舊版有此問題,但不知最新版是否已修掉此問題。

 

連線

最重要的點,連線之前,要先確定在 192.192.0.100 這部主機上,要有可以 ssh 登入進去的帳號,若沒有,就沒有以下了。

執行時,可以透過 sshuttle –help 了解 sshuttle 的用法。

連線範例:
sshuttle -NHvr (帳號)@192.192.0.100 192.168.0.0/0

說明:

  • (帳號):可以 ssh 登入 192.192.0.100 的真實帳號,且已設定好免密碼登入。
  • -N:讓 sshuttle 自動偵測有哪些 subnets 要轉送
  • -H:自動掃描遠端 ssh server 的 /etc/hosts,並更新本地 /etc/hosts,方便存取伺服器之類的
  • -v :將執行過程結果顯示出來
  • -r:(–remote) 是遠端的 ssh server,本例中的 192.192.0.100
  • 192.168.0.0/0:連線 Client 端的子網域,表示任何在此子網域的機器,只要是透過 192.168.0.100 這部機器連過去,統統都會變成披著 192.192.0.100 外衣的機器。

 

參考資源:

  1. sshuttle 轻量级全局代理工具
  2. https://liwanggui.com/posts/sshuttle/

  3. 窮人的 vpn – sshuttle 介紹
  4. https://louie023.wordpress.com/2013/07/30/%E7%AA%AE%E4%BA%BA%E7%9A%84-vpn-sshuttle-%E4%BB%8B%E7%B4%B9/

 

 

2 Replies to “隱形的跳板 / 臨時的 vpn —sshuttle”

  1. 請問我在執行 sshuttle -NHvr account@my.host 168.95.0.0/16 這個指令之後,去下 mtr 168.95.1.1
    但原來的路由並沒有改變 還是走我本來的 default gateway 出去
    這個指令格式有錯誤?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*