SSH隧道技術----端口轉發

@Author : Roger TX (425144880@qq.com)
@Link : https://github.com/paotong999

什么是SSH隧道

首先看下面的例子,我們所面臨的大部分情況都和它類似。

  • 內網的機器A,公網的機器B,某服務器C
  • A可以連接B,B可以連接C,但是AC之間不能連接
  • 這個時候如果B能運行一個OpenSSH服務器,那么就可以通過B形成隧道連接AC

跳轉機的端口轉發服務

我們建立ssh隧道的時候,往往是想通過一臺公網的主機或者是大家都可以訪問的主機做跳轉機,來訪問內部或者外部不能直接訪問的機器。所以一般像這種情況下,請將跳轉機中的ssh服務器中的GatewayPorts設為yes

ssh是linux遠程登錄的安全協議,是 C/S 模式的架構,配置文件分為服務器端配置文件 [/etc/ssh/sshd_config] 與客戶端配置文件默認配置文件[/etc/ssh/ssh_config] 用戶配置文件[~/.ssh/config]。sshd_config 是服務端主配置文件這個文件的宿主應當是root,權限最大可以是"644"

關于sshd_config配置詳解,這里不會過多涉及,有興趣的同學可以自行查找材料,這里主要說下GatewayPorts
GatewayPorts

1、是否允許遠程主機連接本地的轉發端口。默認值是"no"。
2、sshd(8) 默認將遠程端口轉發綁定到loopback地址。這樣將阻止其它遠程主機連接到轉發端口。
3、GatewayPorts 指令可以讓 sshd 將遠程端口轉發綁定到非loopback地址,這樣就可以允許遠程主機連接了。
4、"no"表示僅允許本地連接,"yes"表示強制將遠程端口轉發綁定到統配地址(wildcard address),
"clientspecified"表示允許客戶端選擇將遠程端口轉發綁定到哪個地址。

修改完成之后,重啟sshd服務

service sshd reload

本地SSH隧道

在建立本地SSH隧道之前要清楚下面幾個參數:

  • 公網機器B的IP地址(這里是192.168.199.16)
  • 公網機器B的端口號(這里是3333)
  • 某服務器C的IP地址(這里是139.199.0.37)
  • 某服務器C的端口號(端口:22)

在清楚了上面的參數后,我們使用下面的命令來建立一個遠程SSH隧道,在192.168.199.16的主機上執行下面的命令:

ssh -Nf -L 192.168.199.16:3333:139.199.0.37:22 192.168.199.16

這里我們用到了SSH客戶端的三個參數,下面我們一一做出解釋:

  • -N 告訴SSH客戶端,這個連接不需要執行任何命令。僅僅做端口轉發
  • -f 告訴SSH客戶端在后臺運行
  • -L 做本地映射端口,被冒號分割的三個部分含義分別是最后一個參數是我們用來建立隧道的中間機器的IP地址(IP: 192.168.199.16)
    • 需要使用的本地端口號(端口: 3333)
    • 需要訪問的目標機器IP地址(IP: 139.199.0.37)
    • 需要訪問的目標機器端口(端口: 22)

那么本地局域網的任何機器訪問192.168.199.16:3333都會自動被映射到139.199.0.37:22。

遠程SSH隧道

內網的機器A,公網的機器B,某服務器C
A可以連接B,B可以連接C,但是AC之間不能連接
這個時候如果B能運行一個OpenSSH服務器,那么就可以通過B形成隧道連接AC

1、上述例子中A-B-C連通后,我們思考一個問題,如果C想通過B連接A,也就是C-B-A可以連接嗎?
2、也許你已經注意到了,A是內網機器,所以C-B-A這個方向的連接不通。
3、雖然D-B-A這個方向的連接不通,但是A-B-D這個方向的連接是沒有問題的。
4、我們可以使用遠程SSH隧道的功能利用一條已經連接好的A-B-D方向的連接來完成 D-B-A方向的訪問。

與本地SSH一樣,我們在建立遠程SSH隧道之前要清楚下面幾個參數:

  • 公網機器B的IP地址(這里是139.199.0.37)
  • 公網機器B的端口號(這里是2222)
  • 內網的機器A的IP地址(這里是192.168.199.16)
  • 內網的機器A的端口號(端口:22)

在清楚了上面的參數后,我們使用下面的命令來建立一個遠程SSH隧道,在192.168.199.16的主機上執行下面的命令:

ssh -Nf -R 139.199.0.37:2222:192.168.199.16:22 139.199.0.37

1、這個命令也可以在局域網里192.168.199.12上執行
2、只要在局域網里192.168.199.12可以直接連接內網主機192.168199.16
3、且192.168.199.12可以直接與公網主機139.199.0.37建立ssh連接
4、那么任何外網主機通過訪問公網主機139.199.0.37:2222就會被連接到192.168.199.16:22
5、從而可以完成外網穿越NAT到內網的訪問,而不需要在內網網關和路由器上做任何操作。

現在,在IP是139.199.0.37的機器上,我們用下面的命令就可以登陸公司的IP是192.168.199.16的機器了。

ssh -p 2222 localhost

SSH隧道需要注意的地方

自動重連

? ? ? ?隧道可能因為某些原因斷開,例如:機器重啟,長時間沒有數據通信而被路由器切斷等等。因此我們可以用程序控制隧道的重新連接,可以使用一個簡單的循環控制隧道重新連接。

保持長時間連接

? ? ? ?有些路由器會把長時間沒有通信的連接斷開。SSH客戶端的TCPKeepAlive選項可以避免這個問題的發生,默認情況下它是被開啟的。如果它被關閉了,可以在ssh的命令上加上-o TCPKeepAlive=yes來開啟。
? ? ? ?另一種方法是,去掉-N參數,加入一個定期能產生輸出的命令。例如: vmstat,下面給出一個這種方法的例子:

ssh -R 139.199.0.37:2222:192.168.199.16:22 139.199.0.37 "vmstat 30"

如何將端口綁定到外部地址上

? ? ? ?使用上面的方法,映射的端口只能綁定在127.0.0.1這個接口上。也就是說,只能被本機自己訪問到。如何才能讓其他機器訪問這個端口呢?我們可以把這個 映射的端口綁定在0.0.0.0的接口上,方法是加上參數-b 0.0.0.0。同時還需要打開SSH服務器端的一個選項-GatewayPorts。默認情況下它應當是被打開的。如果被關閉的話,可以在/etc /sshd_config中修改GatewayPorts no為GatewayPorts yes來打開它。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容

  • 名詞延伸 通俗的說,域名就相當于一個家庭的門牌號碼,別人通過這個號碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,619評論 2 56
  • ??本文將介紹兩種應用場景的SSH端口轉發,分別是SSH本地轉發以及SSH遠程轉發。 簡介 ??SSH(Secur...
    KingFighting閱讀 1,492評論 0 5
  • 為了消遣設計。多年之前人們在這個命題上喜歡討論咬筆頭這件事,也因此誕生了一些產品。 看到一個新的設計,分享一下。 ...
    Cisa閱讀 248評論 0 2
  • 人人都能夠看懂,但只有1%的人會愛我的這碗粥! 我聽說過一句話 現在的社交媒體環境下,人人都可以成為"網紅" 但你...
    早安就醬閱讀 1,695評論 2 1
  • 一日,和朋友在洛杉磯一家有名的咖啡廳閑坐,品著咖啡。這時進來一個人,坐在我們旁邊的那張桌子旁。 他叫來服務生說:“...
    六六小淘氣閱讀 433評論 0 0