frp:将内网机器通过公网 IP 连接起来
服务器端,设置frps.ini
1 | [common] |
开启 frp 的服务端,对于 Linux 主机,可以执行这一条命令来将其作为进程放到系统后台运行:
1 | nohup /etc/frp/frps -c /etc/frp/frps.ini & &> /dev/null |
执行后,我们可以通过
1 | netstat -lnp|grep 7000 |
看一下进程是否正常运行。到这里,云端服务的操作基本上就完成了。如果你使用的云服务商的主机绑定了安全组,需要手动登录服务器的云控制台,在网络安全组中将 7000 端口设置为进站出站的放行策略。
linux 服务器端启动:
1 | ./frps -c ./frps.ini |
服务器端自启动
liupei@tx:~$ cat /etc/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/home/liupei/.frp/frps -c /home/liupei/.frp/frps.ini
[Install]
WantedBy=multi-user.target
实现 RDP 远程桌面
在针对 Windows 系统的远程控制中,兼容性最好的当然是 RDP 远程桌面——无需安装第三方软件,非常简单容易进行设置。微软也在其他系统平台上推出了微软远程桌面客户端,让你几乎能在所有的主流平台上实现远程控制 Windows 主机。
首先,我们需要设置一下被控 PC 端(也就是希望被远程控制的设备)在 frp 的 GitHub 下载页面 中下载对应的执行包,这里因为内网目标被控主机是 Windows 10,因此需要下载 Windows 版本。解压缩之后,对 frpc.ini 文件进行编辑。
frpc.ini 文件中主要分为两个部分,最上面[common]是和云端服务器通信的部分,因此server_addr填写的是对应的云服务器的 ip 地址,而下面这个server_port则是刚才我们在服务端所设置的bind_port,两者需要保持一致。local_ip 指的是本机处于内网的 IP 地址,如果你是自己使用,只需要写 127.0.0.1 即可,而 local_port 指的是对应的服务端口,RDP 服务端口就是 3389。remote_port 就是远程用来映射的端口,根据原理,如果想通过远程桌面控制当前内网主机,其对应的地址就是:[server_port]:[remote_port](公网服务器 IP:映射的端口号)
完成之后点击保存,接着我们需要对电脑的远程进行设置。右键点击「此电脑」-「属性」,找到「远程设置」,在「远程桌面」中勾选「允许远程连接到此计算机」,同时取消「仅允许运行使用网络级别身份验证的远程桌面的计算机连接」的勾选,然后点击「确定」
最后,我们需要打开 Windows 防火墙给以上服务予以放行,在控制面板->所有控制面板项->Windows Defender 防火墙->允许的应用中点击「更改设置」,然后在下面找到「远程桌面」和「远程桌面(webSocket)」并分别勾选上「专用」和「公用」。
客户端,设置frpc.ini
1 | [common] |
linux客户机端启动
1 | ./frpc -c ./frpc.ini |
windows 客户机端启动:
1 | frpc.exe -c frpc.ini |
使用方法:ip:770x, 输入远程主机的登录用户名和密码之后,你就可以通过远程桌面来控制内网中的被控主机了!
除了正常的操作之外,你还可以实现一定程度的文件传输,比如说你可以从控制端的 PC 中复制文件并在远程桌面点击粘贴来实现文件传输,其实这个操作和那些商业远程控制软件非常类似,传输的速度和云服务器的公网带宽有关。
frp后台运行与自动启动
虽然这样实现了远程控制,但 frp 的客户端运行却需要一直在前台开启 Powershell 终端。其实,完全可以使用更加高效率的做法:将可执行文件打包成系统服务,然后让服务在后台自动运行。
windows方法一
这里我们通过这个 winsw 小工具来实现,在其GitHub 的 {https://github.com/winsw/winsw/releases}{[releases](https://github.com/winsw/winsw/releases)} 页面中下载} 对应 .net 运行时的版本,如果你使用的是 Windows 10 那么可以直接下载「WinSW.NET461.exe」这个文件,同时需要下载「sample-minimal.xml」这个配置文件,然后将两者下载到 frp 对应的文件夹,分别改名为「winsw.exe」和「winsw.xml」。
使用代码编辑器打开「winsw.xml」,将配置文件修改为:
1 | <service> |
点击保存之后,在 powershell 终端中按下ctrl + c 结束此前的 frpc 进程,然后输入.
1 | .\winsw install |
来安装服务,然后再输入
1 | .\winsw start |
来启动服务,期间如果弹出 UAC 点击允许即可,这样 frp 就被安装成系统服务在后台默默运行了。
dos批量删除进程和服务
1 | taskkill /F /im frpc.exe |
windows方法二
windwos利用”任务计划程序”。在Frp同目录下新建一个”start.bat” 文件。接着,右键编辑这个 start.bat:
1 | @echo off |
在windows管理工具里找到”计划任务程序”,添加”start.bat”文件的开机自启任务
anydesk with frp突破内网
配置frpc.ini
1 | # frpc.ini |
anydesk设置
- 配置自主访问密码
- 连接 – 配置监听端口,允许直接连接
使用方法:
1 | 152.136.xxx.85:6005 21xy |
linux方法
设置frp开机自启,创建service服务文件
1 | sudo vim /etc/systemd/system/frpc.service |
填入如下信息,ExecStart参数请自行替换路径
1 | [Unit] |
刷新服务列表:
1 | systemctl daemon-reload |
设置开机自启
1 | systemctl enable frpc |
关闭开机自启
1 | systemctl disable frpc |
启动服务
1 | systemctl start frpc |
停止服务
1 | systemctl stop frpc |
查看开机启动项
1 | systemctl list-unit-files |
查看启动项状态
1 | systemctl status frpc.service |
frp指定访问者,安全暴露内网服务
实现 SFTP 文件传输
虽然使用远程桌面可以覆盖远程控制中大部分的使用场景,但如果遇到需要传输文件的场景,远程控制简单的复制粘贴效率就比较低了。
通常远程文件传输可以通过 FTP 服务来解决。但 FTP 在服务配置上相当麻烦,一方面需要安装额外的第三方软件,并不能使用系统现成的软件来实现;另一方面服务相关的设置上都相当复杂。Windows 10 从 v1809 开始原生支持 OpenSSH,这让文件传输有了新的选择——通过 SSH 协议实现文件传输,无论是功能实现还是操作都变得既简单又高效。
首先我们需要在 Windows 10 上安装 openSSH 这个组件,打开 「Windows 设置 – 应用 – 可选功能」,点击「添加功能」找到 「OpenSSH 服务器」和「OpenSSH 客户端」点击安装。
之后打开「控制面板 – 管理工具」中「服务」,找到「OpenSSH Authentication Agent」以及「OpenSSH SSH Server」两个服务,都将其修改为「自动」并立即启动。
再次打开防火墙设置控制面板\textbf{->}所有控制面板项\textbf{->}Windows Defender 防火墙\textbf{->}允许的应用,找到「OpenSSH Server」看是否已经勾选了「专用」和「公用」,之后重启 PC。
重启之后,打开 PowerShell 并进入 frp 目录中,输入
1 | .\winsw stop |
暂停服务,使用编辑器打开 frpc.ini,添加有关 ssh 的映射配置:
1 | [ssh] |
这里远程的映射端口为 6000,更改完成之后保存,并使用 PowerShell 输入
1 | .\winsw start |
重启 frp 服务。至此被控端的 SSH 映射就已经配置完毕了。
我们来实验一下,从控制端 PC 打开 ssh 客户端(举例客户端为 Xshell),在新建会话中的「主机」一栏输入公网云服务器的 IP 地址,在端口号处输入此前设置的映射端口号 6000,点击「连接」。在弹出的对话框中,输入被控电脑的登录账户和密码(如果绑定了 Microsoft ID 就输入此 ID),完成连接之后你就可以看到终端显示为被控主机的用户目录。我们通过 SSH 协议连接到了被控主机的 Powershell 终端中,这也间接说明 SSH 服务已经开启成功了。
既然已经可以通过 SSH 连接,那么使用相同的协议传输文件也是顺理成章。点击 Xshell 功能栏中的 Xftp 就可以直接打开对应的主机文件目录.
- 内网穿透的几种方式(here)
- FRP 简单入门安装配置教程 – 开源免费内网穿透工具,无公网 IP 远程访问(here)
- 内网穿透frp配置示例}之linux客户机 here
- 内网穿透frp下载地址 here
- frp中文帮助 here
查看线程数目
1 | cat /proc/19011/status |grep Threads |
客户端无法连接问题
在部署frp的客户端时,执行命令./frpc -c ./frpc.ini,提示错误信息:
1 | 2020/06/15 18:15:17 [W] [service.go:101] login to server failed: dial tcp 39.97.228.44:7000: connect: connection timed out |
特意把服务器对应的安全组放开7000端口,但是还遇到这个错误。
经过排查发现,服务器还安装了宝塔,我赶紧登陆宝塔,同时把7000端口放行,frp客户端运行成功