sshuttle全局代理的實現簡析

最近使用sshuttle實現全局代理,順便研究了一下實現的具體原理。

直接進入主題,先看一下啓動的輸出信息:


先綁定到本地的12300端口,將數據通過遠端的ssh服務器進行路由轉發。sshuttle和ssh的tunnle不同不是基於TCP-over-TCP的,而是叫data over tcp的,省去了一次包裹。然後建立端口映射,輸出信息如下:


很明顯是通過iptables的代理轉發來實現的,具體步驟:

  1. 新建nat表的處理鏈sshuttle-12300
  2. 清空處理鏈
  3. 將OUTPUT數據路由給sshuttle-12300處理
  4. 添加sshuttle-12300的處理過程,目標是本機則返回,目標是遠程主機的tcp轉發REDIRECT到12300端口,目標是dns服務器的udp數據通過12300端口來轉發

當然代理結束時就會將映射信息從iptables中刪除:


sshuttle是使用python實現的,安裝很方便幾乎是直接portable的。當然如果條件限制可以先使用ssh tunnle然後通過iptables的轉發來實現代理。其實不光是sshuttle,android的gae代理也是基於這個iptables來實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章