新聞中心
內(nèi)網(wǎng)穿透介紹
內(nèi)網(wǎng)穿透是一種將內(nèi)部網(wǎng)絡(luò)中的應用程序通過公共網(wǎng)絡(luò)訪問的技術(shù)。它可以幫助用戶輕松地在外部網(wǎng)絡(luò)訪問內(nèi)部網(wǎng)絡(luò)中運行的應用程序,而無需在路由器上進行端口轉(zhuǎn)發(fā)或使用VPN。

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制及解決方案,創(chuàng)新互聯(lián)公司核心團隊十載專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。
內(nèi)網(wǎng)穿透的實現(xiàn)方式有多種,其中較為常見的是基于反向代理服務(wù)器的方式。反向代理服務(wù)器可以將公共網(wǎng)絡(luò)請求轉(zhuǎn)發(fā)到內(nèi)部網(wǎng)絡(luò)中的應用程序,并將響應返回給客戶端。這種方式需要在公共網(wǎng)絡(luò)上配置反向代理服務(wù)器,并在內(nèi)部網(wǎng)絡(luò)中配置相應的應用程序和端口轉(zhuǎn)發(fā)規(guī)則。
另一種實現(xiàn)方式是使用專門的內(nèi)網(wǎng)穿透軟件。這些軟件通常需要在內(nèi)部網(wǎng)絡(luò)中安裝代理客戶端,并在公共網(wǎng)絡(luò)上安裝代理服務(wù)器。用戶可以通過代理客戶端連接到代理服務(wù)器,然后訪問內(nèi)部網(wǎng)絡(luò)中運行的應用程序。這種方式相對比較簡單,但需要額外安裝和配置軟件。
內(nèi)網(wǎng)穿透的使用場景非常廣泛,例如遠程桌面、文件共享、監(jiān)控系統(tǒng)等。特別是在疫情期間,遠程辦公成為了趨勢,內(nèi)網(wǎng)穿透技術(shù)也因此得到了更廣泛的應用。
然而,內(nèi)網(wǎng)穿透也存在一些安全風險。由于內(nèi)網(wǎng)穿透技術(shù)可以將內(nèi)部網(wǎng)絡(luò)中的應用程序暴露在公共網(wǎng)絡(luò)上,如果沒有正確的安全措施,可能會導致網(wǎng)絡(luò)攻擊和數(shù)據(jù)泄露等問題。因此,在使用內(nèi)網(wǎng)穿透技術(shù)時需要注意加強網(wǎng)絡(luò)安全,例如限制訪問IP地址、加密數(shù)據(jù)傳輸?shù)取?/p>
frp介紹
frp 是一個開源、簡潔易用、高性能的內(nèi)網(wǎng)穿透和反向代理軟件,支持 tcp, udp, http, https等協(xié)議。
frp 項目官網(wǎng)是
https://github.com/fatedier/frp,中文官方文檔地址:https://gofrp.org/docs/。除了安裝過程,中文文檔對使用過程已經(jīng)介紹的非常詳細,如遇到問題,建議先查看官方文檔。
frp工作原理為:
- 服務(wù)端運行,監(jiān)聽一個主端口,等待客戶端的連接;
- 客戶端連接到服務(wù)端的主端口,同時告訴服務(wù)端要監(jiān)聽的端口和轉(zhuǎn)發(fā)類型;
- 服務(wù)端fork新的進程監(jiān)聽客戶端指定的端口;
- 外網(wǎng)用戶連接到客戶端指定的端口,服務(wù)端通過和客戶端的連接將數(shù)據(jù)轉(zhuǎn)發(fā)到客戶端;
- 客戶端進程再將數(shù)據(jù)轉(zhuǎn)發(fā)到本地服務(wù),從而實現(xiàn)內(nèi)網(wǎng)對外暴露服務(wù)的能力。
其他內(nèi)網(wǎng)穿透工具
除了開源的frp,還有如下內(nèi)網(wǎng)穿透/遠控工具:
- ngrok:ngrok 也是很老牌的內(nèi)網(wǎng)穿透工具,自從2.x版本不再開源,名氣在下降。ngrok官網(wǎng)也提供免費穿透隧道,但國內(nèi)連接速度較慢。NATAPP、Sunny-Ngrok等工具基于ngrok二次開發(fā)而來;
- ZeroTier:號稱零配置的內(nèi)網(wǎng)穿透工具,提供與企業(yè) SDN 交換機同等的高級網(wǎng)絡(luò)虛擬化和管理功能,可以跨本地和廣域網(wǎng)連接任何設(shè)備和程序。然而由于ZeroTier的服務(wù)器在國外,國內(nèi)連接速度經(jīng)常很感人,需要自行搭建Moon來解決;
- V2ray:V2ray是一個功能強大的網(wǎng)絡(luò)平臺,提供代理、反向代理、內(nèi)網(wǎng)穿透等功能;
- 花生殼/向日葵:相信大部分折騰過路由器的人都聽說過花生殼DDNS,可能也知道向日葵遠控軟件?;ㄉ鷼ず拖蛉湛秦愪J科技旗下的產(chǎn)品,注冊賬戶后可免費體驗內(nèi)網(wǎng)穿透功能;
- TeamViewer:TeamViewer是國內(nèi)外老牌的遠程控制、遠程會議軟件,額外提供文件上傳下載等實用功能,比QQ遠程協(xié)助好用一萬遍。雖然個人版免費,但是現(xiàn)在TeamViewer商業(yè)化道路一去不復往,用起來越來越惡心;
- SAKURA FRP:基于frp的免費內(nèi)網(wǎng)穿透工具,也有收費服務(wù)。對于這家的行為,網(wǎng)民褒貶不一。如果你沒有自己的服務(wù)器,可以嘗試一下這家。
frp內(nèi)網(wǎng)穿透教程
1、部署前需準備
1.1、準備一臺能被公網(wǎng)訪問到的(通過ip能夠直接訪問得到服務(wù)器)服務(wù)器,一臺內(nèi)網(wǎng)的測試機(你自己電腦就行),本人用的服務(wù)器是華為云的linux服務(wù)器,ip為124.5.23.6,測試機為win10系統(tǒng)。
1.2、訪問官方項目地址:Releases · fatedier/frp · GitHub 下載最新的包:
根據(jù)系統(tǒng)類型下載對應的包
2、部署服務(wù)端
2.1、把
frp_0.48.0_linux_386.tar.gz(如果服務(wù)器為window,解壓frp_0.48.0_windows_386.zip) 解壓出來保留以下三個文件
2.2、修改配置文件,用編輯器打開frps.ini文件,做如下修改
[common]
#服務(wù)器監(jiān)聽穿口
bind_port = 15000
#身份認證 后面客戶端連接也需配置這個token 還有另一種oidc驗證比較復雜,可以參考官方文檔
token=332361857
#web界面端口
dashboard_port = 15001
# dashboard 用戶名密碼,可選,默認為空
dashboard_user = admin
dashboard_pwd = admin332361857
#設(shè)置每個代理可以創(chuàng)建的連接池上限,避免大量資源占用,客戶端設(shè)置超過此配置后會被調(diào)整到當前值
max_pool_count = 5
#端口白名單
allow_ports = 15000,15001,15002-15009
#http監(jiān)聽的端口
vhost_http_port = 15003
#日志文件配置
log_file = ./frps.log
#日志級別配置
log_level = info
以上是本次測試需要用到的參數(shù),詳細參數(shù)如下:
|
參數(shù) |
類型 |
說明 |
默認值 |
可選值 |
備注 |
|
bind_addr |
string |
服務(wù)端監(jiān)聽地址 |
0.0.0.0 |
||
|
bind_port |
int |
服務(wù)端監(jiān)聽端口 |
7000 |
接收 frpc 的連接 |
|
|
bind_udp_port |
int |
服務(wù)端監(jiān)聽 UDP 端口 |
0 |
用于輔助創(chuàng)建 P2P 連接 |
|
|
kcp_bind_port |
int |
服務(wù)端監(jiān)聽 KCP 協(xié)議端口 |
0 |
用于接收采用 KCP 連接的 frpc |
|
|
quic_bind_port |
int |
服務(wù)端監(jiān)聽 QUIC 協(xié)議端口 |
0 |
用于接收采用 QUIC 連接的 frpc |
|
|
quic_keepalive_period |
int |
quic 協(xié)議 keepalive 間隔,單位: 秒 |
10 |
||
|
quic_max_idle_timeout |
int |
quic 協(xié)議的最大空閑超時時間,單位: 秒 |
30 |
||
|
quic_max_incoming_streams |
int |
quic 協(xié)議最大并發(fā) stream 數(shù) |
100000 |
||
|
proxy_bind_addr |
string |
代理監(jiān)聽地址 |
同 bind_addr |
可以使代理監(jiān)聽在不同的網(wǎng)卡地址 |
|
|
log_file |
string |
日志文件地址 |
./frps.log |
如果設(shè)置為 console,會將日志打印在標準輸出中 |
|
|
log_level |
string |
日志等級 |
info |
trace, debug, info, warn, error |
|
|
log_max_days |
int |
日志文件保留天數(shù) |
3 |
||
|
disable_log_color |
bool |
禁用標準輸出中的日志顏色 |
false |
||
|
detailed_errors_to_client |
bool |
服務(wù)端返回詳細錯誤信息給客戶端 |
true |
||
|
tcp_mux_keepalive_interval |
int |
tcp_mux 的心跳檢查間隔時間 |
60 |
單位:秒 |
|
|
tcp_keepalive |
int |
和客戶端底層 TCP 連接的 keepalive 間隔時間,單位秒 |
7200 |
負數(shù)不啟用 |
|
|
heartbeat_timeout |
int |
服務(wù)端和客戶端心跳連接的超時時間 |
90 |
單位:秒 |
|
|
user_conn_timeout |
int |
用戶建立連接后等待客戶端響應的超時時間 |
10 |
單位:秒 |
|
|
udp_packet_size |
int |
代理 UDP 服務(wù)時支持的最大包長度 |
1500 |
服務(wù)端和客戶端的值需要一致 |
|
|
tls_cert_file |
string |
TLS 服務(wù)端證書文件路徑 |
|||
|
tls_key_file |
string |
TLS 服務(wù)端密鑰文件路徑 |
|||
|
tls_trusted_ca_file |
string |
TLS CA 證書路徑 |
2.3、把三個文件上傳至服務(wù)器指定目錄,運行命令
./frps -c frps.ini輸出如下命令說明服務(wù)端運行成功
2023/03/31 10:59:01 [I] [root.go:206] frps uses config file: /home/web/frp/frps.ini
2023/03/31 10:59:01 [I] [service.go:200] frps tcp listen on 0.0.0.0:15000
2023/03/31 10:59:01 [I] [service.go:261] http service listen on 0.0.0.0:15003
2023/03/31 10:59:01 [I] [service.go:317] Dashboard listen on 0.0.0.0:15001
2023/03/31 10:59:01 [I] [root.go:215] frps started successfully
2.4、訪問web界面 124.5.23.6:15001,如下:
2.5、至此服務(wù)端配置成功
3、客戶端基礎(chǔ)配置
3.1、把
frp_0.48.0_windows_386.zip(如果服務(wù)器為window,解壓frp_0.48.0_linux_386.tar.gz) 解壓出來保留以下三個文件
3.2、修改配置文件,用編輯器打開frpc.ini文件,做如下修改
[common]
#外網(wǎng)-服務(wù)器端ip
server_addr = 124.5.23.6
#外網(wǎng)-服務(wù)器端監(jiān)聽的端口(必須與frps.ini中的配置一致)
server_port = 15000
#token驗證需與服務(wù)端配置的一致
token=332361857
#日志文件配置
log_file = ./frps.log
#日志級別配置
log_level = info
#連接池大小
pool_count=5
#客戶端的web界面
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin以上是本次測試需要用到的參數(shù),詳細參數(shù)如下:
|
參數(shù) |
類型 |
說明 |
默認值 |
可選值 |
備注 |
|
server_addr |
string |
連接服務(wù)端的地址 |
0.0.0.0 |
||
|
server_port |
int |
連接服務(wù)端的端口 |
7000 |
||
|
connect_server_local_ip |
string |
連接服務(wù)端時所綁定的本地 IP |
|||
|
dial_server_timeout |
int |
連接服務(wù)端的超時時間 |
10 |
||
|
dial_server_keepalive |
int |
和服務(wù)端底層 TCP 連接的 keepalive 間隔時間,單位秒 |
7200 |
負數(shù)不啟用 |
|
|
http_proxy |
string |
連接服務(wù)端使用的代理地址 |
格式為 {protocol}://user:[email protected]:8080 protocol 目前支持 http、socks5、ntlm |
||
|
log_file |
string |
日志文件地址 |
./frpc.log |
如果設(shè)置為 console,會將日志打印在標準輸出中 |
|
|
log_level |
string |
日志等級 |
info |
trace, debug, info, warn, error |
|
|
log_max_days |
int |
日志文件保留天數(shù) |
3 |
||
|
disable_log_color |
bool |
禁用標準輸出中的日志顏色 |
false |
||
|
pool_count |
int |
連接池大小 |
0 |
||
|
user |
string |
用戶名 |
設(shè)置此參數(shù)后,代理名稱會被修改為 {user}.{proxyName},避免代理名稱和其他用戶沖突 |
||
|
dns_server |
string |
使用 DNS 服務(wù)器地址 |
默認使用系統(tǒng)配置的 DNS 服務(wù)器,指定此參數(shù)可以強制替換為自定義的 DNS 服務(wù)器地址 |
||
|
login_fail_exit |
bool |
第一次登陸失敗后是否退出 |
true |
||
|
protocol |
string |
連接服務(wù)端的通信協(xié)議 |
tcp |
tcp, kcp, quic, websocket |
|
|
quic_keepalive_period |
int |
quic 協(xié)議 keepalive 間隔,單位: 秒 |
10 |
||
|
quic_max_idle_timeout |
int |
quic 協(xié)議的最大空閑超時時間,單位: 秒 |
30 |
||
|
quic_max_incoming_streams |
int |
quic 協(xié)議最大并發(fā) stream 數(shù) |
100000 |
||
|
tls_enable |
bool |
啟用 TLS 協(xié)議加密連接 |
false |
||
|
tls_cert_file |
string |
TLS 客戶端證書文件路徑 |
|||
|
tls_key_file |
string |
TLS 客戶端密鑰文件路徑 |
|||
|
tls_trusted_ca_file |
string |
TLS CA 證書路徑 |
|||
|
tls_server_name |
string |
TLS Server 名稱 |
為空則使用 server_addr |
||
|
disable_custom_tls_first_byte |
bool |
TLS 不發(fā)送 0x17 |
false |
當為 true 時,不能端口復用 |
|
|
tcp_mux_keepalive_interval |
int |
tcp_mux 的心跳檢查間隔時間 |
60 |
單位:秒 |
|
|
heartbeat_interval |
int |
向服務(wù)端發(fā)送心跳包的間隔時間 |
30 |
建議啟用 |
|
|
heartbeat_timeout |
int |
和服務(wù)端心跳的超時時間 |
90 |
||
|
udp_packet_size |
int |
代理 UDP 服務(wù)時支持的最大包長度 |
1500 |
服務(wù)端和客戶端的值需要一致 |
|
|
start |
string |
指定啟用部分代理 |
當配置了較多代理,但是只希望啟用其中部分時可以通過此參數(shù)指定,默認為全部啟用 |
||
|
meta_xxx |
map |
附加元數(shù)據(jù) |
會傳遞給服務(wù)端插件,提供附加能力 |
3.3、用cmd運行
frpc -c frpc.ini3.4、訪問管理端 http://127.0.0.1:7400/,出現(xiàn)如下說明配置成功
4、代理配置
4.1、代理的基礎(chǔ)配置如下:
|
參數(shù) |
類型 |
說明 |
是否必須 |
默認值 |
可選值 |
備注 |
|
type |
string |
代理類型 |
是 |
tcp |
tcp, udp, http, https, stcp, sudp, xtcp, tcpmux |
|
|
use_encryption |
bool |
是否啟用加密功能 |
否 |
false |
啟用后該代理和服務(wù)端之間的通信內(nèi)容都會被加密傳輸 |
|
|
use_compression |
bool |
是否啟用壓縮功能 |
否 |
false |
啟用后該代理和服務(wù)端之間的通信內(nèi)容都會被壓縮傳輸 |
|
|
proxy_protocol_version |
string |
啟用 proxy protocol 協(xié)議的版本 |
否 |
v1, v2 |
如果啟用,則 frpc 和本地服務(wù)建立連接后會發(fā)送 proxy protocol 的協(xié)議,包含了原請求的 IP 地址和端口等內(nèi)容 |
|
|
bandwidth_limit |
string |
設(shè)置單個 proxy 的帶寬限流 |
否 |
單位為 MB 或 KB,0 表示不限制,如果啟用,會作用于對應的 frpc |
||
|
bandwidth_limit_mode |
string |
限流類型,客戶端限流或服務(wù)端限流 |
否 |
client |
client, server |
4.2、代理的本地服務(wù)配置
local_ip 和 plugin 的配置必須配置一個,且只能生效一個,如果配置了 plugin,則 local_ip 配置無效。
|
參數(shù) |
類型 |
說明 |
是否必須 |
默認值 |
可選值 |
備注 |
|
local_ip |
string |
本地服務(wù) IP |
是 |
127.0.0.1 |
需要被代理的本地服務(wù)的 IP 地址,可以為所在 frpc 能訪問到的任意 IP 地址 |
|
|
local_port |
int |
本地服務(wù)端口 |
是 |
配合 local_ip |
||
|
plugin |
string |
客戶端插件名稱 |
否 |
見客戶端插件的功能說明 |
用于擴展 frpc 的能力,能夠提供一些簡單的本地服務(wù),如果配置了 plugin,則 local_ip 和 local_port 無效,兩者只能配置一個 |
|
|
plugin_params |
map |
客戶端插件參數(shù) |
否 |
map 結(jié)構(gòu),key 需要都以 “plugin_” 開頭,每一個 plugin 需要的參數(shù)也不一樣,具體見客戶端插件參數(shù)中的內(nèi)容 |
4.3、代理的負載均衡和健康檢查
|
參數(shù) |
類型 |
說明 |
是否必須 |
默認值 |
可選值 |
備注 |
|
group |
string |
負載均衡分組名稱 |
否 |
用戶請求會以輪詢的方式發(fā)送給同一個 group 中的代理 |
||
|
group_key |
string |
負載均衡分組密鑰 |
否 |
用于對負載均衡分組進行鑒權(quán),group_key 相同的代理才會被加入到同一個分組中 |
||
|
health_check_type |
string |
健康檢查類型 |
否 |
tcp,http |
配置后啟用健康檢查功能,tcp 是連接成功則認為服務(wù)健康,http 要求借口返回 2xx 的狀態(tài)碼則認為服務(wù)健康 |
|
|
health_check_timeout_s |
int |
健康檢查超時時間(秒) |
否 |
3 |
執(zhí)行檢查任務(wù)的超時時間 |
|
|
health_check_max_failed |
int |
健康檢查連續(xù)錯誤次數(shù) |
否 |
1 |
連續(xù)檢查錯誤多少次認為服務(wù)不健康 |
|
|
health_check_interval_s |
int |
健康檢查周期(秒) |
否 |
10 |
每隔多長時間進行一次健康檢查 |
|
|
health_check_url |
string |
健康檢查的 HTTP 接口 |
否 |
如果 health_check_type 類型是 http,則需要配置此參數(shù),指定發(fā)送 http 請求的 url,例如 “/health” |
4.4、代理的TCP配置,在下面我們配置訪問內(nèi)網(wǎng)的SSH。
4.4.1、接上一節(jié)繼續(xù)修改配置文件frpc.ini,在前面的基礎(chǔ)上加入
#代理名稱 注意代理名稱不能重復,配置多個需要區(qū)分,如[ssh] [ssh1] [ssh2]
[ssh]
#配置類型為http協(xié)議
type = tcp
#內(nèi)網(wǎng)機器的IP
local_ip = 127.0.0.1
#內(nèi)網(wǎng)需要監(jiān)聽的端口(win10所啟服務(wù)端口)
local_port = 22
remote_port = 15002
#是否開啟加密
use_encryption = true
#是否開啟壓縮
use_compression = true4.4.2、運行客戶端后
ssh -p 15002 [email protected] 4.4.3、成功訪問
4.5、代理的Http配置,下面我們配置一個訪問內(nèi)網(wǎng)web的例子
4.5.1、接上一節(jié)繼續(xù)修改配置文件frpc.ini,在前面的基礎(chǔ)上加入
[web]
type = http
#本地端口
local_port = 8080
#服務(wù)器綁定自定義域名,需把域名解析到服務(wù)器ip
custom_domains = proxy.test.com 4.5.2、運行客戶端后,即可訪問到本地的http服務(wù)了,15003是服務(wù)端配置的http監(jiān)聽端口
4.6、frp還可以代理STCP\SUDP\XTCP\TCPMUX\UDP,由于本人暫時沒用到,等用到時候再給大家分享,有問題可以評論區(qū)提出,謝謝!
網(wǎng)頁名稱:如何使用frp實現(xiàn)內(nèi)網(wǎng)穿透
網(wǎng)站網(wǎng)址:http://www.fisionsoft.com.cn/article/cdjicde.html


咨詢
建站咨詢
