frp搭建內網穿透教程
步驟1:準備工作
- 公網服務器:需要一臺具有公網IP的服務器作為中轉服務器,安裝frp服務器端(frps)。
- 內網設備:需要暴露服務的內網設備,安裝frp客戶端(frpc)。
步驟2:下載與安裝
訪問frp的GitHub頁面(https://github.com/fatedier/frp)下載對應平臺的壓縮包,解壓后分別獲得frps(服務器端)和frpc(客戶端)。
可下載的部分版本如下:
名稱 |
---|
frp_0.62.0_android_arm64.targz |
frp_0.62.0_darwin_amd64.tar.gz |
frp_0.62.0_darwin_arm64.tar.gz |
frp_0.62.0_freebsd_amd64.tar.gz |
frp_0.62.0_linux_amd64.tar.gz(linux版本) |
frp_0.62.0_linux_arm.tar.gz |
frp_0.62.0_linux_arm64.tar.gz |
frp_0.62.0_linux_arm_hf.tar.gz(一般情況下,用于內網穿透的服務器是linux系統) |
frp_0.62.0_linux_loong64.tar.gz |
frp_0.62.0_linux_mips.tar.gz |
frp_0.62.0_linux_mips64.tar.gz |
frp_0.62.0_linux_mips64le.tar.gz |
frp_0.62.0_linux_mipsle.targz |
frp_0.62.0_linux_riscv64.tar.gz |
frp_0.62.0_windows_amd64.zip(windows版本,如果被內網穿透的客戶端是windows系統,則需要在客戶端下載此版本) |
frp_0.62.0_windows_arm64.zip |
frp_sha256_checksums.txt |
Source_code (zip) |
Source_code (tar.gz) |
步驟3:搭建服務端frps
- 下載后重命名為frp.tar.gz(可忽略),將linux壓縮包上傳至服務器/opt/frp目錄并解壓。
解壓命令:
tar -zxvf frp.tar.gz
解壓后,服務端主要用frps、frps.toml文件,frpc和frpc.toml是客戶端要用的。
- 配置frp服務器端(frps)
- 在公網服務器上修改配置文件
frps.toml
,內容示例如下:
用vim frps.toml
命令,按i進入編輯模式,粘貼下面的內容稍作修改,按esc,輸入:wq回車保存退出。
- 在公網服務器上修改配置文件
# 基礎服務配置
bindAddr = "0.0.0.0" # 監聽所有網絡接口(IPv4)
bindPort = 7000 # 主服務端口(TCP)
kcpBindPort = 7000 # KCP 協議端口(UDP)
# Web 控制臺配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin" # 建議修改為復雜用戶名
webServer.password = "admin123" # 建議修改為強密碼
# 日志配置
log.to = "/frpslog/frps.log"
log.level = "info"
log.maxDays = 3
# 安全認證
auth.method = "token"
auth.token = "tocken123" # 必須修改為復雜 Token
# 允許客戶端使用的端口范圍
allowPorts = [{ start = 3000, end = 4000 }
]
# 可選高級配置(可根據需要添加)
# transport.tls.force = true # 強制 TLS 加密
# vhostHTTPPort = 80 # HTTP 反向代理端口
# vhostHTTPSPort = 443 # HTTPS 反向代理端口
- 在Linux系統下,使用
systemd
可以方便地控制frps服務端的啟動、停止、配置后臺運行以及開機自啟動。
使用文本編輯器(如vim)在/etc/systemd/system
目錄下創建一個frps.service
文件,用于配置frps服務。
命令:vim /etc/systemd/system/frps.service
粘貼下面內容:
[Unit]
# 服務名稱,可自定義
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 啟動frps的命令,需修改為您的frps的安裝路徑
ExecStart = /opt/frp/frps/frps -c /opt/frp/frps/frps.toml
[Install]
WantedBy = multi-user.target
- 重載frps服務:
systemctl daemon-reload
- 啟動frp:
sudo systemctl start frps
systemctl status frps
- 設置frps開機自啟動:
systemctl enable frps
至此,在瀏覽器中輸入<公網ip>:7500,進入web端,frps就搭建好了。
步驟4:搭建客戶端frpc
服務端frps搭建好后,就可以進行客戶端frpc的搭建。以內網中公司的git代碼倉庫為例,公司有一條公網ip網絡110.23.22.145,公司的所有設備通過這個ip接入到公共網絡,所有設備的ip可能是10.10.1.XXX,172.15.23.XXX等局域網ip,公司的git代碼倉庫安裝在一臺ip為10.10.5.123的服務器上,通過搭建內網穿透,可實現出差等情況下對該git倉庫的訪問。
- 在要搭建的內網穿透客戶端上傳frp.tar.gz壓縮包并解壓(步驟幾乎和服務端一樣,配置文件略改一下),若內網穿透的客戶端是windows,請使用對應版本的frp。
將frp壓縮包上傳至客戶端/opt/frp目錄(客戶端也是linux系統的),解壓命令:
tar -zxvf frp.tar.gz
客戶端只用到frpc和frpc.toml。
- 修改配置文件
frpc.toml
:
serverAddr = "130.127.35.28"
serverPort = 7000
auth.method = "token"
auth.token = "tocken123"
# 日志配置
log.to = "/frpclog/frpc.log"
log.level = "info"
log.maxDays = 3
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 3100
其中,serverAddr對應公網服務器ip,serverPort對應frps配置的端口,auth.token為frps配置的tocken密碼,localIP為本地ip,默認127.0.0.1,remotePort是映射到frps服務端的端口,即要進行內網穿透的應用端口。
例如:內網客戶端安裝了一個gitlib應用,內網ip是10.10.5.101,端口號是8080,在其他網絡環境要訪問10.10.5.101:8080,是訪問不通的。在配置好內網穿透后,訪問130.127.35.28:3100就可以代理到內網的gitlib應用。
若還有其他應用進行內網穿透,在frpc.toml復制一份proxies進行修改即可:
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 3100
- 編寫frpc.service
和上面frps.service配置差不多,略微修改一下:
[Unit]
# 服務名稱,可自定義
Description = frp clent
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 啟動frps的命令,需修改為您的frps的安裝路徑
ExecStart = /opt/frp/frpc/frpc -c /opt/frp/frpc/frpc.toml
[Install]
WantedBy = multi-user.target
- 重載frps服務:
systemctl daemon-reload
- 啟動frp:
sudo systemctl start frps
systemctl status frps
- 設置frps開機自啟動:
systemctl enable frps
至此,內網穿透算是搭建完畢!瀏覽器訪問130.127.35.28:3100即可打開對應的內網應用。
補充內容
查看日志
- 查看frps運行日志:
cat /frpslog/frps.log
- 查看frpc運行日志:
cat /frpclog/frpc.log
服務器端口設置
- 服務器安全組要放行對應的端口號,如:7500、7000、3100。
- 若還是無法訪問,檢查服務器網絡的默認區域:
firewall-cmd --zone=public --list-all
- 若輸出的結果沒有要用的端口號,則進行添加:
sudo firewall-cmd --zone=public --add-port=3100/tcp --permanent
sudo firewall-cmd --reload