開始之前需要有一臺可以進行公網訪問的服務器
下載安裝 frp
這個直接到 github 官網就可以下載了
點擊Releases
就可以查看到可以下載的源,根據自己電腦的型號進行選擇就好了。
linux服務器上下載
如果是在linux的服務器上的話可以直接通過wget
進行下載
例如:
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_android_amd64.tar.gz
然后你就會得到一個tar.gz
的一個壓縮包
然后把壓縮包進行解壓
tar -zxvf frp_0.63.0_android_amd64.tar.gz
解壓完后你就可以在本地看到一個frp_0.63.0_android_amd64
的文件夾
文件夾中一般有 4 個文件,frpc
開頭是進行客戶端連接的,也就是你要穿透的電腦運行的,而frps
是開頭的是運行在服務端的,也就是有公網 IP 的服務器上面的
服務端配置
服務端的配置全部寫在文件frps.toml
里面(有可能是frpc.ini
),最開始的設置只有一個,那就是這個服務端運行綁定的端口是哪里,這里默認是 7000 端口,我們不用改,只不過在服務器的控制臺中需要把這個端口給開放,不然客戶端無法訪問。
如果你只是需要簡單的進行測試,看是否能夠跑通內網穿透,那么你就不用再進行其他的配置了。
如果你是需要長期使用的話還需要一些其他的配置,更利于我們使用,例如token
防止服務器被劫持了。
同樣這些設置都是放在frps.toml
里面的
# 最新設置請參考官網 https://gofrp.org/zh-cn/docs/features/common/configure/
# 服務端和客戶端的TCP通信端口, 建議1024以上端口
bind_port = 7000
# 客戶端訪問服務端的密碼
token = abcdefg
# 服務端儀表盤的端口, 可以用瀏覽器訪問查看
dashboard_port = 7500
# 服務端儀表盤的用戶密碼
dashboard_user = frp
dashboard_pwd = frp123# 日志保存設定, 保存位置、保存時長
log_file = ./frps.log
log_level = info
log_max_days = 7
如果要長期進行訪問的話建議把token
設置的強一點,不容易攻破
啟動服務端
啟動服務端非常簡單,把二進制文件frps
運行起來就好了。
- 如果只是簡單的單詞運行
# 在frp的目錄下
./frps -c frps.toml
- 如果要后臺運行
# 同樣在frp目錄下,使用nohup,控制臺的輸出會保存在當前文件夾的nohup.out文件中,查看輸出即可了。
nohup ./frps -c frps.toml &
這樣服務端就能運行起來啦!
如果啟動失敗,有可能是端口沒開放,7000端口進的查看哦,有的可能防火墻也沒開放,記得檢查。兩層一個云服務提供商的安全策略,一個就是自己服務器的防火墻
客戶端配置
客戶端的配置就是frpc.toml
文件
初始的內容如下:
下面對配置進行說明
serverAddr = "x.x.x.x"
serverPort = 7000[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
啟動客戶端
# 后臺啟動
# 同樣在frp目錄下,使用nohup,控制臺的輸出會保存在當前文件夾的nohup.out文件中,查看輸出即可了。
nohup ./frpc -c frpc.toml &
# 前臺啟動
# 在frp的目錄下
./frpc -c frpc.toml
Windows 操作無異,一樣的修改配置文件,然后運行就好了
踩坑
此次進行
frp
內網穿透,目標是穿透 Docker 容器,使得我能夠通過外網直接訪問我創建的容器
前面的下載步驟,以及配置服務端很簡單,一下就配置好了,但是當我要進行連接的時候,就算我設置了Docker
容器的密碼,也是不行,總是出現 Authentication Rejected
拒絕訪問。
但是我明明都已經穿透好了,為什么不行呢?
我進行了一下對比實驗,我不進行ssh
連接,看看內網穿透可不可行,就能發現到底是軟件問題,還是本身Docker
就不能進行穿透了。
通過下載nginx
打開端口80,發現是可以進行內網穿透的,所以問題不是在軟件上,在 Docker
鏡像的設置上面。
經過多方查找,終于找到原因:
-
Ubuntu Lastest
鏡像下載的ssh
工具不允許通過密碼連接,所以要打開密碼連接的設置。- 把
/etc/ssh/sshd_config
中的PasswordAuthentication yes
的注釋刪掉.
- 把
-
同時,
ssh
默認不運行進行root
用戶進行連接- 需要把
/etc/ssh/sshd_config
中#PermitRootLogin prohibit-password
下面添加一行PermitRootLogin yes
當然你把prohibit-password
改成yes
也可以,當然了這樣的話就要去掉注釋了。
- 需要把