用frp做内网穿透

用 frp 做内网穿透

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
  通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议;
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间;
  • 代理组间的负载均衡;
  • 端口复用,多个服务通过同一个服务端端口暴露;
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作;
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展;
  • 服务端和客户端 UI 页面。

为了能够流畅的连接到内网的一个 linux 主机做远程开发,需要用 frp 做内网穿透。这里记录一下安装和部署的过程以及一些注意事项。

环境介绍

目前,我日常使用的有三台机器:

  • 笔记本电脑
      这台笔记本运行的是 windows 11 操作系统,主要做日常使用,接入学校的校园网(属于 10.254.21.xxx 网段)。
  • 云服务器
      这个在腾讯云购买的云服务器运行的是 ubuntu 操作系统,主要用于部署自己的网站和运行一些自己需要的服务,具有公网 IP 地址。
  • 实验室台式机
      这台安置于课题组实验室的主机运行的是 ubuntu 操作系统,主要用于实验室同学们跑深度学习的实验,接入实验室的局域网(属于 192.168.3.xxx 网段)。

现在,我需要将实验室的台式机暴露在公网中,以便于自己的笔记本能在任何网络环境下都能够连接到它实现远程开发。为了实现这一需求,我需要在具有公网 IP 地址的云服务器上部署 frp 服务做中转。整个逻辑结构如下所示:

image.png

frp 安装与使用

frp 的安装与使用是参照了frp 的官方文档进行的。frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖,直接在frp 的 release页面中下载并解压对应系统的压缩包:

image.png

压缩包中同时包含了 frp 的服务端和客户端可执行程序,frps表示服务端可执行程序,frps.ini表示服务端配置文件;frpc表示客户端可执行程序,frpc.ini表示客户端配置文件。

frp 服务端

frp 服务端安装在我的腾讯云服务器上。

安装与使用

第一步,解压压缩包:在 linux 使用以下命令解压压缩包

tar -zxvf frp_0.48.0_linux_XXX.tar

第二步,编辑配置文件:修改frps.ini配置文件【请删除配置文件的注释】(更多配置项请查看官方文档或者frps_full.ini

[common]bind_port = 7000            #frp服务端监听的端口,默认7000token = abcdefg             #用于服务端和客户端之间的授权验证 dashboard_port = 7500       #frp管理后台的端口dashboard_user = admin      #frp管理后台的账号和密码dashboard_pwd = admin log_file = ./frps.log       #frp的日志路径log_level = info            #frp的日志等级log_max_days = 3            #frp日志的最长保留时间

第三步,启动 frp 服务:使用 frps 并指定配置文件启动服务

# 在frps目录下执行./frps -c frps.ini

第四步,开放 frp 服务的端口:在服务器上放开7000,7500的端口(协议类型选择 TCP,如果自定义了端口,开放自己的设置端口即可)。如果服务器上安装了宝塔面板,记得也在宝塔面板中开放相应的端口。
  到此,如果没有报错,那么 frp 的服务端就已经正常启动了,可以通过服务器IP:7500尝试访问管理后台。

后台运行和开机自启

请在客户端和服务端都运行起来以后再进行此步骤。
   1.如果 Linux 服务器上没有安装systemd,请使用对应的包管理器安装。
   2.使用编辑器创建frps.service文件

sudo vim /etc/systemd/system/frps.service

3.编辑frps.service文件

[Unit]# 服务名称,可自定义Description = frp serverAfter = network.target syslog.targetWants = network.target [Service]Type = simple# 启动frps的命令,需修改为您的frps的安装路径ExecStart = /path/to/frps -c /path/to/frps.ini [Install]WantedBy = multi-user.target

4.配置开机自启动

systemctl enable frps

5.使用systemd命令管理 frps

# 启动frpsystemctl start frps# 停止frpsystemctl stop frps# 重启frpsystemctl restart frps# 查看frp状态systemctl status frps

frp 客户端

frp 客户端安装在课题组实验室的主机上,在 linux 上 frp 客户端的安装与使用方式与 frp 服务端类似。

安装与使用

第一步,解压压缩包:在 linux 使用以下命令解压压缩包

tar -zxvf frp_0.48.0_linux_XXX.tar

第二步,编辑配置文件:修改frpc.ini配置文件【请删除配置文件的注释】(更多配置项请查看官方文档或者frpc_full.ini

[common]server_addr = 公网主机的ip地址server_port = 7000                  #公网主机frp服务端的监听端口token = abcdefg                     #与公网frp服务端的token相同 [ssh]                               #请注意ssh为唯一的代理名称,如果是多个用户请配置用户名,并使用用户名.ssh进行区分type = tcplocal_ip = 127.0.0.1local_port = 22                     #客户端主机的22端口用于ssh服务remote_port = 7600                  #要使用远程访问客户机时使用的端口7600,即将服务器的7600端口映射到客户端主机的22端口上

第三步,启动 frp 客户端程序:使用 frpc 并指定配置文件启动客户端

# 在frps目录下执行./frpc -c frpc.ini

第四步,开放 frp 服务端上的远程端口(客户端配置文件中的remote_port):在服务器上放开7600(协议类型选择 TCP,如果有多个客户端建议直接开发一个端口区间备用)。如果服务器上安装了宝塔面板,记得也在宝塔面板中开放相应的端口。
  到此,如果没有报错,那么 frp 的客户端就已经正常启动了。

后台运行和开机自启

请在客户端和服务端都运行起来以后再进行此步骤。
   1.如果 Linux 服务器上没有安装systemd,请使用对应的包管理器安装。
   2.使用编辑器创建frpc.service文件

sudo vim /etc/systemd/system/frpc.service

3.编辑frpc.service文件

[Unit]# 服务名称,可自定义Description = frp clientAfter = network.target syslog.targetWants = network.target [Service]Type = simple# 启动frps的命令,需修改为您的frps的安装路径ExecStart = /path/to/frpc -c /path/to/frpc.ini [Install]WantedBy = multi-user.target

4.配置开机自启动

systemctl enable frpc

5.使用systemd命令管理 frpc

# 启动frpsystemctl start frpc# 停止frpsystemctl stop frpc# 重启frpsystemctl restart frpc# 查看frp状态systemctl status frpc

访问内网的主机

在其他机器上进行访问测试,比如,对我而言就是使用我的笔记本访问课题组实验室的主机:

ssh 用户名@服务器公网IP  -p 端口号

其中用户名是客户机上的用户名,IP 地址是云服务器的IP地址,端口号是客户端配置文件中remote_port项的值

windows 客户端

远程桌面配置项

windows 上远程桌面穿透客户端的配置文件【请删除配置文件的注释】

[common]server_addr = 公网主机的ip地址server_port = 7000                  #公网主机frp服务端的监听端口token = abcdefg                     #与公网frp服务端的token相同[rdp]type = tcplocal_ip = 127.0.0.1local_port = 3389                   #客户端主机的3389端口用于windows的远程桌面remote_port = 7700                  #要使用远程访问客户机时使用的端口7700,即将服务器的7600端口映射到客户端主机的3389端口上

启动内网 windows 主机上的 frp 客户端后,直接使用远程桌面工具连接公网IP:remote_port就可以连接内网的 windows 主机了。

静态文件配置项

frp 通过配置 static_file 插件可以将内网主机上的文件目录暴露在公网上以供他人访问,该配置项可以提供一个简单的基于 HTTP 的文件访问服务,其配置项【请删除配置文件的注释】的示例如下所示:

# 将以下配置项添加到配置文件中[static_file]type = tcplocal_ip = 127.0.0.1remote_port = 7800                  #访问内网主机时使用的端口7800plugin = static_file                #插件名称plugin_local_path = /tmp/file       #文件目录路径plugin_strip_prefix = static        #访问链接中的url路径plugin_http_user = admin            #访问用户及密码plugin_http_passwd = admin

启动后,可以通过浏览器访问http:/x.x.x.x:7800/static/来查看目录/tmp/file中的文件,访问时会要求输入访问的用户名及密码。

将客户端程序设置为开机自启

首先,我们需要在frpc客户端程序的目录中创建一个脚本frpcStart.bat,用于调用 frpc 程序:

@echo off:homefrpc -c frpc.inigoto home

然后,我们再将这个脚本设置为系统开机时启动:

image.png

重启电脑,使自启动任务生效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容