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

前言

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

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

原文:李柱明部落格園://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源碼&教程://github.com/fatedier/frp

  • 更多穿透教程也可以參考官方demo,甚至源碼。

FRP原理

  • 服務端運行,監聽一個主埠,等待客戶端的連接;
  • 客戶端連接到服務端的主埠,同時告訴服務端要監聽的埠和轉發類型;
  • 服務端fork新的進程監聽客戶端指定的埠;
  • 外網用戶連接到客戶端指定的埠,服務端通過和客戶端的連接將數據轉發到客戶端;
  • 客戶端進程再將數據轉發到本地服務,從而實現內網對外暴露服務的能力。

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

FRP配置教程之SSH

前期準備

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

需要被穿透的內網設備。

配置主要分兩部分:

  • FRP服務端,布局在具有公網的IP的伺服器。
  • FRP客戶端,布局在內網設備。

FRP穿透配置文件參考:frp*_full.ini

伺服器配置

下載FRP

下載release包:根據設備和frp版本下載:

wget //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

驗證是否啟動成功

驗證服務端是否成功啟動:在瀏覽器中輸入://伺服器公網IP:FRP後台埠號,如://1.244.12.12:7001

輸入用戶名和密碼出現下圖即可說明服務端成功啟動。

可能遇到的一些問題

  1. 驗證進入後台管理時失敗:在驗證前需要檢查防火牆。雲伺服器不是在命令行配置防火牆,而是在後台。對於騰訊雲伺服器,需要在後台進入防火牆配置,然後添加規則,開放對應埠。

客戶端配置

和服務端步驟差不多

下載FRP

下載release包:根據設備和frp版本下載:

wget //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驗證:

穿透成功: