什麼是「FRP」? 當您的網路環境沒有「公網地址」(Public IP) 搭建「FRP」可以實現「公網穿透內網」原理相當於「反向代理服務器」,可以達成「TCP、UDP、HTTP、HTTPS」轉發,詳細原理請參考該作者「https://github.com/fatedier/frp」,可以搭建在「Windows」和「Linux」主機。
要實現這一目標,先得有一個具備公網 IP 的 VPS ( vultr 、virmach、Bandwagonhost ) 或 主機,雖說還是離不開公網IP,但在大陸這總比找寬帶運營商要個公網IP簡單多了。
使用版本「frp_0.17.0_linux_amd64.tar.gz」內含 ( frps 和 frpc )
簡單步驟原理講解
1. Domain (一級域名) 供應商「指向」frps 公網 IP (完成域名解析)
PS. DDNS 動態域名沒測試過
2. 配置「frps」服務器端
=== frps ( Server ) ===
#修改「電腦」名稱
hostnamectl set-hostname Frps
#加入「防火牆」規則 - Frp Server
sudo firewall-cmd --add-port=7000/tcp --permanent
#加入「防火牆」規則 - Https
sudo firewall-cmd --add-port=443/tcp --permanent
#加入「防火牆」規則 - Http
sudo firewall-cmd --add-port=80/tcp --permanent
#重新啟動「防火牆」
sudo firewall-cmd --reload
#關閉「selinux」
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#需要「Reboot」重開機
reboot -h now
#切換「/opt」目錄
cd /opt
#下載「frp_0.17.0_linux_amd64.tar.gz」
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
#解壓縮「frp_0.17.0_linux_amd64.tar.gz」
tar -zxvf frp_0.17.0_linux_amd64.tar.gz
#切換「frp_0.17.0_linux_amd64」目錄
cd /opt/frp_0.17.0_linux_amd64
#刪除「客戶端」文件
rm -f frpc frpc_full.ini frpc.ini
#編輯「服務器端」檔案 ( frps.ini )
vi /opt/frp_0.17.0_linux_amd64/frps.ini
[common]
bind_port = 7000 #啟用「監聽端口」
vhost_http_port = 80 #啟用「監聽端口」
vhost_https_port = 443 #啟用「監聽端口」
privilege_mode = true # 傳輸「加密」
privilege_token = 789 #「加密」認證
[https]
type = https
[http]
type = http
#賦予「授權」
chmod +x frps frps.ini
#背景執行
nohup /opt/frp_0.17.0_linux_amd64/frps -c /opt/frp_0.17.0_linux_amd64/frps.ini &
#檢查「Log」
cat /opt/frp_0.17.0_linux_amd64/nohup.out
#檢查「端口」狀態
netstat -ltunp
3. 配置「frpc」客戶端
=== frpc ( Client ) ===
#修改「電腦」名稱
hostnamectl set-hostname Frps
#加入「防火牆」規則 - Frp Server
sudo firewall-cmd --add-port=7000/tcp --permanent
#加入「防火牆」規則 - Https
sudo firewall-cmd --add-port=443/tcp --permanent
#加入「防火牆」規則 - Http
sudo firewall-cmd --add-port=80/tcp --permanent
#重新啟動「防火牆」
sudo firewall-cmd --reload
#關閉「selinux」
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#需要「Reboot」重開機
reboot -h now
#切換「/opt」目錄
cd /opt
#下載「frp_0.17.0_linux_amd64.tar.gz」
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
#解壓縮「frp_0.17.0_linux_amd64.tar.gz」
tar -zxvf frp_0.17.0_linux_amd64.tar.gz
#切換「frp_0.17.0_linux_amd64」目錄
cd /opt/frp_0.17.0_linux_amd64
#刪除「客戶端」文件
rm -f frpc frpc_full.ini frpc.ini
#編輯「服務器端」檔案 ( frps.ini )
vi /opt/frp_0.17.0_linux_amd64/frps.ini
[common]
bind_port = 7000 #啟用「監聽端口」
vhost_http_port = 80 #啟用「監聽端口」
vhost_https_port = 443 #啟用「監聽端口」
privilege_mode = true # 傳輸「加密」
privilege_token = 789 #「加密」認證
[https]
type = https
[http]
type = http
#賦予「授權」
chmod +x frps frps.ini
#背景執行
nohup /opt/frp_0.17.0_linux_amd64/frps -c /opt/frp_0.17.0_linux_amd64/frps.ini &
#檢查「Log」
cat /opt/frp_0.17.0_linux_amd64/nohup.out
#檢查「端口」狀態
netstat -ltunp
3. 配置「frpc」客戶端
=== frpc ( Client ) ===
#切換「/opt」目錄
cd /opt
#下載「frp_0.17.0_linux_amd64.tar.gz」
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
#解壓縮「frp_0.17.0_linux_amd64.tar.gz」
tar -zxvf frp_0.17.0_linux_amd64.tar.gz
#切換「/opt/frp_0.17.0_linux_amd64」目錄
cd /opt/frp_0.17.0_linux_amd64
#刪除「服務器端」文件
rm -f frps frps_full.ini frps.ini
#編輯「客戶端」檔案 (frpc.ini)
vi /opt/frp_0.17.0_linux_amd64/frpc.ini
[common]
server_addr = 219.76.152.250 #指向「服務器端」IP
server_port = 7000 #服務器「監聽端口」
privilege_token = 789 # 驗證「密碼」
[http_01] #自訂「標籤」不能重複
type = http #建立「協議」
local_ip=192.168.3.251 #內網「主機」
local_port = 80 #內網「端口」
custom_domains=zabbix.contoso.com #自訂「二級」域名
#「實現」端口轉發 範例
[forwarding_01]
type = tcp
local_ip=192.168.3.250
local_port = 3389
remote_port = 5000
#背景執行
nohup /opt/frp_0.17.0_linux_amd64/frpc -c /opt/frp_0.17.0_linux_amd64/frpc.ini &
#檢查「Log」
cat /opt/frp_0.17.0_linux_amd64/nohup.out
接著透過「瀏覽器」輸入「http://zabbix.contoso.com」即可完成 Frp 內網穿透,有興趣朋友可以接著研究「frp xtcp」可以完成「P2P」點對點傳輸,大幅節省 vps 主機 頻寬流量限額 。
參考資料