搭建 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 之前的版本。
service

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 阿里云

image.png

image.png
修改完成后,重启机器!!!使得配置生效。

3.2 腾讯云

腾讯云-控制台

image.png

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

在这里插入图片描述
在这里插入图片描述

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

注意
  1. 默认会创建一个 lighthouse 普通用户,用于一键登录,如果不需要该用户,直接在 登录 选项栏里选择关闭一键登录功能即可。
    在这里插入图片描述

  2. 如果要修改账户密码,可以在 服务器 - 轻量应用服务器 - 控制台(更多–>重置密码) 进行修改!
    在这里插入图片描述
    如果要切换到 root 用户,只需要运行以下命令即可,

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

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

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

在这里插入图片描述

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

在这里插入图片描述

此时 服务端 frps 的响应为,
在这里插入图片描述

优化升级

(1)服务端 frps

修改 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 非常感谢这个作者!!!

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

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

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

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

sudo cp frps.service /etc/systemd/system/
sudo systemctl restart frps.service
systemctl status frps.service
sudo systemctl enable frps.service  # 开机自启动
ps -ef | grep frps


(2)Linux 客户端 frpc

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 服务(如果只是修改了 frpc/s.ini 配置文件,只需要 restart service 即可;如果修改的是 .service 文件 e.g., frpc/s 可执行文件和其配置文件的路径,需要删除之后重新安装!

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

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

sudo cp frpc.service /etc/systemd/system/
sudo systemctl restart frpc.service
systemctl status frpc.service
sudo systemctl enable frpc.service  # 开机自启动
ps -ef | grep frpc

(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)

方法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 支持的服务程序类型。

在这里插入图片描述

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

sc delete frpc
方法2:创建用户定义的服务 - Windows Client | Microsoft Docs
  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 不能用引号!

      最终效果,
      在这里插入图片描述

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

在这里插入图片描述

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

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

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

卸载服务,

sc delete frpc

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

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

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

直接阅读官方说明文档!

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

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

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

1

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

2

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

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

连接测试

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

在这里插入图片描述

使用 Windows 远程桌面连接,这样即使不在同一个局域网内,或者 IP 改变,也能够远程连接!
Windows_conn

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

#.1 客户端修改

~/.ssh/config 添加,

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

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

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

参考链接

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

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值