【網路】內網穿透方案&FRP內網穿透實戰(基礎版)

2022-11-13 15:00:11

前言

最近週末在搭建個人網站,花了兩天瞭解了下,目前基本上已經完成了個人部落格網站的搭建,但是網站備案還沒處理,只能IP存取,就不貼出了。
現把途中記錄的筆記分享下。

內網穿透不僅僅用於個人網站搭建把資料拿捏在本地,主要是為了方便後期可能會玩or開發一些物聯網裝置而提前準備的環境。

原文:李柱明部落格園:https://www.cnblogs.com/lizhuming/p/16885898.html

方案

方案1:公網

獨立公網,IPv4的就不要想了。

動態公網:除了移動,電信和聯通,和客服溝通下,都會很大方。

有了動態公網IP後,就用DDNS來繫結自己的域名就好了。DDNS服務商可以百度隨便找個,因為我個人沒有動態公網IP,就沒有細究。

參考方案:DNSPOD

方案2:第三方內網穿透軟體

花生殼

花生殼:貴,免費的不夠用。

cpolar

cpolar:目前在用,個人使用感覺,比花生殼要好。

先下載去官網免費版的cpolar,然後設定對映即可。免費的頻寬1M,有4條對映(我試過,應該是每個使用者端有4條對映可設定,而不是每個賬號只有4條對映,這個算nice)

方案3:雲伺服器做反向代理

先購買有個帶公網IP的雲伺服器,然後用雲伺服器反向代理,利用這個雲伺服器做流量轉發,原理和方案2一樣,只是要自己實現流量轉發。

參考方案:雲伺服器+FRP+個人域名。

FRP簡介

frp 是一個開源、簡潔易用、高效能的內網穿透和反向代理軟體,支援 tcp, udp, http, https等協定。

FRP資源

FRP原始碼&教學:https://github.com/fatedier/frp

  • 更多穿透教學也可以參考官方demo,甚至原始碼。

FRP原理

  • 伺服器端執行,監聽一個主埠,等待使用者端的連線;
  • 使用者端連線到伺服器端的主埠,同時告訴伺服器端要監聽的埠和轉發型別;
  • 伺服器端fork新的程序監聽使用者端指定的埠;
  • 外網使用者連線到使用者端指定的埠,伺服器端通過和使用者端的連線將資料轉發到使用者端;
  • 使用者端程序再將資料轉發到本地服務,從而實現內網對外暴露服務的能力。

就是利用擁有公網的伺服器幫忙轉發資料。

FRP設定教學之SSH

前期準備

需要一臺具有公網IP的伺服器。

需要被穿透的內網裝置。

設定主要分兩部分:

  • FRP伺服器端,佈局在具有公網的IP的伺服器。
  • FRP使用者端,佈局在內網裝置。

FRP穿透組態檔參考:frp*_full.ini

伺服器設定

下載FRP

下載release包:根據裝置和frp版本下載:

wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz

解壓:

tar -zxvf frp_0.45.0_linux_amd64.tar.gz

相關檔案:

  • frps*:是frp伺服器相關檔案。
  • frpc*:是frp使用者端相關檔案。
lzm@lzm-ubuntu:~/work/network/frp/frp_0.45.0_linux_amd64$ ls
frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE

設定FRP伺服器端

修改伺服器端設定:

vim frps.ini

檔案內容:

# FRP伺服器端
[common]
# frp監聽的埠,預設是7000,可以改成其他的
bind_port = 7000
# 授權碼,請改成更復雜的
token = 12345  # 這個token之後在使用者端會用到

# frp管理後臺埠,請按自己需求更改
dashboard_port = 7001
# frp管理後臺使用者名稱和密碼,請改成自己的
dashboard_user = lzm
dashboard_pwd = 123456
enable_prometheus = true

# frp紀錄檔設定
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

啟動FRP伺服器端

拷貝到專門的資料夾&啟動伺服器:兩種方案:

  1. 直接在當前終端執行:
./frps -s frpc.ini
  1. 使用systemctl命令組:

    • 需要注意的是,新版本的release已經不提供systemd相關指令碼了,需要的可以下載舊版本獲取。
# 在etc資料夾下建立frp資料夾,把frps.ini服務設定拷貝過去
sudo mkdir -p /etc/frp
sudo cp frps.ini /etc/frp
# 把frps韌體包拷貝到系統的命令庫中
sudo cp frps /usr/bin
# 把frps的單元檔案拷貝到使用者lib
sudo cp systemd/frps.service /usr/lib/systemd/system/
# 使能&啟用
sudo systemctl enable frps
sudo systemctl start frps

驗證是否啟動成功

驗證伺服器端是否成功啟動:在瀏覽器中輸入:http://伺服器公網IP:FRP後臺埠號,如:http://1.X.X.X:7001

輸入使用者名稱和密碼出現下圖即可說明伺服器端成功啟動。

可能遇到的一些問題

  1. 驗證進入後臺管理時失敗:在驗證前需要檢查防火牆。雲伺服器不是在命令列設定防火牆,而是在後臺。對於騰訊雲伺服器,需要在後臺進入防火牆設定,然後新增規則,開放對應埠。

使用者端設定

和伺服器端步驟差不多

下載FRP

下載release包:根據裝置和frp版本下載:

wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz

解壓:

tar -zxvf frp_0.45.0_linux_amd64.tar.gz

相關檔案:

  • frps*:是frp伺服器相關檔案。
  • frpc*:是frp使用者端相關檔案。
lzm@lzm-ubuntu:~/work/network/frp/frp_0.45.0_linux_amd64$ ls
frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE

設定FRP伺服器端

修改伺服器端設定:

vim frpc.ini

檔案內容:

# FRP使用者端
[common]
server_addr = 伺服器ip
 # 與frps.ini的bind_port一致
server_port = 7000
 # 與frps.ini的token一致
token = 123456

# 設定ssh服務
[ssh]
type = tcp
# 也可以是當前裝置區域網內的其它IP
local_ip = 127.0.0.1
local_port = 22
# 這個自定義,之後再ssh連線的時候要用
remote_port = 7002

啟動FRP使用者端

./frpc -c frpc.ini

驗證是否穿透成功

隨便拿臺能接入公網的裝置進行ssh驗證:

穿透成功: