http
或 https
服務。http
, https
服務支援基於域名的虛擬主機,支援自定義域名系結,使多個域名可以共用一個 80 埠。tcp
和 udp
服務,例如在家裡通過 ssh
存取處於公司內網環境內的主機。(1)實現功能
(2)設定前準備
linux
環境,win10
上面 vmware15
安裝的 centos7
)web
服務,否則可以不用)web
服務,可以用 tomcat
模擬,這裡就不演示了 公網伺服器與內網伺服器都需要下載 frp
進行安裝,這裡以 frp_0.34.1_linux_amd64.tar.gz 下載為例。
伺服器端:這裡表示的是阿里雲的伺服器
# 1.建立資料夾(看需求)
[topcloud@alihadoop opt]$ sudo mkdir software
# 2.更改資料夾所屬使用者和組(看需求)
[topcloud@alihadoop opt]$ sudo chown topcloud:topcloud software/
# 3.下載 FRP
[topcloud@alihadoop software]$ wget https://github.91chifun.workers.dev//https://github.com/fatedier
/frp/releases/download/v0.34.1/frp_0.34.1_linux_amd64.tar.gz
# 4.檢視是否下載完成
[topcloud@alihadoop software]$ ls
frp_0.34.1_linux_amd64.tar.gz
# 5.解壓 frp 檔案
[topcloud@alihadoop software]$ tar -zxvf frp_0.34.1_linux_amd64.tar.gz
# 6.行動資料夾
[topcloud@alihadoop software]$ mv frp_0.34.1_linux_amd64 /opt/module/frp
# 7.檢視 frp 檔案
# frps:伺服器端所需要的
# frpc:使用者端所需要的
[topcloud@alihadoop software]$ ll /opt/module/frp/
total 22608
-rwxrwxr-x 1 topcloud topcloud 9908224 Sep 30 15:38 frpc
-rw-rw-r-- 1 topcloud topcloud 7928 Sep 30 15:44 frpc_full.ini
-rw-rw-r-- 1 topcloud topcloud 126 Sep 30 15:44 frpc.ini
-rwxrwxr-x 1 topcloud topcloud 13205504 Sep 30 15:38 frps
-rw-rw-r-- 1 topcloud topcloud 4928 Sep 30 15:44 frps_full.ini
-rw-rw-r-- 1 topcloud topcloud 26 Sep 30 15:44 frps.ini
-rw-rw-r-- 1 topcloud topcloud 11358 Sep 30 15:44 LICENSE
drwxrwxr-x 2 topcloud topcloud 88 Sep 30 15:44 systemd
# 8.刪除使用者端的檔案(可以不刪,主要是為了避免操作時修改錯了檔案)
[topcloud@alihadoop frp]$ rm -rf frpc*
# 9.檢視是否刪除了
[topcloud@alihadoop frp]$ ll
total 12920
-rwxrwxr-x 1 topcloud topcloud 13205504 Sep 30 15:38 frps
-rw-rw-r-- 1 topcloud topcloud 4928 Sep 30 15:44 frps_full.ini
-rw-rw-r-- 1 topcloud topcloud 26 Sep 30 15:44 frps.ini
-rw-rw-r-- 1 topcloud topcloud 11358 Sep 30 15:44 LICENSE
drwxrwxr-x 2 topcloud topcloud 88 Sep 30 15:44 systemd
[common]
#與使用者端繫結的進行通訊的埠
bind_port = 7000
#存取使用者端web服務自定義的埠號
vhost_http_port = 6081
[root@alihadoop frp]# ./frps -c ./frps.ini
# 進入 frp 所在的目錄,然後使用以下命令
# nohup 和 & 常一起使用,"nohup 命令 &":用於後端啟動
[root@alihadoop frp]# nohup ./frps -c ./frps.ini >/dev/null 2>&1 &
[1] 1363
[root@alihadoop frp]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 1029/systemd-resolv
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1067/sshd
tcp6 0 0 :::5355 :::* LISTEN 1029/systemd-resolv
tcp6 0 0 :::7000 :::* LISTEN 1363/./frps
tcp6 0 0 :::6081 :::* LISTEN 1363/./frps
使用者端:這裡表示的是內網伺服器
# 前面步驟與伺服器端搭建一致
# 8.刪除伺服器端的檔案(可以不刪,主要是為了避免操作時修改錯了檔案)
[topcloud@hadoop103 frp]$ rm -rf frps*
# 9.檢視是否刪除了
[topcloud@hadoop103 frp]$ ll
total 12920
-rwxrwxr-x 1 topcloud topcloud 13205504 Sep 30 15:38 frpc
-rw-rw-r-- 1 topcloud topcloud 4928 Sep 30 15:44 frpc_full.ini
-rw-rw-r-- 1 topcloud topcloud 26 Sep 30 15:44 frpc.ini
-rw-rw-r-- 1 topcloud topcloud 11358 Sep 30 15:44 LICENSE
drwxrwxr-x 2 topcloud topcloud 88 Sep 30 15:44 systemd
[common]
#公網伺服器ip
server_addr = 47.114.110.230
#與伺服器端bind_port一致
server_port = 7000
[ssh]
#連線協定
type = tcp
#內網伺服器ip
local_ip = 192.168.10.102
#ssh預設埠號,代理伺服器的埠
local_port = 22
#自定義的存取內部ssh埠號
remote_port = 6102
#公網存取內部web伺服器以http方式
[web]
#存取協定
type = http
#內網web服務的埠號
local_port = 8081
#所繫結的公網伺服器域名,一級、二級域名都可以
custom_domains = lin.topcloud.com
若想連線到多個區域網內的使用者端,可以設定 [sshXXX]
,如下所示
#公網通過ssh存取內部伺服器,
[ssh103]
#連線協定
type = tcp
#內網伺服器ip
local_ip = 192.168.10.103
#ssh預設埠號,代理伺服器的埠
local_port = 22
#自定義的存取內部ssh埠號
remote_port = 6103
[topcloud@hadoop103 frp]# ./frpc -c ./frps.ini
# 進入 frp 所在的目錄,然後使用以下命令
# nohup 和 & 常一起使用,用於後端啟動
[topcloud@hadoop103 frp]# nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &
[1] 1688
[topcloud@hadoop103 frp]$ ps -ef | grep 1688
topcloud 1688 1600 2 15:44 pts/0 00:00:00 ./frpc -c ./frpc.ini
topcloud 1699 1600 0 15:44 pts/0 00:00:00 grep --color=auto 1688
>
:用於重定向/dev/null
:是一個黑洞,任何傳送的資料都將被丟棄'2'
:是標準錯誤的檔案描述符>
:用於重定向&
:是檔案描述符的符號(沒有它,以下 1 將被視為檔名)1
:是標準輸出的檔案描述符0 15:44 pts/0 00:00:00 grep --color=auto 1688
# 4、知識補充
## 4.1、'>/dev/null 2>&1' 是什麼意思?
* `>`:用於重定向
* `/dev/null`:是一個黑洞,任何傳送的資料都將被丟棄
* `'2'`:是標準錯誤的檔案描述符
* `>`:用於重定向
* `&`:是檔案描述符的符號(沒有它,以下 1 將被視為檔名)
* `1`:是標準輸出的檔案描述符
因此 `>/dev/null 2>&1` 將程式的輸出重定向到 `/dev/null`。包括 ==Standard Error== 和 ==Standard Out==。