外网环境下,连接windows远程桌面时,目标主机必须有外网IP。然而很多情况下,我们的主机都是没有外网IP的,因此我通过Frp和一个具有外网IP的vps实现内网穿透进而进行远程桌面。
我所用的VPS为Vultr的主机,有ipv4的公网ip。配置为CentOS7x64,512M,20GB。每月3.5刀。
首先将内网windows主机的远程桌面打开并配置防火墙,这里不再细说。
##一、VPS端部署Frp服务器端
首先使用如下命令从官方github下载服务器端frp并解压:
~~~bash
wget https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_amd64.tar.gz
tar -zxvf frp_0.16.1_linux_amd64.tar.gz
~~~
进入frp所在的目录:
~~~bash
cd frp_0.16.1_linux_amd64
~~~
使用命令nano frps.ini修改frps.ini文件:
~~~bash
[common]
bind_port = 7000
privilege_token = xxxxxx
dashboard_port = 7001
dashboard_user = user
dashboard_pwd = 123456
~~~
privilege_token是特权模式下与客户端连接的密码
dashboard_port是web控制页面也可以不设置。
设置完成,后台运行frps并将日志写入logs文件:
./frps -c ./frps.ini -L logs &
可以使用如下命令实时查看日志文件:
tail -f logs
服务器端配置完成!
##二、windows主机上安装Frp客户端
下载windows版Frp:
https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_windows_amd64.zip
修改frpc.ini文件:
[common]
server_addr = xx.xx.xx.xx
server_port = 7000
privilege_token = xxxxxx
[RemoteDesktop]
type = tcp
local_addr = 127.0.0.1
local_port = 3389
remote_port = 7002
其中:
server_addr 是外网vps的ip地址
server_port要与设置服务器端时的bind_port一致,
privilege_token与服务器端一致
remote_port注意不要冲突
然后运行frpc.exe。
注意:
这里有一个坑,如果卡在以上界面,一段时间后报错,并且服务器logs没有任何响应:
[W] [control.go:109] login to server failed: dial tcp 108.61.23.7:7000: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
dial tcp 108.61.23.7:7000: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
这时说明服务器的防火墙没有打开该端口,centos7默认为firewall防火墙,我这里还用iptables防火墙。
注意到以下关于防火墙的命令:
我们需要将7000(服务器端中的bind_port)端口放行,再vps中输入以下命令:
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 7000 -j ACCEPT
然后重新连接windows客户端
连接成功!
现在就可以用vps的ip:端口号连接远程桌面了(本文为xx.xx.xx.xx:7002)。