搭建 frp 内网穿透服务器

写在前面:国内 腾讯云 和 阿里云服务器 都需要对安全组进行配置才可以访问!

一、云服务器

阿里云服务器(推荐)

  • 开发者成长计划
  • 云服务器管理控制台

初次登录需要密码,这时可通过重置 root 密码解决。

腾讯云服务器

  • 云产品免费试用_云服务免费体验_免费云产品试用 - 腾讯云
  • 服务器 - 轻量应用服务器 - 控制台
  • 腾讯云-控制台 ~ 配置安全组信息

默认会分配一个普通的用户,切换到 root 使用:

su -i
passwd  # 修改 root 账户密码

二、使用 frp 实现内网穿透

官方下载链接:Releases · fatedier/frp,配置流程如下。

1. 上传 frp

将下载好的 frp 压缩包分别传送到 云服务器 和 Linux 服务器(目标代理机器,即我们要代理的那台机器)。其中云服务器作为 frps(frp 服务端),目标代理机器 作为 frpc(frp 客户端)。该压缩包同时包含了 frps & frpc,因此不需要分别下载。

注意:新版本里面没有 systemd 文件夹,这里面包括了将 frps/frpc 注册为服务程序的脚本文件,如果需要的话,可以下载 0.44.0 之前的版本。
搭建 frp 内网穿透服务器_第1张图片

2. 安装

2.1 在 云服务器 上安装

tar -zxvf frp_0.38.0_linux_386.tar.gz -C target_dir   # 解压到指定目录

# 删除无用的文件(客户端)
rm -f frpc* systemd/frpc*

本次实验中没有对文件进行任何额外的操作,如果要自定义 内网穿透服务器 的端口,可以在 frps.ini 文件中进行修改,更多的参数参考 frps_full.ini 文件,实际使用的还是 frps.ini 没有使用 frps_full.ini 配置文件,后面的 frpc 同理。

2.2 在 目标代理机器 上安装

tar -zxvf frp_0.38.0_linux_386.tar.gz -C target_dir  # 解压到指定目录

# 删除无用的文件(服务端)
rm -f frps* systemd/frps*

修改配置文件 frpc.ini(目前只修改 云服务器的地址,其他设置作为后续的改进方案),更多详细配置参考 frpc_full.ini

server_addr = 120.79.173.220

保存退出。

3. 给 云服务器主机 配置 安全组策略

3.1 阿里云

搭建 frp 内网穿透服务器_第2张图片

搭建 frp 内网穿透服务器_第3张图片
修改完成后,重启机器!!!使得配置生效。

3.2 腾讯云

腾讯云-控制台

搭建 frp 内网穿透服务器_第4张图片

以上添加的安全组策略无法应用到实例上,只能使用以下方法针对实例进行设置。服务器 - 轻量应用服务器 - 控制台

搭建 frp 内网穿透服务器_第5张图片
搭建 frp 内网穿透服务器_第6张图片

修改后无需重启即可生效!

注意

  1. 默认会创建一个 lighthouse 普通用户,用于一键登录,如果不需要该用户,直接在 登录 选项栏里选择关闭一键登录功能即可。
    搭建 frp 内网穿透服务器_第7张图片

  2. 如果要修改账户密码,可以在 服务器 - 轻量应用服务器 - 控制台(更多–>重置密码) 进行修改!
    搭建 frp 内网穿透服务器_第8张图片
    如果要切换到 root 用户,只需要运行以下命令即可,

sudo -i/s  # -i 或 -s 都可以

4. 运行测试(开机自启动,后台运行等作为升级方案放在后面)

  1. 在服务端(frps)启动
./frps -c frps.ini

搭建 frp 内网穿透服务器_第9张图片

  1. 在客户端(frpc)启动
./frpc -c frpc.ini

搭建 frp 内网穿透服务器_第10张图片

此时 服务端 frps 的响应为,
搭建 frp 内网穿透服务器_第11张图片

优化升级

(1)服务端

修改 frps.service

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
# 如果只有单个 root 用户,必须指定为 root,否则使用默认的 nobody 即可
# User=nobody 报错:code=exited, status=203/EXEC frp
User=root
Restart=on-failure
RestartSec=5s
# 路径修改
ExecStart=/root/env/frp/frps -c /root/env/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

参考链接:frp服务器端程序frps自启动出错-Bluesky’s blog 非常感谢这个作者!!!

将修改后的文件添加到系统文件中(注册服务?):

sudo cp systemd/frps.service /etc/systemd/system/
sudo systemctl start frps.service
systemctl status frps.service
sudo systemctl enable frps.service  # 开机自启动

ps -ef | grep frps

删除 frp 服务(比如安装文件出错,要重新安装):

systemctl stop frps.service
systemctl disable frps.service
rm -f /etc/systemd/system/frps.service
systemctl daemon-reload
systemctl reset-failed
systemctl status frps.service

参考链接:CentOS使用systemctl彻底删除服务 | 瑞瑞哥的博客


(2)Linux 客户端

frpc.service 配置文件修改,

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
# 由于有多个用户,因此不用指定唯一的用户名
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/home/guest/xxx/env/frp/frpc -c /home/guest/xxx/env/frp/frpc.ini
ExecReload=/home/guest/xxx/env/frp/frpc reload -c /home/guest/xxx/env/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

安装注册 frpc 服务,随着系统启动同时启动该服务,运行其中的脚本文件,

sudo cp systemd/frpc.service /etc/systemd/system/
sudo systemctl start frpc.service
systemctl status frpc.service
sudo systemctl enable frpc.service  # 开机自启动

ps -ef | grep frpc

删除 frpc 服务,

sudo systemctl stop frpc.service
sudo systemctl disable frpc.service
sudo rm -f /etc/systemd/system/frpc.service
sudo systemctl daemon-reload
sudo systemctl reset-failed
systemctl status frpc.service

(3)Windows 客户端

frpc.ini,

[common]
server_addr = 购买的有公网 IP 的服务器地址
server_port = 7000
token = your_tocken

[修改为有代表意义的名称,只要不和其他 frpc 名称重复即可]
type = tcp
local_ip = 127.0.0.1
local_port = 3389  # Windows 远程桌面连接端口
remote_port = 6001  # 指定映射端口号,不能和其他的 frpc 重复!

保存之后,完成接下来的工作,直接看方法3!

.exe 注册为 windows 服务(推荐使用方法3)

  • 2种方法教你,如何将exe注册为windows服务,直接从后台运行 - 知乎
  • 关于服务的创建常用命令(redis服务创建、启动、停止、删除)_dhq_blog的博客-CSDN博客_redis停止服务命令
  • 以windows服务的方式运行FRP · 搬砖小抄

方法1:sc.exe创建 | Microsoft Docs 很少用到!

sc create frpc binpath= "D:\dev\env\frp_0.44.0_windows_386\frpc.exe" type= own start= auto

如果程序不符合规范,就算可以创建成功,也无法启动,报 1053 错误,在服务程序中右键添加启动参数仍然无法解决,因此判断该程序不符合 Windows 支持的服务程序类型。

搭建 frp 内网穿透服务器_第12张图片

删除服务,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 删除对应服务条目(默认 sc 删除时会同时删除注册表中的相关项目)

sc delete frpc

方法2:创建用户定义的服务 - Windows Client | Microsoft Docs

  • 源链接:https://pan.baidu.com/s/1gKu_WwVo-TeWXmrGAr9qjw 提取码:s1vm
  • instsrv.exesrvany.exe-桌面系统文档类资源-CSDN文库 自己上传到 CSDN
  1. instsrv.exesrvany.exe 拷贝到C:\WINDOWS\SysWOW64目录下;

  2. 以管理员身份打开 cmd

  3. 运行命令,

.\instsrv.exe frpc C:\WINDOWS\SysWOW64\srvany.exe
  1. 服务创建成功之后,会在注册表中生成条目 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服务名称

    1. 选中新建的服务,右键创建新的 项目:Parameters

    2. 点击 Parameters,在右边栏创建新的 字符串值,

      • Application 作为服务运行的程序路径;

      • AppDirectory 作为服务运行程序所在文件夹;

      • AppParameters 启动参数

        注意:启动参数不能加 引号!参数值可以加!!!即 -c 不能用引号!

      最终效果,
      搭建 frp 内网穿透服务器_第13张图片

  2. Ctrl Shift Esc 打开控制台,找到服务选项,右键启动即可,如果要设置为开机自启动,直接进入服务中进行设置即可,

搭建 frp 内网穿透服务器_第14张图片

如果 Snipaste 无法使用,尝试在设置中设置 以管理员方式启动!

之后通过远程连接进行测试!没有任何问题!

虽然暂时可以使用,但是使用 srvany 的有点缺陷,具体看 nssm 官方说明文档!因此不推荐使用该方法。

卸载服务,

sc delete frpc

会将服务以及注册表中的条目都删除,所以不用再进入注册表手动删除之前的配置!

方法3:nssm(推荐使用,简单,安全高效!)

个人理解:是对方法二的封装升级(思路上),能够更好地满足需求。

  • NSSM - the Non-Sucking Service Manager
  • 堪称神器,能将普通应用程序注册成 Windows 服务的助手程序 NSSM ! - 知乎

直接阅读官方说明文档!

  1. 下载:https://nssm.cc/release/nssm-2.24.zip

  2. 将解压后的文件放到指定路径:D:\dev\env\OS\nssm-2.24\

  3. 将其添加到系统环境变量中,为了方便管理,自己添加的环境都添加在 user -- Path 下,

搭建 frp 内网穿透服务器_第15张图片

  1. 此时就可以在终端中直接使用 64 位的 nssm,进入要注册为服务的应用程序 可执行文件的目录下,在该目录下以管理员身份打开终端,执行以下命令即可,
nssm install/uninstall 自定义服务名称

搭建 frp 内网穿透服务器_第16张图片

之后在资源管理器中即可看到该服务正在运行(第一次需要手动运行)!

打开 注册表编辑器,发现 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下新增了一个条目 frpc,和之前的推断一样,原理和方法2类似,但是 nssm 做了封装(GUI),同时添加了更多的功能,操作管理起来也方便!

连接测试

ssh 服务器用户名@frps服务器地址 -p 6000

搭建 frp 内网穿透服务器_第17张图片

使用 Windows 远程桌面连接,这样即使不在同一个局域网内,或者 IP 改变,也能够远程连接!
搭建 frp 内网穿透服务器_第18张图片

小问题:连接上之后长时间不操作导致断连的解决办法。

  • 解决ssh登录后闲置时间过长而断开连接 - 腾讯云开发者社区-腾讯云
  • 解决SSH自动断线,无响应的问题。 - 简书 推荐使用该方法

#.1 客户端修改

~/.ssh/config 添加,

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

#.2 服务端修改(不推荐)

这里就不介绍了,需要的直接看第一个链接。

参考链接

  • 阿里云服务器实现内网穿透(frp方式)_Ray Mond的博客-CSDN博客
  • 阿里云服务器实现frp内网穿透(完整教程)_Forizon的博客-CSDN博客_frp云服务器
  • 阿里云服务器实现 frp 内网穿透_曹灰灰的博客-CSDN博客
  • FRP内网穿透技术实现对校园网电脑的远程访问_大鹏要高飞的博客-CSDN博客
  • 腾讯云无法作为frps的问题 · Issue #905 · fatedier/frp
  • ubuntu如何对外开放端口?-云社区-华为云

优化(注册服务,开机自启动…)

  • 搭建属于自己的FRP内网穿透 - 腾讯云开发者社区-腾讯云 优化,
  • frp配置内网穿透教程(超详细) - 腾讯云开发者社区-腾讯云
  • Linux系统设置frp开机自动启动 | CAIJINBO

你可能感兴趣的:(环境,工具,腾讯云,阿里云,服务器)