frp + ssh实现反向代理

要求配置

  • 一台有公网ip的跳板机 A, ip为 a.a.a.a
  • 一台需要穿透的内网机器 B, 用户名为bb

参考:安装 | frp (gofrp.org)

下载

您可以从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中,还包含了一份完整的配置参数说明。

部署

解压下载的压缩包。

将 frpc 复制到内网服务所在的机器B上。

将 frps 复制到拥有公网 IP 地址的机器A上,并将它们放在任意目录。

配置

  1. 在具有公网 IP 的机器A上部署 frps

部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:

1
bindPort = 7000  
  1. 在需要被访问的内网机器B上部署 frpc

部署 frpc 并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 a.a.a.a。以下是示例配置:

1
2
3
4
5
6
7
8
9
serverAddr = "a.a.a.a"  
serverPort = 7000  
  
[[proxies]]  
name = "ssh"  
type = "tcp"  
localIP = "127.0.0.1"  
localPort = 22  
remotePort = 6000  
  • localIPlocalPort 配置为需要从公网访问的内网服务的地址和端口。
  • remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。

启动

直接启动

  1. 在A中使用以下命令启动服务器:./frps -c ./frps.toml
  2. 在B中使用以下命令启动客户端:./frpc -c ./frpc.toml

系统启动

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。frpc的服务同理。

以下是具体的操作步骤:

  1. 安装 systemd

如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

1
2
3
4
5
# 使用 yum 安装 systemd(CentOS/RHEL)  
yum install systemd  
  
# 使用 apt 安装 systemd(Debian/Ubuntu)  
apt install systemd  
  1. 创建 frps.service 文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

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

写入内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[Unit]  
# 服务名称,可自定义  
Description = frp server  
After = network.target syslog.target  
Wants = network.target  
  
[Service]  
Type = simple  
# 启动frps的命令,需修改为您的frps的安装路径  
ExecStart = /path/to/frps -c /path/to/frps.toml  
  
[Install]  
WantedBy = multi-user.target  
  1. 使用 systemd 命令管理 frps 服务
1
2
3
4
5
6
7
8
# 启动frp  
sudo systemctl start frps  
# 停止frp  
sudo systemctl stop frps  
# 重启frp  
sudo systemctl restart frps  
# 查看frp状态  
sudo systemctl status frps  
  1. 设置 frps 开机自启动
1
sudo systemctl enable frps  

使用

ssh访问

1
ssh -o Port=6000 bb@a.a.a.a  

frp 将请求发送到 a.a.a.a:6000 的流量转发到内网机器的 22 端口。

vscode访问

1
2
3
4
Host 随便取个名字  
    Hostname a.a.a.a  
    Port 6000  
    User bb  

踩坑

SSH远程连接时报错kex_exchange_identification: Connection closed by remote host_maxstartups-CSDN博客

ssh连接报错:REMOTE HOST IDENTIFICATION HAS CHANGED问题解决_warning: remote host identification has changed!-CSDN博客

SSH 登录警告:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! - 星痕1216 - 博客园

comments powered by Disqus
发表了21篇文章 · 总计4万5千字
使用 Hugo 构建
主题 StackJimmy 设计