在自建伺服器過程中,内網穿透是十分重要的一環,可以将内網服務暴露到公網。
我在文章:私有雲伺服器搭建教程(保姆級)——台式電腦+ubuntu+docker+nextcloud+mysql+花生殼内網穿透 中提到通過花生殼完成内網穿透的實作。相對于花生殼,frp是一種成本效益更好的内網穿透方式。
Frp作為内網穿透的常見手段,其前提條件是:一台配有公網Ip的雲伺服器(我的是阿裡雲)以及一個域名(非必須)。
雲伺服器系統:Alibaba Cloud Linux + 内網伺服器系統:Ubuntu 22.04.1 LTS
文章目錄
- 前言
- 一、frp介紹
-
- 1.frp 是什麼?
- 2.為什麼使用 frp?
- 二、Alibaba Cloud Linux介紹
- 三、安裝前的準備:區域網路(私網)實體伺服器、公網雲伺服器及域名解析設定
-
- 1.區域網路(私網)實體伺服器配置
- 2.公網雲伺服器設定
- 四、公網雲伺服器(Alibaba Cloud Linux)安裝Frps 服務
-
- 1. 安裝Frps
- 2. 設定Frps 服務開機自啟
- 3. 阿裡雲伺服器ESC添加安全組入站規則
- 五、内網伺服器(ubuntu)安裝Frp Client端
-
- 1. 安裝Frpc
- 2. 設定Frpc 服務開機自啟
- 六 點亮效果
- 七 踩坑記錄
- 總結
- 參考連結:
前言
本文主要講解 Alibaba Cloud Linux 上搭建Frp内網穿透服務的流程。
雲伺服器系統版本:Alibaba Cloud Linux 3.2104 LTS 64位 (相容Centos);私網實體伺服器作業系統:Ubuntu 22.04.1 LTS。
網上frp教程很多,其中不乏很多高品質的教程,對我自己在搭建Frp内網穿透過程中有很大幫助。但,每個人踩的坑并不相同,我踩了兩個坑。故,在此做一下記錄。如果能幫助到你,那是我的榮幸~
一、frp介紹
frp中文文檔
1.frp 是什麼?
frp 是一個專注于内網穿透的高性能的反向代理應用,支援 TCP、UDP、HTTP、HTTPS 等多種協定。可以将内網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。
2.為什麼使用 frp?
通過在具有公網 IP 的節點上部署 frp 服務端,可以輕松地将内網服務穿透到公網,同時提供諸多專業的功能特性,這包括:
- 用戶端服務端通信支援 TCP、KCP 以及 Websocket 等多種協定。
- 采用 TCP 連接配接流式複用,在單個連接配接間承載更多請求,節省連接配接建立時間。
- 代理組間的負載均衡。
- 端口複用,多個服務通過同一個服務端端口暴露。
- 多個原生支援的用戶端插件(靜态檔案檢視,HTTP、SOCK5 代理等),便于獨立使用 frp 用戶端完成某些工作。
- 高度擴充性的服務端插件系統,友善結合自身需求進行功能擴充。
- 服務端和用戶端 UI 頁面。
二、Alibaba Cloud Linux介紹
随着 CentOS 的停止維護,Alibaba Cloud Linux 成了一個替換方案。
Alibaba Cloud Linux 文檔
Alibaba Cloud Linux是阿裡雲基于龍蜥社群(OpenAnolis)的龍蜥作業系統(Anolis OS)打造的作業系統發行版,在相容RHEL/CentOS生态的同時,為雲上應用程式提供安全、穩定、高性能的定制化運作環境,并針對雲基礎設施進行了深度優化。
總的來說,Alibaba Cloud Linux相容CentOS,CentOS上的指令,在Alibaba Cloud Linux同樣可以運作。
三、安裝前的準備:區域網路(私網)實體伺服器、公網雲伺服器及域名解析設定
1.區域網路(私網)實體伺服器配置
我這裡,在内網伺服器上已經搭建起了一個服務。現在我需要的就是通過内網穿透,将内網伺服器的9001端口,暴露到公網上去。

2.公網雲伺服器設定
我購買了一台阿裡雲伺服器ESC。本文的公網ip我們用47.99.x.x表示。
四、公網雲伺服器(Alibaba Cloud Linux)安裝Frps 服務
1. 安裝Frps
先去GitHub檢視frp的最新版本 。找到适配自己系統的安裝包。這裡我選擇:frp_0.44.0_linux_amd64.tar.gz。
下載下傳安裝包
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
解壓
tar zxf frp_0.44.0_linux_amd64.tar.gz
移動至 /usr/local
在/usr/local/下建立一個frp檔案夾。/usr/local目錄類似于windows系統的C:/Progrem Files/。使用者自己編譯的軟體預設會安裝到這個目錄下。
mkdir /usr/local/frp
将frp_0.44.0_linux_amd64移動到 /usr/local/frp 裡面
mv frp_0.44.0_linux_amd64/* /usr/local/frp/
進入檔案夾
cd /usr/local/frp/
清單顯示根目錄下的檔案
frps就是frp server端的部分;frpc 是frp client端的部分。這裡我們隻需要關心Server端。
這裡我們可以直接删掉frpc、frpc_full.ini、frpc.ini三個檔案,節省硬碟空間
修改配置檔案:frps.ini
vi frps.ini
鍵入【i】,修改内容如下:
[common]
# frp server 綁定的端口
bind_port = 7000
# 設定 http 通路端口為 80
vhost_http_port = 80
# 設定域名(保證此域名可用;我們假設你的域名為【subdomain.yourdomain.com】)
subdomain_host = yourdomain.com
【bind_port】:frp用戶端連接配接服務端的端口
【vhost_http_port】:是http通路的端口(外網端口)。我這裡設定成80端口。也就是說,在配置正确的前提下,外網可以通過浏覽器直接通路【http://47.99.x.x】通路内網服務。
【subdomain_host】:你的一級域名。我們假設你的域名為:【subdomain.yourdomain.com】。【subdomain】是二級域名,【yourdomain.com】是一級域名。如果不需要用到域名則不需要配置此項。
[注意]:
建議1:不要加注釋。我在配置ini的時候,加了注釋好像會報錯。
建議2:新手建議隻設定這兩個,設定越多越容易出錯。建議走通後再慢慢改。
修改完成後。按下Esc退出編輯模式。然後輸入:wq儲存并退出。
啟動frps
./frps -c frps.ini
2. 設定Frps 服務開機自啟
建立背景啟動模版
vim /usr/lib/systemd/system/frp.service
設定啟動模版内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target
重新加載服務的配置檔案
systemctl daemon-reload
現在就可以用 systemctl 套裝來控制 frp 了。
對frp服務的啟動/停止/重新開機,檢視狀态,設定開機自啟/關閉開機自啟
systemctl start frp
systemctl stop frp
systemctl restart frp
systemctl status frp
systemctl enable frp
systemctl disable frp
這裡我們設定frp開機自啟,隻需要運作 systemctl enable frp 這句指令。
重新開機伺服器
重新開機後檢視frpc的狀态
systemctl status frp
Loaded:loaded Active:active (running) 就說明開機自啟成功。
3. 阿裡雲伺服器ESC添加安全組入站規則
雲伺服器的防火牆需要在雲控制台設定。
雲伺服器ECS->執行個體->執行個體詳情->安全組->配置規則
添加入站規則
我們這裡添加:7000(frp端口)、80(http預設端口)、443(https預設端口)三個端口
五、内網伺服器(ubuntu)安裝Frp Client端
1. 安裝Frpc
下載下傳安裝包
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
解壓
tar zxf frp_0.44.0_linux_amd64.tar.gz
移動至 /usr/local
同樣在/usr/local/下建立一個frp檔案夾。
sudo mkdir /usr/local/frp
将frp_0.44.0_linux_amd64移動到 /usr/local/frp 裡面
sudo mv frp_0.44.0_linux_amd64/* /usr/local/frp/
進入檔案夾
cd /usr/local/frp/
清單顯示根目錄下的檔案
frpc 是frp client端的部分。
修改配置檔案:frpc.ini
vi frpc.ini
修改frpc.ini
[common]
server_addr = 47.99.x.x
server_port = 7000
[web]
type = http
local_port = 9001
custom_domains = 47.99.x.x
[subdomain]
type = http
# 本地 web server 端口
local_port = 9001
# 二級域名名稱, 如:www
subdomain = subdomain
【server_addr】:frps雲服務的公網ip位址,這裡的47.99.x.x是我購買的雲伺服器ECS的公網ip
【server_port】:frps雲服務的端口
【type】:請求類型,建議用http,https需要證書。
【local_port】:本地伺服器需要暴露到公網上的服務端口
【custom_domains】:自定義域名。必須設定。建議新手先直接用ip。設定成功之後再改域名。用域名的話還需要配置域名解析和域名備案。
[注意]:
建議1:不要加注釋。我在配置ini的時候,加了注釋好像會報錯。
建議2:新手建議隻設定這5項,設定越多越容易出錯。建議走通後再慢慢改。
啟動frpc
./frpc -c frpc.ini
login to server successs:成功登入到服務端。
[web]start proxy success:啟動[web]協定成功。
2. 設定Frpc 服務開機自啟
進入到存放開機自啟檔案的路徑:
cd /etc/systemd/system
建立名為frpc的.service檔案:
sudo touch frpc.service
編輯上一步建立的檔案:
sudo vim frpc.service
然後将下面的代碼粘貼進去(先按i鍵,進入編輯模式,然後點選滑鼠右鍵粘貼):
[Unit]
Description=Frp Client Service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/bin/bash -c '/usr/local/frp/frpc -c /usr/local/frp/frpc.ini'
[Install]
WantedBy=multi-user.target
注意frpc 和 frpc.ini 的路徑,可以根據自己的實際情況修改。
設定開機自啟:
sudo systemctl enable frpc
重新開機伺服器
重新開機後檢視frps的狀态
sudo systemctl status frpc
Loaded:loaded Active:active (running) 就說明開機自啟成功。
六 點亮效果
frps 和 frpc 打通後,就可以在網際網路上通過公網ip通路:我這裡是47.99.x.x。
七 踩坑記錄
如果,用戶端的frpc.ini 裡的 custom_domains設定成域名。而你的域名剛好還沒備案就會出現下面這個頁面。2021年以後,這個阿裡雲上每一個域名都需要備案。你有兩個選擇:1:、乖乖備案域名;2、不使用域名,隻是用公網ip進行内網穿透。
備案域名需要幾個工作日,是以本教程使用公網ip進行内網穿透,必過域名備案步驟。
總結
到此,Alibaba Cloud Linux 搭建Frp内網穿透成功。希望本教程對你有所幫助。
參考連結:
CentOS下搭建Frp内網穿透服務
Alibaba Cloud Linux 文檔
frp中文文檔