【教程】服务器做跳板机访问内网
一、前言
公司或学校内网资源(如开发服务器、测试环境、数据库等)只能在公司或学校网络内访问,身处外网(家里、出差、海外)时无法直接连接。这种情况下,如果需要进行远程开发、调试或运维,就会变得非常不方便。
为了打破这种网络隔离,我们可以借助一台位于公网的云服务器作为跳板机,将外网请求安全转发到公司内网。这样,无论身处何地,都能像在公司一样访问内网环境。
然而,直接手动配置端口转发和安全规则不仅复杂,还可能带来安全风险。为了降低运维成本、提升稳定性,我们可以使用成熟的内网穿透工具来快速实现这一目标。这里,我选择了 FRP(Fast Reverse Proxy)——部署简单、性能优秀、安全可控,非常适合长期稳定运行。
二、具体配置
整体的配置分成两部分,一部分在客户端(内网),一部分在服务端(公网服务器)。
2.1 Linux服务端
2.1.1 下载
我是用的frp是v0.64.0,下载链接:https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz
wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz
如果由于网络问题无法正常下载,可通过ftp传输文件,这里不再赘述(客户端相同)。
我下载到了 ~/download。
2.1.2 配置
解压刚刚下载的frp文件,得到frp_0.64.0_linux_amd64,为方便操作,我将其名称修改为frp:
cd ~/download
tar -xzvf frp_0.64.0_linux_amd64.tar.gz
cd ..
mkdir application
cd application
mv ~/download/frp_0.64.0_linux_amd64 frp
cd frp
查看或设置frp端口:
vim frps.toml
bindPort = 7000 # 与客户端通信的端口,必须开放
# Web 控制台(可选,用于查看连接状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
2.1.3 开放防火墙
在云服务器的控制台,找到安全组,添加入方向规则:
- 9876:
- 用于建立外网 --> frps --> frpc --> 内网;
- 可自定义,与客户端配置文件对齐;
- 7000:
- 用于frp内部通讯。
这两个端口需要放开,授权对象尽量是固定的ip地址,如果无法固定,选择所有IPv4。
2.1.4 启动
直接启动(测试用):
./frps -c frps.toml
此时关闭当前的远程连接,frps的进程就会断掉,可以先用这种启动方式进行测试。
完成测试后,主动关闭当前进程,使用下面的方式进行启动:
nohup ./frps -c frps.toml
2.2 创建跳板机用户并配置密钥
创建一个专门用于跳板的低权限用户,安全可靠。
- 创建用户
sudo useradd -r -s /bin/false remoteuser
- 拷贝或上传公钥(每个需要通过跳板机的设备,都需要把公钥追加到authorized_keys)
# 这里我假设你的公钥已经上传到云服务器root目录下 /root/.ssh/authorized_keys
mkdir -p /home/remoteuser/.ssh
cp /root/.ssh/authorized_keys /home/remoteuser/.ssh
chmod 700 /home/remoteuser/.ssh
chown remoteuser:remoteuser /home/remoteuser/.ssh
chmod 600 /home/remoteuser/.ssh/authorized_keys
chown remoteuser:remoteuser /home/remoteuser/.ssh/authorized_keys
2.3 Linux客户端
2.3.1 下载
与2.1.1一样,下载相同版本的frp放到download中。
解压到某个路径并修改名称为frp(个人习惯而已),我这里放到了~/install/frp。
2.3.2 配置
进入frp目录,编辑客户端配置文件:
vim frpc.toml
如果你使用的frp版本与我一致,那么frpc.toml的格式如下(不一致也可以参考,填写的内容是一样的):
serverAddr = "服务器公网IP"
serverPort = 7000
[[proxies]]
name = "规则名称,自定义即可,这里我使用ssh_server"
type = "协议类型,tcp/udp/http/https,这里建议使用tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 9876
这里只需要修改serverAddr,name,type,其他按照上方填写即可。
修改完成后保存并退出(wq)。
编写完成后,表明使用云服务器9876端口访问内网22端口。
如果添加多个映射,如22、80等,按照下面这样顺序写下去即可:
serverAddr = "服务器公网IP"
serverPort = 7000
[[proxies]]
name = "ssh_server"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 9876
[[proxies]]
name = "web_server"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080
[[proxies]]
name = "my_service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 其他端口
remotePort = 要映射到云服务器的哪个端口
2.3.3 启动
直接启动(测试用):
./frpc -c frpc.toml
此时关闭当前的远程连接,frpc的进程就会断掉,可以先用这种启动方式进行测试。
完成测试后,主动关闭当前进程,使用下面的方式进行启动:
nohup ./frpc -c frpc.toml
2.3.4 测试
服务端启动frps,客户端启动frpc,客户端启动时,服务端控制台提示,表明frp连接成功:
[server/control.go:399] [fe35f71594712f65] new proxy [ssh_server] type [tcp] success
接下来可以在外网通过ssh进行测试:
-
通过ssh创建连接;
-
主机:云服务器公网ip;
-
端口号:9876;
-
用户名和密码:内网的用户名和密码。
-
连接。
连接成功表明一切配置没有问题。
接下来可以分别中断服务端和客户端的frps、frpc进程,然后使用nohup启动,保持程序的运行。
2.4 Windows客户端
下载 frp_0.64.0_windows_amd64.zip,并解压。
修改frpc.toml
# frpc.toml
serverAddr = "your_server_ip" # 替换为你的公网服务器 IP
serverPort = 7000 # 与服务端 bindPort 保持一致
# 配置一个示例(例如转发 Web 服务)
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8081 # 外部8081转内部8080
通过powershell启动
.\frpc.exe -c .\frpc.toml
三、配置自启动
3.1 Linux
在/etc/systemd/system/目录下创建服务文件
cd /etc/systemd/system/
sudo vim frps.service
文件内容:
[Unit]
Description = frps_service
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
User = root
ExecStart = /home/zhaoshuai/app/frp/frps -c /home/zhaoshuai/app/frp/frps.toml
[Install]
WantedBy=multi-user.target
设置开机自启
sudo systemctl enable frps
启动frps服务
sudo systemctl start frps
常用frps控制指令
sudo systemctl start frps # 启动frp服务
sudo systemctl stop frps # 停止frp服务
sudo systemctl restart frps # 重启frp服务
sudo systemctl status frps # 查看frp服务状态
测试
/etc/syst/system > systemctl status frps
● frps.service - frps_service
Loaded: loaded (/etc/systemd/system/frps.service; enabled; preset: enabled)
Active: active (running) since Tue 2025-09-23 15:47:38 CST; 9s ago
Main PID: 7432 (frps)
Tasks: 5 (limit: 1857)
Memory: 8.7M (peak: 8.9M)
CPU: 134ms
CGroup: /system.slice/frps.service
3.2 Windows
直接参考这个:https://blog.csdn.net/gdali/article/details/108864769
四、免密登录
这里无论是windows还是linux,操作流程完全一致,仅有.ssh路径有些许不同。
以下操作均在本地需要访问内网的机器上进行。
- 生成ssh密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 配置SSH客户端config文件
Host ali
HostName 云服务器公网IP
User 云服务器上创建的用于跳板的用户,如:remoteuser
Host internal_device
HostName 127.0.0.1
User zhaoshuai # 内网机上登录的用户
Port 9876 # 云服务器代理的端口
ProxyCommand ssh -q -x -W %h:%p ali # 通过 ali 建立隧道,在隧道内连接 127.0.0.1:9876
- 测试
ssh zhaoshuai@801_via_ali
- 云服务器此时因为2.2操作,已经免密,接下来需要配置内网机免密(在内网机操作)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 编辑 authorized_keys 文件,将本地的公钥粘贴进去
vim ~/.ssh/authorized_keys
# 设置 authorized_keys 文件权限
chmod 600 ~/.ssh/authorized_keys
# 退出会话并重新测试
exit
- 完成。

浙公网安备 33010602011771号