這篇文章主要介紹docker如何搭建lanproxy內(nèi)網(wǎng)穿透服務(wù),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、成都服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),溝通電話:028-86922220文檔更新說(shuō)明
2018年04月06日 v1.0
內(nèi)網(wǎng)穿透相信是后端開發(fā)者經(jīng)常遇到的需求,可是怎么實(shí)現(xiàn)呢?其實(shí)有現(xiàn)成的服務(wù):花生殼、ngrok等,但是,最近花生殼宣布,免費(fèi)版的內(nèi)網(wǎng)穿透將不支持80端口映射了,而免費(fèi)版的ngrok也不夠穩(wěn)定,于是乎,我就開始需找新的解決方案了
本文使用了docker、nginx,要全部搞懂的話需要一定的后端基礎(chǔ)(當(dāng)然,基本上入個(gè)門就可以了),個(gè)人認(rèn)為還是有一定閱讀門檻的,但是你如果只是想把服務(wù)搭建起來(lái),按照步驟來(lái)做是不難的
1、概述
內(nèi)網(wǎng)穿透其實(shí)就是用服務(wù)器做一個(gè)中轉(zhuǎn),將請(qǐng)求轉(zhuǎn)發(fā),本文記錄了在 ubuntu 16.04
上,基于 docker
搭建的內(nèi)網(wǎng)穿透服務(wù)
1.1、原理
內(nèi)網(wǎng)穿透的原理如下圖所示:
用戶訪問(wèn)我們的服務(wù)器,這個(gè)服務(wù)器是有公網(wǎng)IP的,所以用戶可以無(wú)壓力訪問(wèn)
服務(wù)器與本地電腦保持長(zhǎng)鏈接,當(dāng)有請(qǐng)求的時(shí)候,服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)到我們的本地電腦
本地電腦將響應(yīng)回復(fù)給服務(wù)器
服務(wù)器將響應(yīng)回復(fù)給用戶
1.2、實(shí)現(xiàn)
要搭建內(nèi)網(wǎng)穿透,我們得完成兩個(gè)任務(wù)
在公網(wǎng)能訪問(wèn)的服務(wù)器上運(yùn)行我們的內(nèi)網(wǎng)穿透服務(wù); 在本地電腦上面運(yùn)行內(nèi)網(wǎng)穿透客戶端。
當(dāng)然,你可以自己根據(jù)原理實(shí)現(xiàn)一套,不過(guò)我們有現(xiàn)成的三方開源工具,可以幫我們實(shí)現(xiàn)這一套功能。這個(gè)就是我們今天的主角 lanproxy 。
2、實(shí)現(xiàn)步驟
現(xiàn)成的工具已經(jīng)找到,接下來(lái)就是簡(jiǎn)單的搭建一下了,搭建過(guò)程分為服務(wù)端和本地電腦端
2.1、服務(wù)端流程:
在服務(wù)器上安裝 docker
和 nginx
在服務(wù)器上通過(guò) docker
運(yùn)行 lanproxy server
將域名解析到我們的服務(wù)器
配置 nginx
反向代理
打開 lanproxy
后臺(tái)頁(yè)面,添加客戶端和映射信息
2.2、本地電腦流程:
運(yùn)行要被映射的服務(wù)
運(yùn)行本地電腦映射客戶端程序( lanproxy client
)
下面開始服務(wù)端的配置:
2.1.1、在服務(wù)器上安裝 docker
和 nginx
nginx
的安裝是很簡(jiǎn)單的,一個(gè)命令就搞定
docker
也可以使用腳本安裝,也是一句命令的事
# 1、安裝nginx $ sudo apt-get install nginx # 2、安裝docker $ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 可選步驟,建docker源修改為阿里云 $ sudo mkdir -p /etc/docker $ sudo tee /etc/docker/daemon.json <<-'EOF' { # 下面的鏈接需要到阿里云后臺(tái)查看,每個(gè)人的加速地址是不一樣的 "registry-mirrors": ["https://abcdefg.mirror.aliyuncs.com"] } EOF $ sudo systemctl daemon-reload $ sudo systemctl restart docker
2.1.2 在服務(wù)器上通過(guò) docker
運(yùn)行 lanproxy server
服務(wù)安裝完畢之后,就可以用docker跑服務(wù)了,可以自己寫一個(gè) Dockerfile
,這里,我就把自己寫的放出來(lái)吧,大家可以拿去用著,gayhub 傳送門
這里我修改了 proxy-server-0.1
的部分文件,因?yàn)樵?docker
中,需要保存服務(wù)前臺(tái)運(yùn)行,否則容器會(huì)被 kill
掉,而官網(wǎng)默認(rèn)的啟動(dòng)腳本是后臺(tái)啟動(dòng)的,把 bin/startup.sh
里面的啟動(dòng)命令修改成前臺(tái)啟動(dòng)即可(去掉nohub和后面的1&2 &)
# 1、克隆docker配置,如果要修改配置可以編輯 conf/config.properties 文件,配置方法見(jiàn)lanproxy官網(wǎng) $ git clone https://github.com/fengqiangboy/lanproxy-docker.git lanproxy-docker # 2、build docker鏡像 $ cd lanproxy-docker $ sudo bash build_container.sh # 3、運(yùn)行docker容器 $ bash run_container.sh
2.1.3 將域名解析到我們的服務(wù)器
需要兩個(gè)域名,一個(gè)用來(lái)訪問(wèn)我們的 lanproxy
后臺(tái),一個(gè)用來(lái)訪問(wèn)我們需要內(nèi)網(wǎng)穿透的服務(wù)
例如:
lanproxy.fengqiangboy.com -> 用來(lái)訪問(wèn)lanproxy后端 test.fengqiangboy.com -> 用來(lái)訪問(wèn)內(nèi)網(wǎng)穿透服務(wù)
2.1.4配置 nginx
反向代理
將兩個(gè)域名解析到我們的服務(wù)器之后,再通過(guò)反向代理,將其反代到我們的lanproxy端口
下面配置的最終效果就是:
我們可以通過(guò) lanproxy.fengqiangboy.com
訪問(wèn) lanproxy
后
我們可以通過(guò) test.fengqiangboy.com
訪問(wèn)本地電腦映射的服務(wù)
lanproxy.fengqiangboy.com.conf:
server { listen 80; # 這里使用自己的域名 server_name lanproxy.fengqiangboy.com; charset utf-8; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; # 這里根據(jù)你的lanproxy配置,改成 config.server.port的值 proxy_pass http://127.0.0.1:8090; client_max_body_size 35m; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
test.fengqiangboy.com.conf:
server { listen 80; # 這里使用自己的域名 server_name test.fengqiangboy.com; charset utf-8; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; # 這里根據(jù)你的lanproxy配置,改成 外網(wǎng)接口 的值,在lanproxy后臺(tái)網(wǎng)頁(yè)上配置,后面配置 proxy_pass http://127.0.0.1:50000; client_max_body_size 35m; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
2.1.5 打開 lanproxy
后臺(tái)頁(yè)面,添加客戶端和映射信息
打開 http://lanproxy.fengqiangboy.com
用前面 conf/config.properties
文件中配置的賬號(hào)和密碼登錄后臺(tái)
添加一個(gè)客戶端,記住客戶端密鑰
添加完客戶端之后添加一個(gè)配置,配置如下圖
到此,服務(wù)端的配置就完成了。下面開始本地電腦的配置。
2.2.1 運(yùn)行要被映射的服務(wù)
既然要把內(nèi)網(wǎng)的服務(wù)映射出去,那首先就要把本地電腦的服務(wù)跑起來(lái)吧,不然拿什么來(lái)映射?這里就很多操作方法了,各個(gè)語(yǔ)言都不一樣,把自己的服務(wù)跑起來(lái)就行
2.2.2 運(yùn)行本地電腦映射客戶端程序( lanproxy client
)
這里有兩個(gè)方法,一個(gè)方法是使用官網(wǎng)提供的 go
版本,不需要安裝 java
環(huán)境在本地電腦上,另外一種是使用官網(wǎng)提供的 java
版本,這里我使用 java
版本的。
克隆 lanproxy
代碼到本地電腦
$ git clone https://github.com/ffay/lanproxy.git lanproxy
打包 lanproxy
打包之前需要確保你安裝了 maven
$ cd lanproxy $ mvn package
修改配置文件信息
打包完成之后,客戶端文件會(huì)出現(xiàn)在 distribution/proxy-client-0.1
目錄下,打開之后有是個(gè)文件夾: bin
、 conf
、 lib
和 log
,配置信息在 conf/config.properties
文件內(nèi),根據(jù)前面服務(wù)端的配置信息修改一下。
# 這里是在lanproxy后臺(tái)配置的密鑰 client.key=key # 配置ssl信息,根據(jù)服務(wù)端的配置填寫 ssl.enable=true ssl.jksPath=test.jks ssl.keyStorePassword=123456 # 服務(wù)器的ip server.host=163.162.161.160 #根據(jù)服務(wù)端配置,開啟ssl的話填寫ssl的端口,否則填寫普通端口 server.port=4993
啟動(dòng)客戶端
客戶端信息配置完成之后就可以啟動(dòng)客戶端了
# mac/linux使用這個(gè) $ bash bin/startup.sh # Windows 直接運(yùn)行 bin/startup.bat
訪問(wèn)測(cè)試
按照前面的配置,這時(shí)候我們應(yīng)該是可以通過(guò) test.fengqiangboy.com
來(lái)訪問(wèn)我們的內(nèi)網(wǎng)服務(wù)了的,用瀏覽器打開看看
3、一點(diǎn)補(bǔ)充
為什么要使用docker?
使用docker主要是為了不破壞服務(wù)端環(huán)境,只是給 lanproxy
安裝了一個(gè) jdk8
的環(huán)境,不影響其他服務(wù)繼續(xù)運(yùn)行;而且使用 docker
還可以很方便的轉(zhuǎn)移到其它機(jī)器上面部署,只要把 Dockerfile
拷貝過(guò)去就可以了。
這樣搭建,服務(wù)器重啟的話需要手動(dòng)重啟 lanproxy
嗎?
不需要,在服務(wù)端啟動(dòng) docker
容器的腳本下,我添加了 --restart unless-stopped
參數(shù),只要 docker
服務(wù)啟動(dòng)了,容器就會(huì)跟著啟動(dòng),如果你不需要這個(gè)需求,可以去掉這個(gè)參數(shù)
為什么不用花生殼?
前不久看到花生殼的公告,說(shuō)從4月1日開始,免費(fèi)版將不提供80端口映射,實(shí)際上我用這個(gè)映射大的需求就是做微信調(diào)試,去掉80端口就不能做微信調(diào)試了,不滿足我的需求了,當(dāng)然,花生殼還是不錯(cuò)的,如果能滿足你的需求,還是可以省時(shí)省力完成內(nèi)網(wǎng)穿透的
以上是“docker如何搭建lanproxy內(nèi)網(wǎng)穿透服務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!