利用frp和公网ip实现内网穿透

简述

由于手中使用的笔记本电脑没有固定的公网IP,而想要远程访问这台电脑必须通过公网IP在Internet进行访问,因此本文通过FRP(Fast Reverse Proxy)利用一台额外的具有公网IP的服务器,通过该服务器间接访问笔记本电脑,将笔记本电脑暴露在公网中。FRP的工作原理是通过在笔记本电脑和公网服务器之间建立一个反向代理连接,将本地笔记本电脑的私有IP地址和端口映射到公网IP上。笔记本电脑运行FRP客户端(FRPC),而公网服务器则运行FRP服务端(FRPS)。客户端通过与服务端的连接,将笔记本电脑的端口映射到公网IP上,从而允许远程用户通过公网IP访问笔记本电脑。FRP能够有效地绕过NAT和防火墙限制,实现对内网设备的远程访问,尤其适用于没有固定公网IP的环境。

1. 前提准备

  • 一台具有公网ipv4的服务器,配置没有要求,最低配即可
  • 这里使用的系统为alpine,同时也提供ubuntu系统的配置代码
  • 手机端通过RD client远程,电脑通过win+r输入`mstsc`使用微软自带的远程工具

下面分别进行服务器端(FRPS)和本地待控制端(FRPC)的配置

2. 服务端(含有公网IP服务器)

本地下载frp客户端

这里推荐使用frp_0.60.0版本(版本高可能会不支持国内机器,出现报错)
根据系统下载对应的版本,链接:Releases · fatedier/frp (github.com)
这里下载的是`frp_0.60.0_linux_amd64`

上传到服务器

将下载好的客户端上传到服务器,可以直接使用scp上传,也可以通过finalshell登录上传

#打开/usr/local路径文件夹 
cd /usr/local

把刚刚下载的FRP压缩包上传安装包到/usr/local/frp目录

#解压frp_0.60.0_linux_amd64.tar.gz文件
tar -zxvf 'frp_0.60.0_linux_amd64.tar.gz' 
cd 'frp_0.60.0_linux_amd64.tar.gz' 

配置

进入解压后的文件夹之后进行配置

#编辑frps配置文件 
vi frps.toml

粘贴下述内容

# 客户端与服务连接端口 
bindPort = 7000 
# 客户端连接服务端时认证的密码 
auth.token = "abcd1234..."   # 可自行设置,建议复杂一点,防止被爆破
# http协议监听端口 
vhostHTTPPort = 28080 
# web界面配置 
webServer.addr = "0.0.0.0" 
webServer.port = 7500 
webServer.user = "admin"  # 可自行设置
webServer.password = "admin"  # 可自行设置

运行

首先创建frps.service 文件,在/etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务(适用于ubuntu、centos等系统)

#编辑/etc/systemd/system/frps.service文件 
sudo vi /etc/systemd/system/frps.service
[Unit] 
Description=frp server 
After=network.target syslog.target 
Wants=network.target 
[Service] 
Type=simple 
ExecStart=/usr/local/frp/frp_0.60.0_linux_amd64/frps -c /usr/local/frp/frp_0.60.0_linux_amd64/frps.toml   # 实际路径
[Install] 
WantedBy=multi-user.target
#检查frp配置文件是否正确 
sudo systemctl status frps.service
# 启动frp 
sudo systemctl start frps 
# 停止frp 
sudo systemctl stop frps 
# 重启frp 
sudo systemctl restart frps
#设置开机自启
sudo systemctl enable frps

如果为alpine系统,使用的是openrc,需要在/etc/init.d/frps位置修改脚本:

#!/sbin/openrc-run

# 服务名称
name="frps"
description="FRP server"

# FRP 的执行路径
command="/usr/local/frp/frp_0.60.0_linux_amd64/frps"
command_args="-c /usr/local/frp/frp_0.60.0_linux_amd64/frps.toml"  # 实际路径

# 进程 PID 文件
pidfile="/run/${name}.pid"

# 服务依赖:网络需要在防火墙之前启动
depend() {
    need net
    before firewall
}

# 启动前创建 PID 文件目录
start_pre() {
    checkpath --directory --mode 0755 /run
}

# 你可以根据需要在此添加更多的 OpenRC 配置
开机自启动命令:sudo rc-update add frps default
启动frps命令:sudo rc-service frps start
重启:sudo rc-service frps restart
查看状态:sudo rc-service frps status

# 如果使用Ctrl C取消后,需要额外删除进程,否则会出现重复占用,命令如下
查询占用端口的进程:sudo ss -ltnp | grep :7500
杀死进程:sudo kill -9 进程号

客户端(需要远程控制的Windows端)

根据windows版本下载客户端,我下载的是frp_0.60.0_windows_amd64.zip,下载链接为:https://github.com/fatedier/frp/releases,客户端的frp版本需要和上述下载的服务器端保持一致

下载解压好后,目录如下:

使用记事本编辑frpc.toml文件

serverAddr = "服务器的公网IP" 
serverPort = 7000 
auth.token = "abcd1234..." # 与之前配置保持一致
#TCP的配置 
[[proxies]] 
name = "rdp" 
type = "tcp" 
localIP = "127.0.0.1" 
localPort = 3389 
remotePort = 23389

在导航栏输入`cmd`打开命令行,再输入命令 `frpc.exe -c frpc.toml`运行客户端

运行结果如下:

如果运行结果一致,那么恭喜你配置正确,下面进行远程验证

远程登录

Windows端(另外一台电脑进行登录)

`win + r`输入命令`mstsc`打开”远程桌面连接”

点击“显示选项”

填写信息即可实现远程登录

如果出现报错,首先检查服务器端相应端口是否开放(建议在安全组开放所有端口)
然后在客户端cmd使用`netstat -an`命令查看3389端口是否开启,如果没有开启,通过”服务”页面将所有与”“Remote Desktop”有关的开启之后,重启电脑之后,端口会重新开放

手机端

仅提供参考云盘下载连接:microsoft remote desktop.apk_免费高速下载|百度网盘-分享无限制 (baidu.com)
下载RD client之后,点击导航栏“添加资源”-“Add PC”

填写信息之后即可远程登录

PS:之后可以额外在windows配置开机自动启动frpc客户端,教程如下:
Windows设置开机启动frpc(超详细图文教程)_彬彬笔记 (binbinbiji.com)

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇