欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里云服务器ECS利用反向代理FRP内网穿透

程序员文章站 2022-07-15 13:41:47
...

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

阿里云服务器ECS利用反向代理FRP内网穿透

过程问题

1.Windows server2016远程桌面默认关闭 ,需要手动打开

2. Windows10远程桌面连接提示:出现身份验证错误,要求的函数不受支持

阿里云服务器ECS利用反向代理FRP内网穿透
修改win10 注册表

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

然后在System文件夹内创建文件夹项:\CredSSP\Parameters

然后在Parameters文件夹内,新建 DWORD(32)位值(D),文件名为 AllowEncryptionOracle,值为2

重新远程连接一下,错误消失,可以正常连接

阿里云ECS 端口开放

  1. 7000 frp 服务端使用的端口
  2. 7002 frp 客户端(win)连接使用的端口
  3. 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