【教程】服务器做跳板机访问内网

一、前言

公司或学校内网资源(如开发服务器、测试环境、数据库等)只能在公司或学校网络内访问,身处外网(家里、出差、海外)时无法直接连接。这种情况下,如果需要进行远程开发、调试或运维,就会变得非常不方便。

为了打破这种网络隔离,我们可以借助一台位于公网的云服务器作为跳板机,将外网请求安全转发到公司内网。这样,无论身处何地,都能像在公司一样访问内网环境。

然而,直接手动配置端口转发和安全规则不仅复杂,还可能带来安全风险。为了降低运维成本、提升稳定性,我们可以使用成熟的内网穿透工具来快速实现这一目标。这里,我选择了 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
  • 完成。
posted @ 2025-08-12 16:59  小拳头呀  阅读(214)  评论(0)    收藏  举报