使用Frp內網穿透快速搭建Web應用實踐

來自專欄 PHP技術大全9 人贊了文章

一、背景

筆者最近折騰docker服務比較多,這幾天想把在內網中的服務搬到公網當中,但docker對內存要求較高,而雲服務高內存的伺服器又比較貴,家裡雖然有一台舊筆記本內存還可以,但是沒有公網IP地址,視乎還是沒有辦法,就在糾結的時候想起FRP這個內網穿透軟體,重新回顧了一下搭建方法,發現搭建步驟較為簡單,為了以後有所參考,所以把搭建步驟詳細記錄了下來。

二、操作步驟

  1. 配置服務端
  2. 配置客戶端
  3. 檢驗與測試

三、配置服務端

FRP分為服務端與客戶端,一個服務端可以對應多個客戶端,筆者首先需要在伺服器中下載並安裝FRP

3.1 文件選擇

frp是開源的一個內網穿透軟體,github源碼以及文檔地址如下

https://github.com/fatedier/frp

在文檔當中可以看到編譯好的二進位文件,URL地址如下:

https://github.com/fatedier/frp/releases

在下載地址當中有多個版本,筆者需要選擇自己所對應系統的版本,筆者伺服器使用的是64位的Centos系統,客戶端使用的是mac系統,因此需要下載frp_0.21.0_linux_amd64.tar.gzfrp_0.21.0_darwin_amd64.tar.gz兩個壓縮包,如下圖所示

3.2 下載與解壓

現在需要在伺服器中下載對應版本,首先通過ssh登錄伺服器,參考命令如下

ssh [email protected]

登錄伺服器之後,筆者需要使用wget下載文件,參考命令如下

wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz

下載之後,需要解壓剛才下載的壓縮文件,參考命令如下

tar -zxvf frp_0.21.0_linux_amd64.tar.gz

命令返回結果如下

frp_0.21.0_linux_amd64/frp_0.21.0_linux_amd64/frps_full.inifrp_0.21.0_linux_amd64/frps.inifrp_0.21.0_linux_amd64/frpcfrp_0.21.0_linux_amd64/frpc_full.inifrp_0.21.0_linux_amd64/frpsfrp_0.21.0_linux_amd64/LICENSEfrp_0.21.0_linux_amd64/frpc.ini

解壓之後並進入文件夾查看,參考命令如下

cd frp_0.21.0_linux_amd64 && ll

返回結果如下

-rw-rw-r-- 1 root root 12K Aug 12 12:38 LICENSE-rwxrwxr-x 1 root root 7.2M Aug 12 12:34 frpc-rw-rw-r-- 1 root root 126 Aug 12 12:38 frpc.ini-rw-rw-r-- 1 root root 5.6K Aug 12 12:38 frpc_full.ini-rwxrwxr-x 1 root root 8.6M Aug 12 12:34 frps-rw-rw-r-- 1 root root 26 Aug 12 12:38 frps.ini-rw-rw-r-- 1 root root 2.4K Aug 12 12:38 frps_full.ini

3.3 修改配置

在返回結果當中可以看到有多個文件,不過筆者實際上只需要關心frpsfrps.ini就可以了

查看配置文件參考命令如下

cat frps.ini

返回結果如下

[common]bind_port = 7000

在返回結果當中可以看到埠為7000,這個埠便是FRP與客戶端通信的埠,因為筆者需要搭建Web服務,所以需要在配置文件當中加入http服務的監聽埠,參考命令如下

vim frps.ini

修改配置文件,修改後的配置文件內容如下

[common]bind_port = 7000vhost_http_port = 8888

3.4 服務啟動

修改完成之後,筆者便可啟動FRPS服務,參考命令如下

./frps -c frps.ini

返回結果

2018/08/29 23:43:30 [I] [service.go:130] frps tcp listen on 0.0.0.0:70002018/08/29 23:43:30 [I] [service.go:172] http service listen on 0.0.0.0:88882018/08/29 23:43:30 [I] [root.go:207] Start frps success

四、配置客戶端

在配置服務端完成之後,筆者還需要在內網中配置客戶端,這個客戶端也就是Web伺服器,具體操作如下

4.1 下載與解壓

搭建FRP客戶端,首先需要在客戶端下載FRP壓縮文件;筆者mac系統所下載文件及對應的參考命令如下

wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_darwin_amd64.tar.gz

下載之後同樣需要解壓文件,參考命令如下

tar -zxvf frp_0.21.0_darwin_amd64.tar.gz

命令執行之後返回結果如下

x frp_0.21.0_darwin_amd64/x frp_0.21.0_darwin_amd64/frps_full.inix frp_0.21.0_darwin_amd64/frps.inix frp_0.21.0_darwin_amd64/frpcx frp_0.21.0_darwin_amd64/frpc_full.inix frp_0.21.0_darwin_amd64/frpsx frp_0.21.0_darwin_amd64/LICENSEx frp_0.21.0_darwin_amd64/frpc.ini

進入解壓的文件夾中並查看文件列表,參考命令如下

cd frp_0.21.0_darwin_amd64 && ll

執行後返回的信息如下

total 35632-rw-r--r-- 1 song staff 11K Aug 12 12:38 LICENSE-rwxr-xr-x 1 song staff 8.0M Aug 12 12:33 frpc-rw-r--r-- 1 song staff 126B Aug 12 12:38 frpc.ini-rw-r--r-- 1 song staff 5.6K Aug 12 12:38 frpc_full.ini-rwxr-xr-x 1 song staff 9.4M Aug 12 12:33 frps-rw-r--r-- 1 song staff 26B Aug 12 12:38 frps.ini-rw-r--r-- 1 song staff 2.3K Aug 12 12:38 frps_full.ini

4.2 配置服務

客戶端所需注意的文件有兩個,分別是frpcfrpc.ini,先來查看配置文件默認內容是什麼,參考命令如下

cat frpc.ini

返回結果如下

[common]server_addr = 127.0.0.1server_port = 7000[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000

在默認的客戶端配置文件當中,配置了一個TCP映射,不過筆者需要搭建Web服務,因此還需要添加一個HTTP映射,並修改對應的服務端IP地址,參考命令如下

vim fprc.ini

編輯後的結果如下所示

[common]server_addr = 121.42.11.33server_port = 7000[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 5000[web]type = httplocal_port = 8080custom_domains = test.songboy.net

4.3 啟動服務

修改客戶端的配置文件完成之後,筆者需要讓客戶端的FRP來連接服務端的FRP服務,參考命令如下

sudo ./frpc -c frpc.ini

執行命令後返回結果如下所示

2018/08/30 09:50:07 [I] [proxy_manager.go:300] proxy removed: []2018/08/30 09:50:07 [I] [proxy_manager.go:310] proxy added: [ssh web]2018/08/30 09:50:07 [I] [proxy_manager.go:333] visitor removed: []2018/08/30 09:50:07 [I] [proxy_manager.go:342] visitor added: []2018/08/30 09:50:07 [I] [control.go:246] [55b8b354889e6f44] login to server success, get run id [55b8b354889e6f44], server udp port [0]2018/08/30 09:50:07 [I] [control.go:169] [55b8b354889e6f44] [ssh] start proxy success2018/08/30 09:50:07 [I] [control.go:169] [55b8b354889e6f44] [web] start proxy success

在返回結果當中,可以看到ssh服務代理成功,web服務也代理成功,說明筆者的配置無誤

五、檢驗與測試

前面的操作已經成功的配置了內網穿透服務,現在筆者需要通過ssh登錄和web服務來驗證服務是否可用,操作步驟如下

5.1 測試Web服務

測試Web服務是否穿透可以通過訪問外網地址,如果能打開內網中的Web服務便說明搭建成功,這裡需要搭建一個虛擬主機,參展步驟如下

5.1.2 添加虛擬主機

要讓用戶能通過外網訪問Web服務,首先需要配置一個域名讓其解析到FRP伺服器當中,這裡為了驗證方面,便使用hosts添加記錄方式操作,參考命令如下

sudo vim /etc/hosts

在尾部添加一條host記錄,參考內容如下

121.42.11.33 test.songboy.net

添加的內容當中,IP地址為外網用戶能訪問到的IP地址,也就是筆者開始搭建FRP伺服器的IP地址

接下來筆者還需要增加一個虛擬主機,所以需要修改nginx配置文件,在nginx配置文件中添加配置如下

server {listen 8080;server_name test.songboy.net;root /Users/song/mycode/work/media-server-api/public;index index.html index.htm index.php;location / {try_files $uri $uri/ /index.php?$query_string;}location ~ .php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}

重啟nginx ,參考命令如下

sudo nginx -s reload

5.1.3 訪問網站

通過瀏覽器訪問,URL地址如下

http://test.songboy.net:8888/

訪問結果如下圖所示

5.2 測試SSH服務

驗證SSH的方式是通過ssh連接外網地址,如果登陸到本地伺服器便說明ssh服務搭建成功

使用ssh登陸,參考命令如下

ssh -p 5000 [email protected]

查看當前文件夾,驗證是否已經映射成功,參考命令如下

ls -l

返回結果如下

total 0drwx------@ 4 song staff 136 7 19 18:37 Applicationsdrwx------@ 12 song staff 408 8 30 09:47 Desktopdrwx------@ 30 song staff 1020 8 6 08:58 Documentsdrwx------+ 120 song staff 4080 8 29 17:05 Downloadsdrwx------@ 65 song staff 2210 8 18 16:12 Librarydrwx------+ 5 song staff 170 8 17 15:19 Moviesdrwx------+ 5 song staff 170 7 26 11:45 Musicdrwx------+ 4 song staff 136 8 28 19:21 Picturesdrwxr-xr-x+ 4 song staff 136 7 19 16:33 Publicdrwxr-xr-x 8 song staff 272 8 24 14:26 configdrwxr-xr-x 22 song staff 748 8 14 11:00 datadrwxr-xr-x 7 song staff 238 8 24 19:31 dockerFiledrwxr-xr-x 12 song staff 408 8 30 09:28 filesdrwxr-xr-x 7 song staff 238 8 13 09:54 mycodedrwxrwxrwx 20 song staff 680 8 27 16:35 xhprof

在返回結果當中,可以看到文件夾與客戶端的文件夾一致,便說明ssh服務以及驗證成功。


作者:湯青松

微信:songboy8888

日期:2018-08-30


推薦閱讀:
相关文章