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

1、背景

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

2、操做步驟

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

3、配置服務端

FRP分爲服務端與客戶端,一個服務端能夠對應多個客戶端,筆者首先須要在服務器中下載並安裝FRPhtml

3.1 文件選擇

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

https://github.com/fatedier/frp

在文檔當中能夠看到編譯好的二進制文件,URL地址以下:nginx

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

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

image

3.2 下載與解壓

如今須要在服務器中下載對應版本,首先經過ssh登陸服務器,參考命令以下github

ssh root@121.42.11.33

登陸服務器以後,筆者須要使用wget下載文件,參考命令以下web

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

下載以後,須要解壓剛纔下載的壓縮文件,參考命令以下docker

tar -zxvf frp_0.21.0_linux_amd64.tar.gz

命令返回結果以下vim

frp_0.21.0_linux_amd64/
frp_0.21.0_linux_amd64/frps_full.ini
frp_0.21.0_linux_amd64/frps.ini
frp_0.21.0_linux_amd64/frpc
frp_0.21.0_linux_amd64/frpc_full.ini
frp_0.21.0_linux_amd64/frps
frp_0.21.0_linux_amd64/LICENSE
frp_0.21.0_linux_amd64/frpc.ini

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

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 = 7000
vhost_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:7000
2018/08/29 23:43:30 [I] [service.go:172] http service listen on 0.0.0.0:8888
2018/08/29 23:43:30 [I] [root.go:207] Start frps success

4、配置客戶端

在配置服務端完成以後,筆者還須要在內網中配置客戶端,這個客戶端也就是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.ini
x frp_0.21.0_darwin_amd64/frps.ini
x frp_0.21.0_darwin_amd64/frpc
x frp_0.21.0_darwin_amd64/frpc_full.ini
x frp_0.21.0_darwin_amd64/frps
x frp_0.21.0_darwin_amd64/LICENSE
x 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.1
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

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

vim  fprc.ini

編輯後的結果以下所示

[common]
server_addr = 121.42.11.33
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 5000

[web]
type = http
local_port = 8080
custom_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 success
2018/08/30 09:50:07 [I] [control.go:169] [55b8b354889e6f44] [web] start proxy success

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

5、檢驗與測試

前面的操做已經成功的配置了內網穿透服務,如今筆者須要經過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/

訪問結果以下圖所示

image

5.2 測試SSH服務

驗證SSH的方式是經過ssh鏈接外網地址,若是登錄到本地服務器便說明ssh服務搭建成功

使用ssh登錄,參考命令以下

ssh -p 5000 song@test.songboy.net

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

ls -l

返回結果以下

total 0
drwx------@   4 song  staff   136  7 19 18:37 Applications
drwx------@  12 song  staff   408  8 30 09:47 Desktop
drwx------@  30 song  staff  1020  8  6 08:58 Documents
drwx------+ 120 song  staff  4080  8 29 17:05 Downloads
drwx------@  65 song  staff  2210  8 18 16:12 Library
drwx------+   5 song  staff   170  8 17 15:19 Movies
drwx------+   5 song  staff   170  7 26 11:45 Music
drwx------+   4 song  staff   136  8 28 19:21 Pictures
drwxr-xr-x+   4 song  staff   136  7 19 16:33 Public
drwxr-xr-x    8 song  staff   272  8 24 14:26 config
drwxr-xr-x   22 song  staff   748  8 14 11:00 data
drwxr-xr-x    7 song  staff   238  8 24 19:31 dockerFile
drwxr-xr-x   12 song  staff   408  8 30 09:28 files
drwxr-xr-x    7 song  staff   238  8 13 09:54 mycode
drwxrwxrwx   20 song  staff   680  8 27 16:35 xhprof

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


做者:湯青松

微信:songboy8888

日期:2018-08-30

相關文章
相關標籤/搜索