frp內(nèi)網(wǎng)穿透

1-內(nèi)網(wǎng)穿透

內(nèi)網(wǎng)穿透即內(nèi)網(wǎng)映射,可以將局域網(wǎng)變公網(wǎng),從而可以讓外網(wǎng)訪問本地局域網(wǎng)內(nèi)的服務(wù)。內(nèi)網(wǎng)穿透原理技術(shù)有這么幾種:
1,通過公網(wǎng)服務(wù)器轉(zhuǎn)發(fā),這是目前市場上大多三方的內(nèi)網(wǎng)穿透服務(wù)方式。
2,P2P穿透,端對端連接通信,即常說的UDP打洞方式,受國內(nèi)復(fù)雜網(wǎng)絡(luò)環(huán)境影響打洞成功機(jī)率不高。
3,通過公網(wǎng)服務(wù)器響應(yīng)對二端握手穿透,穿透成功時(shí)直接二端P2P打洞直聯(lián)。

內(nèi)網(wǎng)穿透工具有很多,比如Ngrok、花生殼、frp。原理基本一樣。

這里主要了解一下FRP, frp分為客戶端和服務(wù)端,frps為服務(wù)端,frpc為客戶端。

github

https://github.com/fatedier/frp

完整文檔

https://gofrp.org/docs/

使用案例

https://gofrp.org/docs/examples/

配置時(shí)的端口防火墻必須開放和要配置開放對應(yīng)的安全組

2-使用前提

  • 有一臺阿里云或者類試的服務(wù)器

3-通過 TCP 訪問內(nèi)網(wǎng)機(jī)器

3.1-服務(wù)端配置和使用

# 下載對應(yīng)的文件,每個(gè)文件里面都有對應(yīng)的服務(wù)端和客戶端
# 不同架構(gòu)對應(yīng)不同系統(tǒng)
https://github.com/fatedier/frp/releases

# 查看系統(tǒng)架構(gòu)
uname -a

# 我這里是centos7,frp的服務(wù)端則下載
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

# 解壓
tar -zxvf frp_0.38.0_linux_amd64.tar.gz

# 配置frps.ini
vim frps.ini

# 配置如下
[common]
# 端口要和客戶端相同即可
bind_port = 9000

# frp自帶的可視化
dashboard_port = 9500
# 指定訪問 Dashboard 的用戶名
dashboard_user = admin11
# 指定訪問 Dashboard 的端口
dashboard_pwd = admin11

log_file = ./frps.log
log_level = info
log_max_days = 3

privilege_mode = true
# 用于驗(yàn)證服務(wù)端和客戶端
privilege_token = 12345678

max_pool_count = 50

# 運(yùn)行服務(wù)端
./frps -c ./frps.ini

# 后臺運(yùn)行使用
nohup ./frps -c ./frps.ini &

3.2-客戶端配置和使用

# 我這里客戶端是mac本,則下載
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_darwin_amd64.tar.gz

# 解壓
tar -zxvf frp_0.38.0_darwin_amd64.tar.gz

# 配置frpc.ini
vim frpc.ini

# 配置內(nèi)容
[common]
# 阿里云服務(wù)器的ip
server_addr = 43.255.1.136
# frp的服務(wù)端和客戶端約定的端口
server_port = 9000
# frp的服務(wù)端和客戶端約定的token
privilege_token = 12345678

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 18221

[nginx]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 10080

[web]
type = http
local_port = 80
custom_domains = rick.aismartlink.com

[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 18336

[nacos]
type = tcp
local_ip = 127.0.0.1
local_port = 8848
remote_port = 18848

[rabbitmq5672]
type = tcp
local_ip = 127.0.0.1
local_port = 5672
remote_port = 5672

[rabbitmq15672]
type = tcp
local_ip = 127.0.0.1
local_port = 15672
remote_port = 15672

[rabbitmq25672]
type = tcp
local_ip = 127.0.0.1
local_port = 25672
remote_port = 25672

# 運(yùn)行客戶端
./frpc -c ./frpc.ini

# 后臺運(yùn)行使用
nohup ./frpc -c ./frpc.ini &

3.3-鏈接

# 如果鏈接不成功,可以排查
1-本機(jī)防火墻
2-外網(wǎng)服務(wù)器的安全組

# xx1 登錄到機(jī)器的用戶名
# xx2 阿里云的服務(wù)器的ip
ssh -oPort=8900 xx1@xx2

# 或者使用
ssh -p 8900 xx1@xx2

使用FileZilla來鏈接,可以傳輸文件了


image.png

4-通過自定義域名訪問部署于內(nèi)網(wǎng)的 Web 服務(wù)

現(xiàn)在通過 FRP 就可以很容易實(shí)現(xiàn)這一功能,這里以 HTTP 服務(wù)為例:首先修改 【FRP 服務(wù)端】配置文件,通過 vhost_http_port 參數(shù)來設(shè)置 HTTP 訪問端口,這里將 HTTP 訪問端口設(shè)為 8080。

# 配置如下
[common]
# 端口要和客戶端相同即可
bind_port = 9000
# frp自帶的可視化
dashboard_port = 9500
# 指定訪問 Dashboard 的用戶名
dashboard_user = admin11
# 指定訪問 Dashboard 的端口
dashboard_pwd = admin11
# 設(shè)置 HTTP 訪問端口
vhost_http_port = 8080
log_file = ./frps.log
log_level = info
log_max_days = 3
privilege_mode = true
# 用于驗(yàn)證服務(wù)端和客戶端
privilege_token = 12345678
max_pool_count = 50

再去修改客戶端文件。這里通過 local_port 和 custom_domains 參數(shù)來設(shè)置本地機(jī)器上 Web 服務(wù)對應(yīng)的端口和自定義的域名,這里我們分別設(shè)置端口為 80,對應(yīng)域名為 mm.like.com

# 配置內(nèi)容
[common]
# 阿里云服務(wù)器的ip
server_addr = 43.255.1.136
# frp的服務(wù)端和客戶端約定的端口
server_port = 9000
# frp的服務(wù)端和客戶端約定的token
privilege_token = 12345678

[ssh]
type = tcp
# 本地可以有多個(gè)服務(wù),這里連接本機(jī)
local_ip = 127.0.0.1
local_port = 22
# 遠(yuǎn)程ssh時(shí),需要寫的端口
remote_port = 8900

[web]
type = http
local_port = 80
custom_domains = mm.like.com
  • 最后將 mm.like.com 的域名 A 記錄解析到 FRP 服務(wù)器的公網(wǎng) IP 上,現(xiàn)在便可以通過 http://mm.like.com:8080 這個(gè) URL 訪問到處于內(nèi)網(wǎng)機(jī)器上對應(yīng)的 Web 服務(wù)
  • HTTPS 服務(wù)配置方法類似,只需將 vhost_http_port 替換為 vhost_https_port, type 設(shè)置為 https 即可

5-鏈接數(shù)據(jù)庫

frp的客戶端新增[mysql]

[mysql]
type = tcp
local_ip = 127.0.0.1   #內(nèi)網(wǎng)機(jī)器哪臺數(shù)據(jù)庫的ip地址
local_port = 3306 # 內(nèi)網(wǎng)機(jī)器mysql端口
remote_port = 1006 # 通過公網(wǎng)訪問的mysql端口

訪問:mysql -uxx1 -hxx2 -P1006 -pxx3

  • xx1 用戶名
  • xx2 外網(wǎng)服務(wù)器ip
  • xx3 數(shù)據(jù)庫密碼

配置自動啟動兩種常用方法

  • 1-使用systemctl來控制啟動,以服務(wù)端為例
sudo vim /lib/systemd/system/frps.service

# 在frps.service里寫入以下內(nèi)容
[Unit]
Description=fraps service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target

[Service]
Type=simple

#啟動服務(wù)的命令(此處寫你的frps的實(shí)際安裝目錄)
ExecStart= nohup /your/path/frps -c /your/path/frps.ini &

[Install]
WantedBy=multi-user.target

Centos7的服務(wù)systemctl腳本存放在:/usr/lib/systemd/目錄下,有系統(tǒng)(system)和用戶(user)之分,一般需要開機(jī)不登錄就能運(yùn)行的程序,就存放在/usr/lib/systemd/system/目錄下。

然后,我們再把這個(gè)腳本放置在 /usr/lib/systemd/system/目錄下,之后我們再運(yùn)行下面兩條命令來更新 systemd 配置文件,并啟動服務(wù)

# 重新加載配置
systemctl daemon-reload
# 設(shè)置開機(jī)重啟
systemctl enable auto_run_script.service

# 重啟機(jī)器
reboot
  • 2-使用修改 /etc/rc.d/rc.local 文件
# /etc/rc.d/rc.local 文件會在 Linux 系統(tǒng)各項(xiàng)服務(wù)都啟動完畢之后再被運(yùn)行。所以你想要自己的腳本在開機(jī)后被運(yùn)行的話,可以將自己腳本路徑加到該文件里


# 首先需要確認(rèn)你有運(yùn)行這個(gè)文件的權(quán)限
ls -lart
chmod +x /etc/rc.d/rc.local

# 為了演示,我們創(chuàng)建了一個(gè)腳本,當(dāng)它被執(zhí)行之后,將在家目錄下寫入有特定信息的文件
$ vim auto_run_script.sh

#!/bin/bash
date >> /home/alvin/output.txt
hostname >> /home/alvin/output.txt

# 保存退出,再賦予可執(zhí)行權(quán)限
chmod +x auto_run_script.sh

# 然后,我們再將腳本添加到 /etc/rc.d/rc.local 文件最后一行
$ vim /etc/rc.d/rc.local

/home/alvin/auto_run_script.sh

# 接下來,我們就可以試試效果了。直接重啟系統(tǒng)就可以了
sudo reboot
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容