摘要:作為一個(gè)內(nèi)網(wǎng)穿透的小工具,有時(shí)可能會(huì)時(shí)常更改配置等,所以作為本地的一個(gè)開(kāi)機(jī)啟動(dòng)的小服務(wù)即可。設(shè)置開(kāi)機(jī)啟動(dòng)輸入命令設(shè)置開(kāi)機(jī)啟動(dòng)開(kāi)啟查看狀態(tài)停止內(nèi)網(wǎng)穿透配置相對(duì)于另一款國(guó)內(nèi)大牛做的要顯的更加輕量安全易配置些。
12月18日更新 添加 frp 配置前言
內(nèi)網(wǎng)穿透,無(wú)需多言,用處多多。首先強(qiáng)力推薦一款Sunny大大搭建的ngrok服務(wù)好用的不行,而且有免費(fèi)選項(xiàng),感覺(jué)平時(shí)夠用了。那么,為什么自己還要搭建一個(gè)呢?可能剛剛看過(guò)兩眼的docker入門(mén),想來(lái)嘗試一下吧。恩,也可能是閑的吧┑( ̄Д  ̄)┍
ps: ngrok 2版本已商業(yè)化,開(kāi)源的只到1.7版本,聽(tīng)說(shuō)會(huì)有些性能問(wèn)題。還有一款基于go的開(kāi)源的內(nèi)網(wǎng)穿透工具frp 在末尾添加了frp 的配置
搭建過(guò)程至于玩法,1)可以將本地的server的端口代理到外網(wǎng)可訪(fǎng)問(wèn),便于微信開(kāi)發(fā)或者暴露內(nèi)網(wǎng)的服務(wù)器等。2)可以代理ssh 連接,比如可以連接家里的樹(shù)莓派。
ps:在使用docker-compose 集成Nginx反向代理時(shí) 發(fā)現(xiàn)暴露的端口有點(diǎn)多,況且nginx都是服務(wù)端的標(biāo)配了,所以就去掉了。╮( ̄▽?zhuān)?)╭
還是直接上實(shí)在的吧(以下命令基于Ubuntu):
準(zhǔn)備
域名
域名可購(gòu)買(mǎi)略
域名解析設(shè)置
服務(wù)器
所需軟件安裝
克隆源碼
生成證書(shū)
編譯生成服務(wù)端軟件 和 客戶(hù)端軟件
容器化
生成鏡像
利用docker-compose 集成Nginx反向代理
假設(shè)你的域名為: yourset.com
假設(shè)你的ngrok服務(wù)二級(jí)訪(fǎng)問(wèn)域名為:ngrok.yourset.com
添加如下解析:ngrok.yourset.com --->A記錄 your ip
*.ngrok.yourset.com --->CNAME 到 ngrok.yourset.com(可自由配置)
服務(wù)環(huán)境設(shè)置基于 Ubuntu 16.04
安裝git
$ sudo apt-get update
$ sudo apt-get install git
安裝go lang
$ 下載go1.9.2.linux-amd64.tar.gz(注意對(duì)應(yīng)自己的系統(tǒng)下載,具體請(qǐng)參考上方連接)
$ tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
$ vi /root/.bashrc 或者 /home/user/.zsh #根據(jù)你的用戶(hù)選取
$ export PATH=$PATH:/usr/local/go/bin #添加環(huán)境變量
$ source /root/.bashrc #更新環(huán)境變量
$ cd /usr/local $ git clone https://github.com/inconshreveable/ngrok.git引入環(huán)境變量
$ export GOPATH=/usr/local/ngrok/ #目錄位置 $ export NGROK_DOMAIN="ngrok.yourset.com" #你的ngrok服務(wù)二級(jí)域名根據(jù)你的域名生成證書(shū)
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 2048 openssl 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證書(shū)替換
cp rootCA.pem assets/client/tls/ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key客戶(hù)端版本說(shuō)明
Linux 平臺(tái) 32 位系統(tǒng):GOOS=linux GOARCH=386
Linux 平臺(tái) 64 位系統(tǒng):GOOS=linux GOARCH=amd64
Windows 平臺(tái) 32 位系統(tǒng):GOOS=windows GOARCH=386
Windows 平臺(tái) 64 位系統(tǒng):GOOS=windows GOARCH=amd64
MAC 平臺(tái) 32 位系統(tǒng):GOOS=darwin GOARCH=386
MAC 平臺(tái) 64 位系統(tǒng):GOOS=darwin GOARCH=amd64
ARM 平臺(tái):GOOS=linux GOARCH=arm
編譯服務(wù)端的 ngrokd(客戶(hù)端和服務(wù)端生成的文件均在/usr/local/ngrok/bin下)
$ GOOS=linux GOARCH=amd64 make release-server #根據(jù)平臺(tái)選取
編譯客戶(hù)端 ngrok(可生成壓縮包下載到本地然后放到網(wǎng)盤(pán)存起來(lái)?方便以后使用)
$ GOOS=darwin GOARCH=amd64 make release-client #mac 64 $ GOOS=windows GOARCH=amd64 make release-client #win64 $ GOOS=linux GOARCH=amd64 make release-client #linux64 $ GOOS=linux GOARCH=arm make release-client #arm平臺(tái)如樹(shù)莓派開(kāi)啟服務(wù)端(設(shè)置端口是請(qǐng)注意端口是否打開(kāi),以及防火墻配置)
$ /usr/local/ngrok/bin/ngrokd -domain="ngrok.yourset.com" -httpAddr=":2443" -httpsAddr=":3443" -tunnelAddr=":4443" 參數(shù)說(shuō)明: -domain 訪(fǎng)問(wèn)ngrok是所設(shè)置的服務(wù)地址生成證書(shū)時(shí)那個(gè) -httpAddr http協(xié)議端口 默認(rèn)為80 -httpsAddr https協(xié)議端口 默認(rèn)為443 (可配置https證書(shū)) -tunnelAddr 通道端口 默認(rèn)4443啟動(dòng)客戶(hù)端-使用命令行參數(shù)(以mac為例)
將客戶(hù)端放到自己喜歡的位置并在當(dāng)前目錄下創(chuàng)建配置文件
$ vi ngrok.yml
寫(xiě)入如下內(nèi)容
server_addr: "ngrok.yourset.com:4443" trust_host_root_certs: false
啟動(dòng)客戶(hù)端命令
$ ./ngrok -config=./ngrok.yml -proto=http -subdomain=test 8080 #啟動(dòng)http轉(zhuǎn)發(fā) $ ./ngrok -config=./ngrok.yml -proto=tpc 22 #啟動(dòng)tcp轉(zhuǎn)發(fā) 本地22端口,遠(yuǎn)程隨機(jī)暴露大端口
參數(shù)說(shuō)明:
trust_host_root_certs #是否信任系統(tǒng)根證書(shū),如果是帶自簽名證書(shū)編譯的 ngrok 客戶(hù)端,這個(gè)值應(yīng)該設(shè)置為 false;如果使用 CA 證書(shū),或者用戶(hù)添加了根證書(shū),這個(gè)值應(yīng)該設(shè)置為 true -proto #轉(zhuǎn)發(fā)協(xié)議 不指定默認(rèn)是 http+https -subdomain #訪(fǎng)問(wèn)本地時(shí)的三級(jí)域名 不指定就會(huì)隨機(jī)生成 tcp不支持此參數(shù) 8080 #本地服務(wù)的端口號(hào) -config #指定配置位置,默認(rèn)為$HOME/.ngrok2/ngrok.yml啟動(dòng)客戶(hù)端-使用配置文件
在ngrok中寫(xiě)入如下內(nèi)容:
server_addr: "ngrok.yourset.com:4443" trust_host_root_certs: false tunnels: web: proto: http: "3000" web2: proto: http: "8080" tcp: proto: tcp: "3022" remote_port: 4444 tcp2: proto: tcp: "22" remote_port: 4445
啟動(dòng)單個(gè)服務(wù)如
$ ./ngrok -config=./ngrok.yml start web #啟動(dòng)web服務(wù) 使用的前綴域名為web $ ./ngrok -config=./ngrok.yml start tcp #啟動(dòng)tcp服務(wù) 使用遠(yuǎn)程端口3022
啟動(dòng)多個(gè)服務(wù):
$ ./ngrok -config=./ngrok.yml start web tcp #同時(shí)啟動(dòng)兩個(gè)服務(wù) $ ./ngrok -config=./ngrok.yml start-all #啟動(dòng)所有服務(wù)
### docker 配置 和 Nginx配置
基本搭建到上面基本就能用了,但是對(duì)于暴露80端口的問(wèn)題這時(shí)就需要使用Nginx做一個(gè)端口的反向代理。
而加入使用的vps更換了話(huà),就要重新再來(lái)搭建一遍,想想用docker的話(huà),那不就很方便嗎。
此次更新去掉了docker的配置,當(dāng)初,剛學(xué)會(huì)點(diǎn)docker 便為了docker而docker,并沒(méi)有考慮是否合適當(dāng)前的場(chǎng)景。ngrok 作為一個(gè)內(nèi)網(wǎng)穿透的小工具,有時(shí)可能會(huì)時(shí)常更改配置等,所以作為本地的一個(gè)開(kāi)機(jī)啟動(dòng)的小服務(wù)即可。設(shè)置開(kāi)機(jī)啟動(dòng)
vim /usr/lib/systemd/system/ngrok.service ## 輸入: [Unit] Description=ngrok After=network.target [Service] TimeoutStartSec=30 ExecStart=/usr/local/ngrok/bin/ngrokd -domain="ngrok.yourset.com" -httpAddr=":2443" -httpsAddr=":3443" -tunnelAddr=":4443" ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target ## 命令 $ sudo systemctl enable ngrok # 設(shè)置開(kāi)機(jī)啟動(dòng) $ sudo systemctl start ngrok # 開(kāi)啟ngrok $ sudo systemctl status ngrok # 查看狀態(tài) $ sudo systemctl stop ngrok # 停止frp 內(nèi)網(wǎng)穿透配置
相對(duì)于 ngrok 另一款國(guó)內(nèi)大牛做的 frp要顯的更加輕量安全易配置些。
中文文檔講解的也是十分全面,以下是我的相關(guān)配置
服務(wù)器端:
將文件下載解壓后的 frps 和 frps.ini 放到當(dāng)前目錄
編輯 frps.ini 文件
[common] bind_addr = 0.0.0.0 (yourip) bind_port = 7000 (frp通信端口) dashboard_port = 8020 (web端查看端口 可省略) vhost_http_port = 8021 (http 端口) # dashboard user and pwd for basic auth protect, if not set, both default value is admin dashboard_user = yourusername dashboard_pwd = yourpass privilege_token = yourtoken
配置開(kāi)機(jī)啟動(dòng):
[Unit] Description=frps After=network.target [Service] TimeoutStartSec=30 ExecStart=/home/user/tool/frps/frps -c /etc/frp/frps.ini ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target $ sudo systemctl enable frps # 設(shè)置開(kāi)機(jī)啟動(dòng) $ sudo systemctl start frps # 開(kāi)啟ngrok $ sudo systemctl status frps # 查看狀態(tài) $ sudo systemctl stop frps # 停止
同理設(shè)置客戶(hù)端 添加自動(dòng)啟動(dòng)即可通過(guò)域名或者ip 從外網(wǎng)訪(fǎng)問(wèn)或鏈接內(nèi)網(wǎng) frp 正處于開(kāi)發(fā)階段有很多實(shí)用的功能等大家去發(fā)現(xiàn)。
后記對(duì)比f(wàn)rp ngrok 的搭建要繁瑣不少,但 ngrok 在的優(yōu)勢(shì)在于 方便本地調(diào)試,因?yàn)樵陂_(kāi)啟本地服務(wù)的同時(shí),也會(huì)開(kāi)啟一個(gè)本地的webserver 來(lái)監(jiān)聽(tīng) 請(qǐng)求的相應(yīng) 如 get 和 post 的具體數(shù)據(jù) 以及服務(wù)端返回的數(shù)據(jù)。對(duì)于本地調(diào)試來(lái)說(shuō)是十分方便的。而 frp 對(duì)于代理本地端的服務(wù),ssh等還是十分出色的,比如我調(diào)試的時(shí)候使用ngrok,而家里用來(lái)折騰的樹(shù)莓派 就使用了frp。最后祝大家愉快的玩耍~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/26840.html
閱讀 2225·2021-11-15 17:57
閱讀 921·2021-11-11 16:54
閱讀 2758·2021-09-27 13:58
閱讀 4716·2021-09-06 15:00
閱讀 1130·2021-09-04 16:45
閱讀 3659·2019-08-30 15:56
閱讀 1918·2019-08-30 15:53
閱讀 1900·2019-08-30 14:12