使用frp反向代理实现内网穿透(远程ssh登录家里的电脑)
1. 准备
- 从github上下载frp最新版
- 一台有公网ip的服务器S(本文以某里云CentOS为例)
- 两台PC(内网穿透的A和远在他乡的B)(本文中A是windows11,B是mac)
2. 配置内网穿透的A
- 在应用>可选功能>添加可选功能(查看功能)中安装OpenSSH服务器,打开cmd执行
net start sshd
。
- 解压frp压缩包,修改frpc.ini,如下(其中server_addr后面接服务器S的IP地址):
[common]
server_addr = SSS.SSS.SSS.SSS
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
- 尽量关闭防火墙
3. 配置服务器S
- 在服务器运营商提供的控制台面板上分别添加出站和入站规则,允许对服务器7000和6000端口的访问,可以在别的机器上扫描一下服务器的这两个端口,显示close就是已经允许访问了,显示filtered就是没有允许请检查其他服务器防火墙等设置。
- 以任意方式上传frp压缩包,解压,修改其中的frps.ini如下:
[common]
cind_port = 7000
- 尽量关闭防火墙。
4. 连通ABS
- 在服务器S上执行
nohup ./frps -c fops.ini > /dev/null 2>&1 &
,不挂断的后台运行frp服务端,之后会返回一个pid,可以通过kill pid
可以结束进程,通过命令netstat -lnpt
可以检查7000端口是否正在被监听,此时若用别的机器扫描7000端口应处于open状态。
- 在内网穿透PCA上frp解压的文件夹下用cmd执行
./frpc.exe -c ./frcp.ini
打开frp客户端,若没报错则此时反向代理已经建立。 - 在PCB上执行命令
ssh -oPort=6000 user@SSS.SSS.SSS.SSS
,其中user是PCA上的一个可用的用户,SSS.SSS.SSS.SSS是服务器S的IP地址,此时访问服务器的6000端口就相当于访问PCA的22端口,即使用ssh连接PCA,随后输入密码(应当是该微软用户的密码,如果不是就试试登录的PIN密码)。 - 连接成功,测试windows命令。
5. 让frp开机自启
- 在C:\下创建start.bat,输入以下内容,启动frp客户端,xxx处换成您的用户名。
@ECHO OFF
C:\Users\xxx\frp\frpc.exe -c C:\Users\xxx\frp\frpc.ini >> temp.log 2>&1
- 在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup下创建start.vbs,键入以下内容,让start.bat开机启动并且不弹出命令行窗口。
Set Ws=CreateObject("Wscript.Shell")
Ws.run "C:\start.bat",0
本文只是实现了ssh内网穿透的基本功能,如有其他需求如http、dns等服务穿透请参考[官方文档](https://gofrp.org/docs),其他安全性需求请自行调整安全策略。