您好,登錄后才能下訂單哦!
之前一直在糾結(jié)什么是端口轉(zhuǎn)發(fā),現(xiàn)在寫下自己的理解,并試驗(yàn)本地端口,遠(yuǎn)程端口轉(zhuǎn)發(fā)
SSH(Secure Shell,安全外殼協(xié)議),在SSH的通道上傳輸數(shù)據(jù)都是通過加密的,每次連接SSH會執(zhí)行指紋核對來確認(rèn)用戶連接到正確的遠(yuǎn)程主機(jī)上,如果在其它協(xié)議的數(shù)據(jù)通過SSH端口進(jìn)行轉(zhuǎn)發(fā),SSH連接作為其它協(xié)議傳輸?shù)耐ǖ溃ㄋ淼溃?,這種方式也叫做SSH端口轉(zhuǎn)發(fā)或SSH隧道.
作用:加密數(shù)據(jù)傳輸、突破防火墻限制
分類:本地轉(zhuǎn)發(fā)、遠(yuǎn)程轉(zhuǎn)發(fā)、動態(tài)轉(zhuǎn)發(fā)
一、本地端口轉(zhuǎn)發(fā)
本地轉(zhuǎn)發(fā)中的本地是指將本地的某個端口轉(zhuǎn)發(fā)到其他主機(jī)的某個端口,這樣當(dāng)我們的程序連接本地的這個端口時,其實(shí)間接連上了其他主機(jī)的某個端口,當(dāng)我們發(fā)數(shù)據(jù)包到這個端口時數(shù)據(jù)包就自動轉(zhuǎn)發(fā)到了那個遠(yuǎn)程端口上了
命令語法:ssh -L [bind-address:]port:host:hostport server_address
解釋下:bind_address表示本地主機(jī)的ip(綁定地址),這是針對系統(tǒng)有多塊網(wǎng)卡,不指定默認(rèn)是127.0.0.1
port:本地主機(jī)指定監(jiān)聽的端口
host:遠(yuǎn)程主機(jī)的ip
hostport:指定遠(yuǎn)程主機(jī)的端口,如果遠(yuǎn)程主機(jī)是HTTP,就是80,F(xiàn)TP(21)。。。
server_address:遠(yuǎn)程主機(jī)的ip,也可以是能夠訪問到遠(yuǎn)程主機(jī)的另一個ip(我們通過實(shí)驗(yàn)來理解)
另外有幾個參數(shù)需要知道:
-L:指定本地(客戶端)主機(jī)上的指定端口轉(zhuǎn)發(fā)到給定的遠(yuǎn)端的主機(jī)和端口
-N:不執(zhí)行遠(yuǎn)程指令
- f:放在后臺執(zhí)行
實(shí)驗(yàn):主機(jī)A(192.168.31.100)、主機(jī)B(192.168.31.150)、主機(jī)C(192.168.31.163)三臺主機(jī)
A、B、C都可以互相連接
在主機(jī)A上執(zhí)行命令:# ssh -Nf -L 192.168.31.100:7900:192.168.31.163:22 192.168.31.150
這里需要注意的是本例中我們選擇了 7900 端口作為本地的監(jiān)聽端口,在選擇端口號時要注意非管理員帳號是無權(quán)綁定 1-1023 端口的,所以一般是選用一個 1024-65535 之間的并且尚未使用的端口號即可。
當(dāng)執(zhí)行完這條命令后,我們發(fā)現(xiàn)終端沒有反應(yīng),那是因?yàn)榉诺胶笈_執(zhí)行了,那我們怎么知道是否開啟了端口轉(zhuǎn)發(fā)?
netstat -nt:列出tcp網(wǎng)絡(luò)數(shù)據(jù)的端口
netstat -ntlp:列出系統(tǒng)已在監(jiān)聽的網(wǎng)絡(luò)連接端口及PID
上圖我們發(fā)現(xiàn),主機(jī)A的7900端口已被監(jiān)聽了,是被ssh(ssh就是客服端)監(jiān)聽的,和192.168.31.150(主機(jī)B)建立了一個SSH隧道,并且我們知道主機(jī)B和主機(jī)C是可以通信的,我們可以通過主機(jī)A的端口訪問時,其實(shí)就是間接用主機(jī)B在訪問,為了效果我們可以用主機(jī)C訪問主機(jī)A:(-p:是指定遠(yuǎn)程端口)
在主機(jī)C上執(zhí)行:ssh 192.168.31.100 -p 7900(如果沒有隧道前,主機(jī)C登錄主機(jī)A時,登陸的ip肯定是主機(jī)C的ip,有了隧道后,通過主機(jī)A的端口和主機(jī)B建立的隧道,就是主機(jī)B在登錄的ip)
上面我們說到命令語法:ssh -L [bind-address:]port:host:hostport server_address
server_address 可以和host不一樣,也可以一樣
# ssh -Nf -L 192.168.31.100:7900:192.168.31.163:22 192.168.31.163
上面這條的意思是,“192.168.31.100”和“192.168.31.163”建立一個ssh隧道,
只要通過192.168.31.100這臺主機(jī)的“端口”訪問,就相當(dāng)于是192.168.31.163這臺主機(jī)在訪問
實(shí)驗(yàn)二:主機(jī)C(192.168.31.163)不允許主機(jī)A訪問,但是允許主機(jī)B訪問,通過ssh隧道實(shí)現(xiàn)A訪問C
搭建環(huán)境:在主機(jī)C上為了不讓主機(jī)A訪問,可以在/etc/hosts.deny這個配置文件中添加一行:“sshd:192.168.31.100”,加上主機(jī)A的ip即可,連接已被關(guān)閉
環(huán)境搭好了,我們在主機(jī)A上執(zhí)行:ssh -Nf -L 192.168.31.100:9000:192.168.31.163:22 192.168.31.163
隧道有了,我們在被拒絕訪問的主機(jī)A上執(zhí)行:ssh -p 9000 192.168.31.100(意思是連接主機(jī)A的9000端口,而9000端口又與主機(jī)B連成隧道,當(dāng)用主機(jī)A的9000端口訪問時,則是在用主機(jī)B訪問,所以主機(jī)A被禁止訪問也無妨)
最后需要提醒的是,如果想關(guān)閉某個ssh隧道,只能用kill殺死相關(guān)進(jìn)程,隧道被關(guān)閉后,指定的連接也會關(guān)閉。
二、遠(yuǎn)程端口轉(zhuǎn)發(fā)可以實(shí)現(xiàn)訪問內(nèi)網(wǎng)
SSH遠(yuǎn)程端口轉(zhuǎn)發(fā):
遠(yuǎn)程轉(zhuǎn)發(fā)和本地很相似,原理也差不多,但是不同的是,本地轉(zhuǎn)發(fā)是在本地主機(jī)指定的一個端口,而遠(yuǎn)程轉(zhuǎn)發(fā)是在遠(yuǎn)程的主機(jī)上指定一個端口將指向該端口的連接轉(zhuǎn)發(fā)到本地端口。本質(zhì)一樣,區(qū)別在于需要轉(zhuǎn)發(fā)的端口是在遠(yuǎn)程主機(jī)上還是在本地主機(jī)山。
但遠(yuǎn)程轉(zhuǎn)發(fā)使用的命令選項(xiàng)也不同:
ssh -R [bind-address:]post:host:hostport server_address
這里需要注意的是:
bind-address指定的是遠(yuǎn)程主機(jī)ip,不是本機(jī)
port:遠(yuǎn)程主機(jī)指定監(jiān)聽的端口
host:你需要訪問的主機(jī)
hostport:指定被訪問主機(jī)的端口
server_address:遠(yuǎn)程主機(jī)和誰?建立的隧道,指定誰
我們都知道內(nèi)網(wǎng)通過路由器(SNAT)可以訪問外網(wǎng),而外網(wǎng)是無法訪問到內(nèi)網(wǎng)的,我們利用ssh來實(shí)現(xiàn)訪問內(nèi)網(wǎng),要搭建這種環(huán)境,我首先想到的是VMware的NAT模式,我將主機(jī)C設(shè)置NAT模式
主機(jī)A:192.168.31.100(外網(wǎng))
主機(jī)B:192.168.31.150(外網(wǎng))
主機(jī)C:192.168.200.133(內(nèi)網(wǎng))
在主機(jī)C執(zhí)行命令:ssh -Nf -R 192.168.31.150:9000:192.168.200.133:22 192.168.31.150
netstat -nt:
主機(jī)C已經(jīng)和192.168.31.150(主機(jī)B)建立好隧道了
這時你在主機(jī)C上執(zhí)行 netstat -ntlp 并沒有什么監(jiān)聽的9000端口,因?yàn)槟闶窃趯Ψ街鳈C(jī)上開的一個端口,你需要在主機(jī)B上執(zhí)行netstat -ntlp:
我們發(fā)現(xiàn),127.0.0.1:9000這是什么意思呢?這是說指本機(jī),并沒有隨便指定一個ip,那樣太危險,后面也變成sshd監(jiān)聽,就是ssh服務(wù)端,所以我們也叫 反向隧道。
在外網(wǎng)的主機(jī)B上執(zhí)行:ssh -p 9000 127.0.0.1
主要不再是ssh -p 9000 192.168.31.150了,完成
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。