一、背景
筆者最近折騰docker服務比較多,這幾天想把在内網中的服務搬到公網當中,但docker對記憶體要求較高,而雲服務高記憶體的伺服器又比較貴,家裡雖然有一台舊筆記本記憶體還可以,但是沒有公網IP位址,視乎還是沒有辦法,就在糾結的時候想起FRP這個内網穿透軟體,重新回顧了一下搭建方法,發現搭建步驟較為簡單,為了以後有所參考,是以把搭建步驟詳細記錄了下來。
二、操作步驟
- 配置服務端
- 配置用戶端
- 檢驗與測試
三、配置服務端
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.gz
和
frp_0.21.0_darwin_amd64.tar.gz
兩個壓縮包,如下圖所示
image
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.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
複制
解壓之後并進入檔案夾檢視,參考指令如下
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 修改配置
在傳回結果當中可以看到有多個檔案,不過筆者實際上隻需要關心
frps
和
frps.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
複制
四、配置用戶端
在配置服務端完成之後,筆者還需要在内網中配置用戶端,這個用戶端也就是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 配置服務
用戶端所需注意的檔案有兩個,分别是
frpc
和
frpc.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服務也代理成功,說明筆者的配置無誤
五、檢驗與測試
前面的操作已經成功的配置了内網穿透服務,現在筆者需要通過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 [email protected]
複制
檢視目前檔案夾,驗證是否已經映射成功,參考指令如下
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