阿里云服务器ECS利用反向代理FRP内网穿透
阿里云ECS利用反向代理 F#R#P 内@网@穿@透
FRP 服务端搭建
有时候在外地要访问家里的电脑或者网络硬盘,没有固定IP怎么办呢?这时候就面临内网穿透需求了。*
内@网@穿@透
一般内@网@穿@透有哪些解决方法呢?一般有反向代理、动态域名等等。前者用的多有frp,后者有花生壳等。
- frp,即本文所讲的。frp 是一个可用于内网穿透的高性能的反向代理应用。其官网链接为:https://github.com/fatedier/frp
- sunny_ngrok,国外反向代理。
- 花生壳,动态域名,通过解析域名和对应的IP地址。这个国产商业软件,要实名制,绝大多数产品是要付费的。
frp简介
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp
协议。其官网链接为:https://github.com/fatedier/frp
frp分为服务器端frps、客户端frpc。
准备条件
带公网IP的VPS服务器,假设IP地址是111.111.111.111。如果没有VPS服务器具体可以参考阿里云域名注册与备案、服务器ECS购买与登录.
- 外网PC ACentOS7 。
- 内网PC B Windows Server 2016 。
- 内网PC C CentOS7 。
VPS服务器端搭设
- 下载frps到服务器
frp_0.34.3_linux_arm64.tar.gz
https://github.com/fatedier/frp/releases
- 修改服务器配置文件(frps.ini):
[common]
#与客户端绑定的进行通信的端口
bind_port = 7000
- 启动frp命令:
./frps -c ./frps.ini &
内网PC 客户端搭设(windows版本)
- 下载客户端的frp:
在这里 https://github.com/fatedier/frp/releases 找到对应版本的frp。
因为在服务器端是使用了0.16.0版本,所以需要找到对应版本下载。
- 编辑frpc.ini文件
[common]
server_addr = 111.111.111.111
server_port = 7000
[RemoteDesktop]
#windows下使用远程桌面
type = tcp
local_addr = 127.0.0.1
local_port = 3389
remote_port = 7002
- 启动frp客户端frpc:
找到frpc.exe对应文件夹,在其地址栏输入cmd,则进入以该文件夹为路径的cmd命令行。在命令行下输入以下命令即可启动。
frpc -c frpc.ini
远程连接
外网PC在命令行下输入mstsc,启动远程桌面
在远程桌面的计算机输入框中,输入VPS对应ip及客户端frpc.ini中对应的remote_port。
在这里则是111.111.111.111:7002
内网PC 客户端搭设(linux版本)
- 下载客户端的frp:
在这里 https://github.com/fatedier/frp/releases 找到对应版本的frp。
- 编辑frpc.ini文件
[common]
server_addr = 111.111.111.111
server_port = 7000
[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7003
- 启动frpc客户端。
./frpc -c ./frpc.ini &
远程连接
外网电脑ssh登录内网PC,输入命令为
ssh -p 7003 aaa@qq.com
其中 -p为端口号,登录用户名为root。
假若已经保存了秘钥文件id_rsa,可以用-i 指定秘钥文件
ssh -p 7003 aaa@qq.com -i id_rsa
过程问题
1.Windows server2016远程桌面默认关闭 ,需要手动打开
2. Windows10远程桌面连接提示:出现身份验证错误,要求的函数不受支持
修改win10 注册表
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
然后在System文件夹内创建文件夹项:\CredSSP\Parameters
然后在Parameters文件夹内,新建 DWORD(32)位值(D),文件名为 AllowEncryptionOracle,值为2
重新远程连接一下,错误消失,可以正常连接
阿里云ECS 端口开放
- 7000 frp 服务端使用的端口
- 7002 frp 客户端(win)连接使用的端口
- 7003 frp 客户端(linux)连接使用的端口
开机自启
frp 服务端开机自启
创建服务文件
sudo vim /etc/systemd/system/frpc.service
填入如下信息,ExecStart请自行替换
[Unit]
Description=Frp Client
After=network.target
Wants=network.target
[Service]
Restart=on-failure
RestartSec=5
ExecStart=/root/frp/frp_0.34.3_linux_amd64/frps -c /root/frp/frp_0.34.3_linux_amd64/frps.ini
[Install]
WantedBy=multi-user.target
#刷新服务列表:
systemctl daemon-reload
#设置开机自启
systemctl enable frpc
#关闭开机自启
systemctl disable frpc
#启动服务
systemctl start frpc
#停止服务
systemctl stop frpc
frp 客户端(linux)开机自启
同上
frp 客户端(win)开机自启
方法一:
创建一个快捷方式到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
里面 这个方法最大缺点是电脑要登录后才能连接,所以一般不用这个方法
方法二:
用计划任务实现,方法看这里 http://diannaobos.com/post/405.html
方法三:
用winsw将frp注册为系统服务 这个方法最稳定,这是我最终用的方法。 下载winsw
https://github.com/kohsuke/winsw/releases
,改名为winsw.exe,放到frp相同的目录里,在同一个目录里创建一个utf8编码的文本文件,文件名是 winsw.xml,内容是:
<service>
<id>frp</id>
<name>frp这里是服务的名称</name>
<description>这里是服务的介绍,随便写</description>
<executable>frpc</executable>
<arguments>-c frpc.ini</arguments>
<onfailure action="restart" delay="60 sec"/>
<onfailure action="restart" delay="120 sec"/>
<logmode>reset</logmode>
</service>
以管理员权限打开一个命令窗口,cd到frp所在目录,执行:
winsw install
winsw start
如果要卸载服务,执行命令:
winsw stop
winsw uninstall
上一篇: Java基础类String了解一下