前幾天買了個樹莓派3b,實現遠程控制自然要有內網轉發,沒什么毛病,但是任何事情我遇到的問題總比別人多,下面就開始折騰了。

一開始裝的是樹莓派的原生系統,花生殼官網有樹莓派專用的客戶端也就是arm版,但是用著用著很多滲透軟件裝著太麻煩,于是換了kali系統,

那么問題來了,花生殼沒有適用的客戶端了,所以只能想用自己的軟件轉發,當然最簡單的就是lcx轉發端口(?linux下內網端口轉發工具:linux版lcx [實現遠程內網維護]),但是這種工具從穩定性角度考慮的話只能作為臨時方案。

終究還是選擇了ngrok這個內網轉發工具,網上教程不少,也基本上都成功了,但是我折騰了兩天,當然,我的操作是沒有問題的,出于不甘心的態度,別人不怎么會linux的都能搞定,我沒理由搞不定,于是死撐到昨晚,終于各種google解決了一個最大的問題。

那么這個問題就是,網上所給的那些ngrok.cfg配置文件 根本不生效。

教程精簡版

高度概括下ngrok的使用方法,也算是給自己的一個備忘。

客戶端:

ngrok.cfg
server_addr: xxx.vuln.cn:4443
trust_host_root_certs: false
tunnels:
? ? http:
? ? ? ? proto:
? ? ? ? ? ? http: 80
? ? ? ? subdomain: pi
? ? ssh:
? ? ? ? remote_port: 2222
? ? ? ? proto:
? ? ? ? ? ? tcp: 22
./ngrok -config=ngrok.cfg start ssh
注意:縮進需要使用四個空格替代tab
這個配置文件為核心,支持多端口同時轉發,親測可用,我也就是被網上的那些配置文件坑了。
如果要同時開始80 和22端口轉發 就start ssh http即可

服務端:

./ngrokd -domain="xxx.vuln.cn" -httpAddr=":1222" -httpsAddr=":443"
說明:這里的httpaddr是單獨用來轉發80的,所以如果其他tcp端口,服務端不需要指定,由客戶端指定,服務端不占用即可。

出現的那些問題

第一個問題:

那么我遇到最大的一個問題就是,客戶端根本不請求在ngrok.cfg里指定的域名,所以就會導致客戶端一直處于reconnecting狀態,

從轉包數據可以看到:

請求的一直都是go源碼中指定的默認域名,所以,網上給的配置文件:

server_addr:xxx.vuln.cn:4443
trust_host_root_certs: false

是有問題的,server_addr根本不生效,可能與版本有關。

使用上面提供的配置文件后,完美轉發本地22端口:

第二個問題:

go語言的安裝也是折騰的夠了,網上的教程基本上都是下載go源碼包來編譯,可是正當我崩潰的不想玩的時候,發現官網有現成的arm版本

樹莓派這個版本可以直接用:https://storage.googleapis.com/golang/go1.7.4.linux-armv6l.tar.gz

注意:go版本必須要1.7版本或以上,很多1.3,1.4后面編譯ngrok客戶端的時候會報錯。

完整教程

完整的教程網上很多,在這里我也直接把網上的教程拿過來,糾正一些地方貼上來。

聲明編譯的路徑和必要的域名(域名改成你自己的)
git?clone?https://github.com/inconshreveable/ngrok.git ngrok
#或者:
git clone https://github.com/tutumcloud/ngrok.git ngrok
export?GOPATH=/usr/loca/ngrok/
export?NGROK_DOMAIN="xxx.vuln.cn"
cd /usr/local/ngrok

生成證書,Ngrok會使用此證書加密通訊

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

將證書文件復制到指定位置

cp rootCA.pem assets/client/tls/ngrokroot.crt -i
cp server.crt assets/server/tls/snakeoil.crt -i
cp server.key assets/server/tls/snakeoil.key -i

編譯服務器端與客戶端

服務器端為linux-x86-64

export GOOS=linux
export GOARCH=386
make release-server

編譯完成過后~/ngrok/bin/ngrokd即為服務端運行文件

運行:

./ngrokd -domain="xxx.vuln.cn" -httpAddr=":1222" -httpsAddr=":443"

客戶端
樹莓派為linux-arm架構,重新聲明go env里的變量

export GOOS=linux export GOARCH=arm make release-client

編譯完成過后~/ngrok/bin/linux_arm/ngrok即為樹莓派客戶端運行文件
客戶端配置文件:

ngrok.cfg
server_addr: xxx.vuln.cn:4443
trust_host_root_certs: false
tunnels:
? ? http:
? ? ? ? proto:
? ? ? ? ? ? http: 80
? ? ? ? subdomain: pi
? ? ssh:
? ? ? ? remote_port: 2222
? ? ? ? proto:
? ? ? ? ? ? tcp: 22

運行

./ngrok -config=ngrok.cfg start ssh

配置域名解析

如圖即可,

注意,一定要解析一個前面不帶星號的,因為tcp端口轉發不需要前面的三級域名,所以要解析xxx.vuln.cn,如果不單獨解析一個,那么會解析不了。

配置開機啟動

打開 /etc/rc.local

在exit 0這句之前加入這句話:

(sleep?3;?/root/ngrok/ngrok?-config=/root/ngrok/ngrok.cfg?start ssh)?&

路徑自行修改,注意全部用絕對路徑

 

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞