0. 使用背景
- 校內實驗室的電腦使用的是校園內網(10.x.x.x這種),在家里或旅游時無法訪問實驗室的機器(由於ipv4地址有限,因此沒有公網ip),特別是疫情期間,待在家里,沒辦法使用實驗室的電腦做實驗。
- 使用frp內網穿透(github開源)可以解決這一痛點
- 原理簡介:
(本教程僅支持ssh遠程連接,關於遠程桌面等可以另找資源)
1. 前提條件(我兩台機器都是Linux)
- 【服務器端】一個公網ip:我申請的是騰訊雲學生優惠的輕量應用服務器,帶寬5M
- 【客戶端】一台在內網的電腦
- 下載好上面連接中的frp工具,並解壓(在一處下載即可,客戶端或服務器端都可以;如果覺得往另一台機器傳輸麻煩,在客戶端和服務器端都下載)
# 以下載在服務器端為例
$ wget https://github.com/fatedier/frp/releases/download/v0.29.1/frp_0.29.1_linux_amd64.tar.gz
$ tar xzvf frp_0.29.1_linux_amd64.tar.gz
$ mv frp_0.29.1_linux_amd64 frp
{以下命令均在root下運行}
2. 配置服務器端(擁有公網ip的服務器)
$ cd frp
$ cp frps /usr/bin/
$ cp systemd/frps.service /usr/lib/systemd/system/
$ mkdir /etc/frp
$ cp frps.ini /etc/frp
$ vim /etc/frp/frps.ini
修改內容如下
[common]
# frp客戶端監聽的端口,默認是7000,可以改成其他的
bind_port = 7000
# 授權碼,請改成更復雜的
token = 52010 # 這個token之后在客戶端會用到
# frp管理后台端口,請按自己需求更改
dashboard_port = 7500
# frp管理后台用戶名和密碼,請改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
啟動服務
# 設置開機啟動
$ systemctl enable frps
# 啟動服務
$ systemctl start frps
# 查看是否正常運行
$ systemctl status frps
瀏覽器中進入frp管理后台(假如你的公網IP為88.11.123.5)
# 瀏覽器中輸入http://88.11.123.5:7500
# 賬號和密碼是上面設置的admin, admin
3. 配置客戶端(內網實驗室的PC)
$ cd frp
$ cp frpc /usr/bin/
$ cp systemd/frpc.service /lib/systemd/system/
$ mkdir /etc/frp
$ cp frpc.ini /etc/frp
$ vim /etc/frp/frpc.ini
修改內容如下
# 客戶端配置(假如你的公網IP為88.11.123.5)
[common]
server_addr = 88.11.123.5
server_port = 7000 # 與frps.ini的bind_port一致
token = 52010 # 與frps.ini的token一致
# 配置ssh服務
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 這個自定義,之后在ssh連接的時候要用
# 配置http服務,可用於小程序開發、遠程調試等(以下部分選填)
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = test.hijk.pw # web域名
remote_port = 自定義的遠程服務器端口,例如8080
啟動服務
# 設置開機啟動
$ systemctl enable frpc
# 啟動服務
$ systemctl start frpc
# 查看是否正常運行
$ systemctl status frpc
4. 連接測試
- 前提:在雲服務器控制台中的防火牆中開啟上面設置的端口7000, 7500, 6000
- 測試:
$ ssh labpc@88.11.123.5 -p 6000
# labpc: 內網實驗室的用戶名 88.11.123.5:公網ip地址 6000:內網中與服務器建立映射的端口
- 使用:直接使用VS code的Remote SSH可以訪問內網中的文件目錄,這樣寫代碼很方便
參考資料:https://blog.csdn.net/weixin_43922901/article/details/109261700
