1016 字
5 分钟
在VPS上配置内网穿透
最近老经常出差到上海,笔记本和树莓派就放上海这边办公室懒得拿回公寓,但是上面都有些想随时调出来看的文件,希望能用手机直接访问这俩设备,搜了一下准备用frps-frpc做个内网穿透试试。
1 需求
用手机访问VPS特定端口后,VPS转发请求到笔记本和树莓派,就这么简单。搜到的第一篇文章就是内网穿透:在公网访问你家的 NAS。
2 部署frp
2.1 部署frps
在VPS上部署服务端frps:
下载页面在Release · fatedier/frp:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gztar xvzf frp_0.33.0_linux_amd64.tar.gzmv frp_0.33.0_linux_amd64 frpcd frp开启防火墙,我打算用默认的7000端口:
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:
[common]bind_port = 7000 # frps监听端口token = ***token***配置启动项:
ln frps /usr/bin/frpsmkdir /etc/frp/ln frps.ini /etc/frp/frps.ini
ln -s /root/frp/systemd/frps.service /usr/lib/systemd/system/systemctl enable frps.servicesystemctl start frps.service2.2 部署frpc - ssh
在树莓派上部署客户端,下载并解压:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm.tar.gztar xvzf frp_0.33.0_linux_arm.tar.gzmv frp_0.33.0_linux_arm frpcd frp在树莓派上配置frpc.ini
[common]server_addr = 45.135.xxx.xxx # VPS地址server_port = 7000 # VPS frps监听端口token = ***token***
[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22 # 树莓派需要暴露给VPS frps的服务端口,如这里的ssh默认22端口remote_port = 10022 # VPS frps监听10022端口,并将访问这个端口的流量转发给树莓派的22端口配置启动项:
sudo ln frpc /usr/bin/frpcsudo 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.servicesudo systemctl start frpc.service2.3 部署frpc - http
在笔记本上部署客户端,下载并解压:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_darwin_amd64.tar.gztar xvzf frp_0.33.0_darwin_amd64.tar.gzmv frp_0.33.0_darwin_amd64 frpcd frp在笔记本上配置frpc.ini
[common]server_addr = 45.135.xxx.xxx # VPS地址server_port = 7000 # VPS frps监听端口token = ***token***
[ssh]type = tcplocal_ip = 127.0.0.1local_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使用场景:
B /---X---A- 一开始我提交了一张图片(即在本地库及远端github上均从X->A,本地库及远端库最新为A)
- 发现忘了给IP打码,就用
git reset --hard HEAD^在本地回退了(即本地从A->X,而远端仍然为A) - 打码提交(即本地X->B,本地库最新为B,而远端仍然为A)。此时远端库最新的A节点和本地库最新的B节点冲突了,直接提交会出现错误:
➜ imagebed git:(master) git push -u origin masterTo 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分支的所有提交,如果是协作模式下会造成提交丢失。