frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

无论是客户端还是服务端,我们都只是需要这个三个文件即可,准确来说,我们只需要frp.exe和frp.ini两个文件,另一个frp_full.ini文件是配置备份,可有可无。

需求

家里有台电脑,我想在外面玩的时候,想时不时使用手机远程一下我的电脑,或者在网吧远程我的电脑。

家里的宽带没有公网IP,所以就只能借助内网穿透了,恰好我有台服务器,可以使用利用FRP内网穿透。

服务端

软件地址

https://link.zhihu.com/?target=https%3A//github.com/fatedier/frp/releases

下载软件

wget https://github.com/fatedier/frp/releases/download/v0.46.0/frp_0.46.0_linux_amd64.tar.gz

frps:在公网服务器上,一般是linux,下载好frp的版本后,解压到/usr/local目录下,然后设置开机自启。

开机自启

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

[Unit]
 Description=Frp Server Service
 After=network.target
 [Service]
 Type=simple
 User=nobody
 Restart=on-failure
 RestartSec=5s
 #你的frps安装目录
 ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
 [Install]
 WantedBy=multi-user.target

frps.ini

值得注意的就是数据端口必须指定,然后针对特定的服务再指定一个连接的端口。这个特定端口不出现在frps.ini中,但需要在服务器防火墙安全规则放行,然后在frpc.ini中指定。

[common]
 #服务器IP,0.0.0.0为服务器全局所有IP可用
 bind_addr = 0.0.0.0
 #通讯端口,用于和客户端内网穿透传输数据的端口,可自定义
 bind_port = 8413 
 #通讯密钥,可自定义
 token = fhfgsg424
 # 设置日志显示级别{debug info warn error}
 log_level = info
 # 设置日志最大天数
 log_max_days = 999
 # for http
vhost_http_port = 6143
 # 自启动的文件在/lib/systemd/system/frps.service
 # 服务器一共需要开两个端口,两个端口都可以自定义 8413 6143
 # 8413 用于数据之间的传输
 # 6143 用于远程桌面的时候用,比如远程地址为: 93.613.174.122:6143
 # 服务器需要再开一个端口6143 与本地的frp中的remote_port端口6143一致
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

启动服务

systemctl daemon-reload
systemctl start frps.service
systemctl status frps

客户端

下载地址

https://link.zhihu.com/?target=https%3A//github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_windows_amd64.zip

frpc.ini

[common]
server_addr = 公网ip
server_port = 8413
token = fhfgsg424

#服务别名,必须唯一,不能重复fc
[MSRDP]
#使用的协议
type = tcp
#本地要开放服务的IP
local_ip = 127.0.0.1
#本地要开放服务的端口
local_port = 3389
#服务端的端口,这里用的免费的服务端端口开放:5000-6000,选择其中一个,必须唯一,改端口用于远程时使用,比如在远程桌面时,输入 93.613.174.122:6143
remote_port = 7777

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8000

[17kaoyanba]
type = http
local_ip = 127.0.0.1
local_port = 3004
remote_port = 6143
custom_domains = 17kaoyanba.com
vhost_http_port = 6143

启动frpc

.\frpc.exe -c .\frpc.ini

后台运行客户端frpc

win+R,快速指令打开shell:startup。创建frpc.vbs文件,写入:

set ws=wscript.createobject("wscript.shell")
 ws.run "cmd /c C:\app\frp_0.44.0_windows_amd64\frpc.exe -c C:\app\frp_0.44.0_windows_amd64\frpc.ini",0

地址替换成实际的路径即可。
双击frpc.vbs文件脚本,自动开始运行,打开任务管理器级可以看到frpc客户端的运行情况了。【如果需要修改配置文件,那么要删除这个文件,开机重启后再进行配置的修改,不然开机自启的服务不会被覆盖。】

针对windows10的ssh server

下载openssh-server在windows的可选功能中。下载好后,搜索“服务”,找到openssh server启动,并设置为自动,检查C:\ProgramData\ssh\sshd_config是否存在。不存在的话,需要将openssh-server服务重新启动。

跳板机配置

Host JumpAikedaer
    # 跳板机的ip地址
    HostName xxx
    # 你跳板机的用户名
    User aikedaer
    # 跳板机登录端口
    Port 8000
    IdentityFile /Users/aikedaer/Documents/id_rsa_tlgr

Host TargetZhangTianYi-tlgr-gpu1
    # 目标机的ip地址
    HostName xxxxxx
    # 你目标机的用户名
    User tlgr
    # 目标机登录端口  
    Port 60016
    IdentityFile /Users/aikedaer/Documents/id_rsa_tlgr
    ProxyCommand ssh -W %h:%p JumpAikedaer

# This is very important
# chmod 700 ~/.ssh
# chmod 600 /Users/aikedaer/Documents/id_rsa_tlgr

转载自https://zhuanlan.zhihu.com/p/608341476

打赏作者

1 个评论

  1. frps.ini:
    “`
    [common]
    #服务器IP,0.0.0.0为服务器全局所有IP可用
    bind_addr = 0.0.0.0
    #通讯端口,用于和客户端内网穿透传输数据的端口,可自定义
    bind_port = 8413
    #通讯密钥,可自定义
    token = fhfgsg424
    # 设置日志显示级别{debug info warn error}
    log_level = info
    # 设置日志最大天数
    log_max_days = 999
    subdomain_host = leaf-fire.top
    vhost_http_port = 6143
    # 自启动的文件在/lib/systemd/system/frps.service
    # 服务器一共需要开两个端口,两个端口都可以自定义 8413 6143
    # 8413 用于数据之间的传输
    # 6143 用于远程桌面的时候用,比如远程地址为: 93.613.174.122:6143
    # 服务器需要再开一个端口6143 与本地的frp中的remote_port端口6143一致
    dashboard_port = 7500
    dashboard_user = admin
    dashboard_pwd = admin
    “`

    frpc.ini
    “`
    [common]
    server_addr = 117.50.190.12
    server_port = 8413
    token = fhfgsg424

    #服务别名,必须唯一,不能重复
    [MSRDP]
    #使用的协议
    type = tcp
    #本地要开放服务的IP
    local_ip = 127.0.0.1
    #本地要开放服务的端口, 3389对应远程桌面
    local_port = 3389
    #服务端的端口,这里用的免费的服务端端口开放:5000-6000,选择其中一个,必须唯一,改端口用于远程时使用,比如在远程桌面时,输入 93.613.174.122:6143
    remote_port = 7777

    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 8000

    ; [stableDiffusion]
    ; type = http
    ; local_ip = 127.0.0.1
    ; local_port = 7799
    ; remote_port = 6143
    ; custom_domains = leaf-fire.top
    ; vhost_http_port = 6143

    [jupyterLab]
    type = http
    local_ip = 127.0.0.1
    local_port = 8888
    remote_port = 6143
    custom_domains = leaf-fire.top
    vhost_http_port = 6143

    “`

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHA