內(nèi)網(wǎng)穿透

參照 http://www.hackliu.com/?p=363

使用ngrok進行內(nèi)網(wǎng)穿透
前提必需品:

  1. 有公網(wǎng)ip的服務(wù)器
  2. 域名

域名解析情況:

*.ngrok.wangzhaojin.top  --> 106.14.146.125
ngrok.wangzhaojin.top  --> 106.14.146.125

ngrok分為客戶端和服務(wù)端, 服務(wù)端放到公網(wǎng)服務(wù)器上, 客戶端放到自己的電腦上

1. 服務(wù)端操作(公網(wǎng)服務(wù)器)

1.1 安裝環(huán)境
  1. 基礎(chǔ)環(huán)境

    yum update
    yum install gcc -y
    yum install git -y
    
  2. 安裝go語言, 不要使用yum安裝, 使用源碼或二進制包安裝, 安裝完成以后配置GOPATH, GPROOT什么的

1.2 ngrok安裝
  1. 獲取軟件包

    git clone https://github.com/inconshreveable/ngrok.git
    
  2. 生成證書

    cd ngrok
    
    export NGROK_DOMAIN="ngrok.wangzhaojin.top"  #修改成自己的二級域名
    
    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 device.key 2048
    
    openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
    
    openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
    
  3. 將新生成的證書替換跨跨,1. 執(zhí)行下面命令后 “y” 回車 一行一行執(zhí)行代碼僵腺!

    cp rootCA.pem assets/client/tls/ngrokroot.crt
    
    cp device.crt assets/server/tls/snakeoil.crt
    
    cp device.key assets/server/tls/snakeoil.key
    
  4. 編譯生成ngrokd

    make release-server
    
    報錯1:沒有g(shù)o-bindata
    將GOPATH目錄下的bin/go-bindata復(fù)制到ngrok/bin/下,若沒有bin則mkdir
    如果GOPATH目錄下也沒有, 百度安裝go-bindata
    不要使用yum或apt安裝, 要用go get裝
    
    還有什么deps亂七八糟的報錯, 只會是一下三個原因
    1. go環(huán)境沒配好
    2. 所下載的資源被墻
    3. 重新克隆軟件包, 重新生成證書再編譯
    
    生成的ngrokd文件則為服務(wù)端,所在位置可能在以下兩處
    1. ngrok/bin/下
    2. GOPATH目錄/bin/下
    取決于你有沒有cp go-bindata文件, 若有, 則在1下
    
1.3 啟動服務(wù)端
./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" \
-tlsCrt="assets/server/tls/snakeoil.crt" \
-domain="ngrok.wangzhaojin.top"  \
-httpAddr=":80" \
-httpsAddr=":8082" \
-tunnelAddr=":443"
命令過長, 手動換行的
參數(shù)介紹:
tlsCrt 證書位置
domain 你自己的二級域名
httpAddr 監(jiān)聽的公網(wǎng)http請求的端口
httpsAddr監(jiān)聽的公網(wǎng)https請求的端口
tunnelAddr 隧道的端口,即與客戶端通信的端口

到這一步就能通過http://ngrok.wangzhaojin.top:80https://ngrok.wangzhaojin.top:443訪問ngrok提供的轉(zhuǎn)發(fā)服務(wù)了

如圖所示顯示 Tunnel ngrok.wangzhaojin.top not found則服務(wù)器啟動成功

1.3.1 systemctl接管

由1.3啟動的服務(wù)端無法后臺運行, 且啟動, 關(guān)閉. 重啟不方便
由systemctl接管后可以通過以下命令管理
systemctl start ngrok 啟動
systemctl stop ngrok 關(guān)閉
systemctl restart ngrok 重啟
systemctl status ngrok 查看運行狀態(tài)
注意路徑

vi /etc/systemd/system/ngrok.service

[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/root/ngrok/bin/ngrokd -tlsKey=/root/ngrok/assets/server/tls/snakeoil.key -tlsCrt=/root/ngrok/assets/server/tls/snakeoil.crt -domain=ngrok.wangzhaojin.top -httpAddr=:80 -httpsAddr=:8082 -tunnelAddr=:443

[Install]
WantedBy=multi-user.target
1.4 編譯客戶端
make release-client 
編譯之后的文件位置同服務(wù)端一樣, 文件名為ngrok

這一步看網(wǎng)上的教程需要設(shè)置客戶端的參數(shù), 不同系統(tǒng)編譯成不同客戶端
如下
win 平臺 64 位系統(tǒng):GOOS=windows GOARCH=amd64 make release-client
Linux 平臺 32 位系統(tǒng):GOOS=linux GOARCH=386 make release-client
Linux 平臺 64 位系統(tǒng):GOOS=linux GOARCH=amd64 make release-client
Windows 平臺 32 位系統(tǒng):GOOS=windows GOARCH=386 make release-client
Windows 平臺 64 位系統(tǒng):GOOS=windows GOARCH=amd64 make release-client
MAC 平臺 32 位系統(tǒng):GOOS=darwin GOARCH=386 make release-client
MAC 平臺 64 位系統(tǒng):GOOS=darwin GOARCH=amd64 make release-client
ARM 平臺:GOOS=linux GOARCH=arm make release-client

我的服務(wù)端和客戶端都是linux_64平臺, 這樣編譯之后:
   客戶端在centos7上顯示版本1.7,可以使用
   客戶端在Ubuntu16.04上顯示版本1.6,一直報證書錯誤, 很迷
所以我說直接make release-client, 不加前面的參數(shù)

2. 客戶端操作(內(nèi)網(wǎng)服務(wù)器)

2.1 將服務(wù)端生成的ngrok客戶端, 放到內(nèi)網(wǎng)服務(wù)器上

客戶端軟件放上去之后可能沒有執(zhí)行權(quán)限

[root@wzj ~]# ll
-rw-r--r--  1 root root 10779349 7月  17 14:08 ngrok
[root@wzj ~]# chmod 777 ngrok
[root@wzj ~]# ll
-rwxrwxrwx  1 root root 10779349 7月  17 14:08 ngrok

執(zhí)行chmod 777 ngrok即可

2.2 在同級目錄下新建一個配置文件
vi ngrok.cfg

server_addr: "ngrok.wangzhaojin.top:443"
trust_host_root_certs: false

注意: 
  1.域名換成自己的
  2.這里的server_addr前面的域名與生成ssl證書以及啟動服務(wù)端指定的domain一致
  3.server_addr后面的端口與啟動服務(wù)端時的指定的tunnelAddr一致
2.3 啟動客戶端
ngrok -config=ngrok.cfg -subdomain=v1 80

參數(shù)介紹:
subdomain為子域名的前綴,例如我們之前一直用的是ngrok.wangzhaojin.top
    這樣項目啟動后地址就為v1.ngrok.wangzhaojin.top
80: 本地項目啟動的端口

可能會報一下錯誤
[root@wzj ~]# ngrok -config=ngrok.cfg -subdomain=v1 80
-bash: /usr/bin/ngrok: 沒有那個文件或目錄

解決:
[root@wzj ~]# ln ngrok /usr/bin/
2.3.1 systemctl接管
vi /etc/systemd/system/ngrok.service

[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/root/ngrok -subdomain=zs 5000

[Install]
WantedBy=multi-user.target

啟動成功以后會顯示status online如下圖

此時就可以在瀏覽器通過http://v1.ngrok.wangzhaojin.top來訪問內(nèi)網(wǎng)的項目了如下圖

這里是因為我本地沒有跑在80端口的項目, 如果啟動了nginx就會有welcome to nginx 如圖

好吧, 我的nginx還沒配好, 懶得配了, 反正ngrok是能用了

結(jié)語

搭了很久才搭出來, 圖中各種報錯, 最后把軟件源碼全部刪了, 最后有clone一次就莫名其妙的好了

發(fā)現(xiàn)是編譯的時候加了那個GOOS和GOARCH, 搭好之后有個驚為天人的發(fā)現(xiàn), 原來ssh隧道一行命令就搞定了

原來一行命令就能搞定

遠程服務(wù)器(公網(wǎng)服務(wù)器)修改ssh配置文件
修改一下配置文件

vim /etc/ssh/sshd_config
添加一行
GatewayPorts yes
重啟sshd服務(wù)
systemctl restart sshd

在本機(內(nèi)網(wǎng)服務(wù)器)執(zhí)行如下命令


ssh -f -N -R 10003:localhost:80 root@106.14.146.125
解釋:
  將公網(wǎng)的106.14.146.125:10003端口請求轉(zhuǎn)發(fā)到本機的80端口

因為ssh會經(jīng)常自動斷開連接, 所以我將密碼作為命令的參數(shù)
將命令寫入腳本, 定時執(zhí)行

wzj@wzj-dev:/home/ubuntu$ cat autocontent.sh 
sshpass -p [password]  ssh -f -N -R 10003:localhost:80 root@106.14.146.125

3. 補充socket映射

3.1 配置

vi /root/.ngrok

server_addr: ngrok.wangzhaojin.top:443
trust_host_root_certs: false
tunnels:
    vnc:
        remote_port: 4900
        proto:
            tcp: 4900

3.2 啟動

/root/ngrok start vnc

image.png

3.3 systemctl 接管

vi /etc/systemd/system/ngrok.service

[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/root/ngrok start vnc

[Install]
WantedBy=multi-user.target
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饱亮,一起剝皮案震驚了整個濱河市吧凉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怎栽,老刑警劉巖丽猬,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熏瞄,居然都是意外死亡脚祟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門强饮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來由桌,“玉大人,你說我怎么就攤上這事⌒心” “怎么了铭乾?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邑雅。 經(jīng)常有香客問我片橡,道長妈经,這世上最難降的妖魔是什么淮野? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮吹泡,結(jié)果婚禮上骤星,老公的妹妹穿的比我還像新娘。我一直安慰自己爆哑,他們只是感情好洞难,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揭朝,像睡著了一般队贱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潭袱,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天柱嫌,我揣著相機與錄音,去河邊找鬼屯换。 笑死编丘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彤悔。 我是一名探鬼主播嘉抓,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晕窑!你這毒婦竟也來了抑片?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杨赤,失蹤者是張志新(化名)和其女友劉穎敞斋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體望拖,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡渺尘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了说敏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸥跟。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出医咨,到底是詐尸還是另有隱情枫匾,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布拟淮,位于F島的核電站干茉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏很泊。R本人自食惡果不足惜角虫,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望委造。 院中可真熱鬧戳鹅,春花似錦、人聲如沸昏兆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爬虱。三九已至隶债,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跑筝,已是汗流浹背死讹。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留继蜡,地道東北人回俐。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像稀并,于是被迫代替她去往敵國和親仅颇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355