电脑A:在家里,运行 Windows10 专业版系统电脑B:在办公室,运行 深度Linux系统电脑C:windows7系统,偶尔使用,接下来我们就来聊聊关于frp内网穿透配置?以下内容大家不妨参考一二希望能帮到您!
frp内网穿透配置
一、需求
电脑A:在家里,运行 Windows10 专业版系统。电脑B:在办公室,运行 深度Linux系统。电脑C:windows7系统,偶尔使用。
假如,电脑A 运行着一套软件开发环境,有时需要在电脑B或电脑C中进行调试,或者需要使用电脑A中的某些 Windows 软件来完成工作。也就是电脑 A 提供远程桌面服务,将电脑B和电脑C当做终端,使用电脑 B 或电脑 C 来操作 电脑 A。反之,有时也同样需要使用电脑 A 来操作电脑 B中的某些办公系统。
二、解决方法探讨
1、这样的需求不一定非要使用远程桌面吧?
用笔记本,安装双系统,走哪儿带哪儿,一样解决问题啊。额......,好吧,这个解决办法不是本文要讨论的,我说的就是远程连接电脑和远程工作的问题。
2、使用向日葵或 TeamViewer 类软件
这类软件使用方法比较简单,并且都有免费版本,本人使用的均是免费版本,主观感觉向日葵速度延迟较大,如果要低延迟那就需要付费,TeamViewer 的速度已经基本能满足远程办公的需要。
向日葵需要在电脑 A 中安装服务端,注册账号并登录,在电脑 B 或电脑 C 中安装控制端,用同样的账号登录,就能看到电脑 A 已经是在线状态,即可发起远程控制。
Teamviewer 在电脑 A 和电脑 B 中同时安装,运行TeamViewer后会显示ID和密码,电脑 B 输入电脑 A 中的 ID 进行连接,输入密码即可实现远程控制。此密码会自动更新,但是可以自己指定一个固定密码。
3、 VNC类软件
VNC(Virtual Network Computing) 是一个开源、免费的,基于 RFB(Remote Frame Buffer)协议进行通信并完成桌面传输显示和操作,RFB (远程帧缓存) 是一个远程图形用户的简单协议,它可以应用于所有的窗口系统:Linux桌面、Windows和Mac系统。
Linux上的VNC服务端,比较常用的就是 tigervn c和 x11vnc,Linux 上的 VNC 客户端比较多,例如,Remmina 同时支持 RDP 和 VNC 协议。
在Windows上支持VNC协议的软件,常用的有RealVNC(收费)、UltraVNC(免费)和TightVNC(免费),它们同时既是服务端又是客户端。
4、远程桌面服务
在桌面虚拟化技术中,当前主流的桌面传输协议有 ICA、PCoIP、RDP、SPICE 四种,也就是通常所说的桌面云。Windows 10 系统中的远程桌面,使用的就是 RDP(Remote Desktop Protocol),即远程桌面协议。
区别:VNC是服务端把桌面窗口渲染完成后将图像直接传输给客户端,客户端只是对图像进行解码显示;而 RDP 和 SPICE 相当于将桌面窗口数据传输给客户端,再由客户端生成图形和图像显示,更加适合虚拟桌面使用。SPICE 是一个开源协议,RDP 的客户端是开源的但是服务端不开源。
至于那些抓屏幕的远程控制软件,比如十几年前很有名气的 PCAnywhere,就不提了吧,毕竟现在已经是云计算、虚拟化技术大行其道的时候了。
5、华为云电脑
华为云电脑估计使用的的是华为自己的HDP协议,HDP源自ICA,不过华为云电脑目前好像只支持华为手机吧,没有PC系统的客户端,并且云电脑可选配置少,不能自定义,但是其中有一款是游戏款,可见已经整合了显卡虚拟化技术,应该类似于微软的RemoteFX。本人简单试用了一下,效果不错,这个或许是以后的发展方向,桌面虚拟化走向大众用户,以后一般情况下就不用再买电脑了,一部手机,或者一台瘦客户终端(机顶盒),一台显示设备(显示器、电视、投影),再配合宽带或5G网络,就可以连接云电脑来完成自己的工作。
6、花生壳、神卓互联等内网穿透类服务
这些内网穿透工具使用比较简单,都是根据使用的带宽收费的。假如自己已经有一台公网访问的服务器,本着理工男"万事不求人"、“自己动手丰衣足食”的想法,用这台公网服务器做为代理,同样可以实现内网穿透,和花生壳这类工具原理基本是相似的。
三、方案选择
1、电脑B远程连接电脑A
电脑A是Windows10企业版,最方便的当然是开启远程桌面服务(RDP)。但是前提条件是:如果使用RDP,就需要服务端电脑具有公网IP地址。
家里的电脑A,网络使用电信100M,上行4M,虽然有公网IP地址,但是需要用超级管理员(一般是telecomadmin)登录天翼光猫,做端口映射,才能用使用公网IP地址连接到电脑A。另外,家用的电信宽带公网IP地址是动态变化的,需要使用路由器自带的花生壳之类的服用来解决。也就是在没有解决这些问题之前,电脑A属于内网,而无法暴露在公网中。
现在的问题就是如何让内网电脑(电脑A)向外网用户(电脑B)提供远程桌面、WEB等网络服务?那就是使用一台具有公网IP地址的服务器做为反向代理,实现内网穿透。电脑A向反向代理服务器发送请求,接着反向代理向电脑B转交请求,电脑B向代理服务器返回所请求的内容,代理服务器将获得的内容返回给电脑A。正好,本人有一台阿里云的服务器,可以满足这个要求。
2、内网穿透工具选择:Frp
常见的内网穿透的反向代理程序是 ngrok ,国内有许多提供内网穿透服务的平台都是基于 ngrok 搭建的,但是 ngrok 配置略复杂。这里选择 Frp ,因为配置简单,功能强大。
http://github.com/fatedier/frp 有详细的使用文档。
(图3-1 Deepin 远程连接 Win10)
四、FRP内网穿透及远程桌面配置
(一)代理服务器端配置
1、ssh 连接阿里云主机(centos 7)
2、下载:wget http://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
下载完成之后解压:tar -zxvf frp_0.27.0_linux_amd64.tar.gz
解压完成后重命名目录:mv frp_0.27.0_linux_amd64 frp
进入frp目录文件夹:cd frp
FRP 默认给出两个服务端配置文件,一个是简版的 frps.ini,另一个是完整版本 frps_full.ini。
删除客户端相关的文件(frpc,frpc.ini,frpc_full.ini)
3、编辑 frps.ini :vim frps.ini
bind_port 为客户端与服务端进行通信的端口
Dashboard 通过浏览器查看 frp 的状态以及代理统计信息展示。
[common]
bind_port = 7000
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin
4.1、设置开机启动和后台运行
vi /etc/systemd/system/frps.service
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/home/frp/frps -c /home/frp/frps.ini
Restart= always
RestartSec=1min
[Install]
WantedBy=multi-user.target
注意ExecStart中要配置成自己的路径
然后启动frps:sudo systemctl start frps 打开开机自启动:sudo systemctl enable frps
如果要重启应用:sudo systemctl restart frps 如果要停止应用:sudo systemctl stop frps 如果要查看应用的日志:sudo systemctl status frps
4.2、/frps -c /frps.ini 前端开启,关闭就会失效,使用 nohup 后端运行
nohup /frps -c /frps.ini &
5、由于使用阿里云服务器,需要在阿里云控制面板配置安全组规则,添加 7000 7500 33891 33892 8080 端口。其中 7000 和 7500 是 frps.ini 文件开放的端口,33891 是电脑B frpc.ini 指定的映射到本地的远程端口。如果使用的别的服务器,就在防火墙打开这些端口。
6、本地通过浏览器打开 http://[server_addr]:7500 ,访问 dashboard 界面,输入用户名及密码 admin,如果能正常显示,说明运行正常
(二)电脑A(windows10)安装Frp客户端
1、首先需要开启 windows10 远程桌面。打开控制面板=>系统=>高级系统设置,切换到"远程",选择“允许远程连接到此计算机”,并勾选身份验证选项,如下图所示:
2、下载对应的版本,解压,删除与服务端相关的文件(frps.exe, frps.ini,frps_full.ini)
和 FRP 服务端类似,FRP 默认也给出两个客户端配置文件,一个是简版的 frpc.ini,另一个是完整版本 frpc_full.ini。
3、编辑 frpc.ini
[common]
server_addr = 1.2.3.4
server_port = 7000
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 33891
这里配置的远程端口(remote_port)要和前面阿里云开放的端口对应。这里指阿里云主机的 33891 端口映射到本机的 3389 端口。还可以继续添加,映射到本机 80 端口,就可以让本机对外提供 http 服务。
4、启动客户端服务
在frp 目录中新建文件 frp.vbs
dim objShell
set objShell=wscript.createObject("WScript.Shell")
iReturnCode=objShell.Run("C:\WWW\frp\frpc.exe -c C:\WWW\frp\frpc.ini",0,TRUE)
双击 frp.vbs ,即可启动 frpc 服务。
将 frp.vbs 放在 C:\Users\zmh\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 启动目录中,即可实现开机启动。
(三)电脑B(访问端,Linux)连接电脑A(Win10)远程桌面
电脑B是深度Deepin Linux 系统,Deepin 是国产的基于Debian的系统,和ubuntu系统类似,但是面向国内普通用户做了许多定制,相比其他Linux发行版,开箱即用,使用简单方便。
首先在 Deepin 的应用商店安装 Remmina 工具,Remmina 是一个支持 SSH RDP VNC 等多种协议的远程桌面客户端,运行之后,打开右上角的菜单,选择“首选项”,切换到“RDP”选项卡,质量设置里,可以选择一个预设项,比如“良好”,一定要勾选“平滑字体”,保存。
回到Remmina主程序,点击左上角创建连接,名称由自己定,,协议选择“RDP”,服务器填写自己的阿里云服务器的IP地址,端口号是电脑A frpc.ini 配置文件指定的 33891,如果使用默认的3389端口,可以不填端口号。切换到高级项,将画质设置为“良好”,声音也可以打开,安全项不变,但是如果电脑A的系统是windows7,安全项一定要设置为"RDP"才能连接。
一切配置就绪,连接之后,输入电脑A的Win10系统的用户名密码登录,如图3-1所示,效果非常好,自己感觉要比 TeamViewer 效果好。使用之后,断开连接,如果再回到电脑A,Win10处于锁定状态,输入密码登录,桌面依然会保持断开时的样子。
如果电脑B是 win7以上系统呢,那连接就更简单了,打开windows的远程桌面连接程序(mstsc.exe),输入代理服务器IP及端口,连接即可。
五、Win10连接Linux远程桌面的尝试
也就是用电脑A远程连接电脑B,由于办公室电脑不能轻易去动光猫或路由器,也就是电脑B也是属于内网,方法和上面第四基本一样。
1、在电脑B中安装远程桌面服务
打开终端,运行:sudo apt-get install xrdp
延续windows的运程桌面,依然使用RDP协议,安装xrdp 做为Deepin 远程桌面服务。
2、在电脑B中安装Frp客户端
下载系统对应的版本,wget http://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
下载完成之后解压:tar -zxvf frp_0.27.0_linux_amd64.tar.gz
解压完成后重命名目录:mv frp_0.27.0_linux_amd64 frp
进入frp目录文件夹:cd frp
删除与服务端相关的文件(frpc,frpc.ini,frpc_full.ini)
和 FRP 服务端类似,FRP 默认也给出两个客户端配置文件,一个是简版的 frpc.ini,另一个是完整版本 frpc_full.ini。
3、编辑 frpc.ini,开启了3389远程桌面服务和 http 服务。
[common]
server_addr = X.X.X.X
server_port = 7000
[RDP]
type = tcp
local_ip = 0.0.0.0
local_port = 3389
remote_port = 33892
[web]
type = http
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080
4、启动客户端
sudo vim /lib/systemd/system/frpc.service
[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的frpc的实际安装目录)
ExecStart=/home/zmh/program/frp/frpc -c /home/zmh/program/frp/frps.ini
[Install]
WantedBy=multi-user.target
然后启动frps:sudo systemctl start frps 打开开机自启动:sudo systemctl enable frps
如果要重启应用,可以这样,sudo systemctl restart frps 如果要停止应用,可以输入,sudo systemctl stop frps 如果要查看应用的日志,可以输入,sudo systemctl status frps
5、在电脑A或其他Win10系统的电脑上,打开远程桌面连接程序(mstsc.exe),输入代理服务器IP地址及端口号,即可连接。但是效果非常不理想,画面质量很好,但是窗口渲染的速度太慢,打开或移动一个窗口要从上到下慢慢才能显示出来,关闭了电脑B的Deepin 系统的窗口特效,也没有多少改变。
6、使用 Teamviwer 连接 deepin ,画面质量明显要比连接 Win10 差一点,不过速度延迟不大还可以接受,看来 Win10 要连接 Deepin 桌面暂时只能用 Teamviwer 了,后续再试试 Deepin 到 Deepin 的远程桌面连接,用 x11vnc,还有 x11转发分别试一下效果。
除了windows3.X 是基于dos的,windows95之后其桌面环境是和内核是集成在一起的,是专为PC打造的桌面操作系统,远程桌面效果好是应该的。Linux 从诞生那天就是为服务器和系统开发者准备的,桌面化方面效果当然就差了。Linux 的图形界面只是Linux 下的一套C/S结构的应用程序,由X协议、X服务器器、显示管理器(DM)、窗口管理器(WM)及其配套的应用程序构成一个完整的Linux桌面环境,通常称做 X-Server 和 X-Client。现在常见的 X-server 是 Xorg,deepin 的桌面环境是 DDE(Deepin Desktop Environment,Deepin 桌面环境)。当然, Linux桌面环境是 C/S 结构,如果要访问处于同一个完全互访的局域网环境下的 Deepin 系统的桌面,就应该使用 x11 转发。
--end--