在VPS上配置内网穿透

最近老经常出差到上海,笔记本和树莓派就放上海这边办公室懒得拿回公寓,但是上面都有些想随时调出来看的文件,希望能用手机直接访问这俩设备,搜了一下准备用frps-frpc做个内网穿透试试。

1 需求

用手机访问VPS特定端口后,VPS转发请求到笔记本和树莓派,就这么简单。搜到的第一篇文章就是内网穿透:在公网访问你家的 NAS

2 部署frp

2.1 部署frps

在VPS上部署服务端frps:

下载页面在Release · fatedier/frp

1
2
3
4
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar xvzf frp_0.33.0_linux_amd64.tar.gz
mv frp_0.33.0_linux_amd64 frp
cd frp

开启防火墙,我打算用默认的7000端口:

1
2
3
4
5
6
sudo firewall-cmd --zone=public --permanent --add-port=7000/tcp # frps监听端口
sudo firewall-cmd --zone=public --permanent --add-port=10022/tcp # 树莓派ssh服务
sudo firewall-cmd --zone=public --permanent --add-port=10080/tcp # 笔记本http服务
firewall-cmd --reload
#firewall-cmd --list-ports
#7000/tcp 10022/tcp 10080/tcp

在VPS上配置frps.ini

1
2
3
[common]
bind_port = 7000 # frps监听端口
token = ***token***

配置启动项:

1
2
3
4
5
6
7
ln frps /usr/bin/frps
mkdir /etc/frp/
ln frps.ini /etc/frp/frps.ini

ln -s /root/frp/systemd/frps.service /usr/lib/systemd/system/
systemctl enable frps.service
systemctl start frps.service

2.2 部署frpc - ssh

在树莓派上部署客户端,下载并解压:

1
2
3
4
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm.tar.gz
tar xvzf frp_0.33.0_linux_arm.tar.gz
mv frp_0.33.0_linux_arm frp
cd frp

在树莓派上配置frpc.ini

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 45.135.xxx.xxx # VPS地址
server_port = 7000 # VPS frps监听端口
token = ***token***

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 树莓派需要暴露给VPS frps的服务端口,如这里的ssh默认22端口
remote_port = 10022 # VPS frps监听10022端口,并将访问这个端口的流量转发给树莓派的22端口

配置启动项:

1
2
3
4
5
6
7
sudo ln frpc /usr/bin/frpc
sudo mkdir /etc/frp/
sudo ln frpc.ini /etc/frp/frpc.ini

sudo ln -s /home/pi/frp/systemd/frpc.service /usr/lib/systemd/system/
sudo systemctl enable frpc.service
sudo systemctl start frpc.service

2.3 部署frpc - http

在笔记本上部署客户端,下载并解压:

1
2
3
4
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_darwin_amd64.tar.gz
tar xvzf frp_0.33.0_darwin_amd64.tar.gz
mv frp_0.33.0_darwin_amd64 frp
cd frp

在笔记本上配置frpc.ini

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 45.135.xxx.xxx # VPS地址
server_port = 7000 # VPS frps监听端口
token = ***token***

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 80 # 树莓派需要暴露给VPS frps的服务端口,如这里的ssh默认22端口
remote_port = 10080 # VPS frps监听10022端口,并将访问这个端口的流量转发给树莓派的22端口

笔记本就不配置启动项了,临时服务web,用完就关。另外,macOS的防火墙过于傻瓜,只能配置程序,不能配置端口,用nginx的时候得把这傻瓜墙关了。

3 测试

谷歌上搜个Termux的apk安在手机上,再Termux安装ssh(pkg install dropbear),用手机登录ssh -p10022 pi@45.135.135.76

小结

frp作为内网穿透工具还有好多高级功能我都没试,有需要再尝试。另外,提交上面的手机图片时遇到一个不太常见的git使用场景:

1
2
3
     B
/
---X---A
  1. 一开始我提交了一张图片(即在本地库及远端github上均从X->A,本地库及远端库最新为A)
  2. 发现忘了给IP打码,就用git reset --hard HEAD^在本地回退了(即本地从A->X,而远端仍然为A)
  3. 打码提交(即本地X->B,本地库最新为B,而远端仍然为A)。此时远端库最新的A节点和本地库最新的B节点冲突了,直接提交会出现错误:
1
2
3
4
5
6
7
 ➜  imagebed git:(master) git push -u origin master
To github.com:zlotus/imagebed.git
! [rejected] master -> master (non-fast-forward)
error: 推送一些引用到 'github.com:zlotus/imagebed.git' 失败
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。

按照git给出的提示查看Note about fast-forwards一节,发现我遇到的情况叫做non-fast-forward提交,即希望提交B以将分支A抹掉。此时需要使用git push --force -u origin master命令。这种场景不常见,一般只有在没有别人参与的分支提交上能用到,因为强制提交会抹掉X->A分支的所有提交,如果是协作模式下会造成提交丢失。

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×