远程访问方案(一):FRP端口转发与内网穿透
AI摘要
本文介绍了如何使用FRP(Fast Reverse Proxy)搭建内网穿透方案,实现从家中安全访问公司内网服务,告别VPN的繁琐配置。文章详细列出了搭建方案所需的准备清单,包括云服务器、公司内网服务器/电脑、家用电脑和需要访问的公司服务。接着,文章分步骤介绍了如何在云服务器上部署frp服务端,包括SSH登录、安装frp、配置frps、创建systemd服务、启动服务、配置防火墙和验证服务端。然后,文章指导如何在公司内网部署frp客户端,包括下载frp客户端、配置frp客户端、启动客户端和验证连接。通过这些步骤,用户可以突破内网限制,随时随地访问公司资源,无需复杂VPN配置,支持多种协议,实现安全稳定的远程办公。
目录
🎯 目标
本章将使用FRP(Fast Reverse Proxy)搭建内网穿透方案,实现从家中安全访问公司内网服务,告别VPN的繁琐配置,让远程办公像在公司一样便捷。
核心价值:
- ✅ 突破内网限制,随时随地访问公司资源
- ✅ 无需复杂VPN,一次配置长期使用
- ✅ 支持多种协议,覆盖常见开发场景
✅ 安全稳定,企业级解决方案
📋 准备清单
- [ ] 云服务器(1核2G,公网IP)
- [ ] 公司内网一台服务器/电脑(能访问外网)
- [ ] 家用电脑(Windows/Mac)
- [ ] 需要访问的公司服务(MySQL/Redis/Nacos等)
步骤一:云服务器部署 frp 服务端
1.1 SSH 登录云服务器
ssh root@你的云服务器IP1.2 安装 frp
# 创建目录
mkdir -p /opt/frp && cd /opt/frp
# 下载(检查最新版本:https://github.com/fatedier/frp/releases)
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.65.0_linux_amd64.tar.gz
cd frp_0.65.0_linux_amd64
# 复制服务端文件
cp frps /usr/local/bin/
chmod +x /usr/local/bin/frps
# 创建配置目录
mkdir -p /etc/frp /var/log/frp1.3 配置 frps
vim /etc/frp/frps.toml粘贴以下内容(⚠️ 修改 token):
# frp 服务端配置
bindPort = 7000
auth.token = "your_complex_token_here_12345678" # ⚠️ 改成强密码
# Web 管理界面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin_password_123" # ⚠️ 改成强密码
# 日志
log.to = "/var/log/frp/frps.log"
log.level = "info"
log.maxDays = 7
# 性能优化
transport.maxPoolCount = 5
transport.tcpMux = true1.4 创建 systemd 服务
cat > /etc/systemd/system/frps.service <<'EOF'
[Unit]
Description=frp server
After=network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=on-failure
RestartSec=5s
User=root
[Install]
WantedBy=multi-user.target
EOF1.5 启动服务
# 重载 systemd
systemctl daemon-reload
# 启动 frps
systemctl start frps
systemctl enable frps
# 检查状态
systemctl status frps
# 查看日志
tail -f /var/log/frp/frps.log
```
预期输出:
```
● frps.service - frp server
Active: active (running)
...1.6 配置防火墙
# 如果使用 firewalld
firewall-cmd --permanent --add-port=7000/tcp # frp 通信端口
firewall-cmd --permanent --add-port=7500/tcp # Web 管理端口
firewall-cmd --permanent --add-port=7001-7010/tcp # 服务映射端口
firewall-cmd --reload
# 如果使用 ufw
ufw allow 7000/tcp
ufw allow 7500/tcp
ufw allow 7001:7010/tcp
# 如果使用 iptables
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 7500 -j ACCEPT
iptables -A INPUT -p tcp --dport 7001:7010 -j ACCEPT
service iptables save⚠️ 重要:还需要在云服务器控制台的安全组中开放这些端口!
阿里云:控制台 → ECS → 安全组 → 配置规则 → 添加 腾讯云:控制台 → 云服务器 → 安全组 → 入站规则 → 添加
1.7 验证服务端
# 检查端口监听
netstat -tlnp | grep frps
# 或
ss -tlnp | grep frps
# 预期输出:
# tcp 0.0.0.0:7000 LISTEN xxx/frps
# tcp 0.0.0.0:7500 LISTEN xxx/frps
# 访问 Web 管理界面
curl http://127.0.0.1:7500浏览器访问:http://你的云服务器IP:7500
- 用户名:admin
- 密码:admin_password_123
步骤二:公司内网部署 frp 客户端
2.1 下载 frp 客户端
在公司内网服务器/电脑上操作:
Linux:
cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
tar -zxvf frp_0.65.0_linux_amd64.tar.gz
cd frp_0.65.0_linux_amd64
cp frpc /usr/local/bin/
chmod +x /usr/local/bin/frpc
mkdir -p /etc/frpWindows:
- 下载:
https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_windows_amd64.zip - 解压到
C:\frp\
2.2 配置 frp 客户端
Linux:
vim /etc/frp/frpc.tomlWindows: 创建 C:\frp\frpc.toml
粘贴以下内容(修改你的实际信息):
# frp 客户端配置
serverAddr = "你的云服务器IP" # ⚠️ 改成你的云服务器公网IP
serverPort = 7000
auth.token = "your_secure_token_12345" # ⚠️ 与服务端一致
# 日志
log.to = "/var/log/frp/frpc.log" # Windows: C:\frp\frpc.log
log.level = "info"
# ===== 服务映射配置 =====
# MySQL 映射
[[proxies]]
name = "mysql"
type = "tcp"
localIP = "192.168.1.100" # ⚠️ 改成你公司 MySQL 的内网IP
localPort = 3306
remotePort = 7001 # 云服务器上的端口
# Redis 映射
[[proxies]]
name = "redis"
type = "tcp"
localIP = "192.168.1.101" # ⚠️ 改成你公司 Redis 的内网IP
localPort = 6379
remotePort = 7002
# Nacos 映射
[[proxies]]
name = "nacos"
type = "tcp"
localIP = "192.168.1.102" # ⚠️ 改成你公司 Nacos 的内网IP
localPort = 8848
remotePort = 7003
# Jenkins 映射(可选)
[[proxies]]
name = "jenkins"
type = "tcp"
localIP = "192.168.1.103"
localPort = 8080
remotePort = 7004
# 如果本机就是服务器,localIP 可以填 127.0.0.12.3 启动客户端
Linux (systemd):
# 创建服务
cat > /etc/systemd/system/frpc.service <<'EOF'
[Unit]
Description=frp client
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=on-failure
RestartSec=5s
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start frpc
systemctl enable frpc
systemctl status frpcWindows:
# 以管理员身份运行 PowerShell
cd C:\frp
.\frpc.exe -c frpc.toml
# 或者注册为 Windows 服务(使用 NSSM 工具)2.4 验证连接
在云服务器上检查:
# 查看端口是否监听
netstat -tlnp | grep -E '7001|7002|7003'
# 预期输出:
# tcp 0.0.0.0:7001 0.0.0.0:* LISTEN xxx/frps
# tcp 0.0.0.0:7002 0.0.0.0:* LISTEN xxx/frps
# tcp 0.0.0.0:7003 0.0.0.0:* LISTEN xxx/frps
# 测试连接 MySQL(如果映射了)
telnet 127.0.0.1 7001
# 或
mysql -h 127.0.0.1 -P 7001 -u root -p查看 frp Web 管理界面: 访问 http://你的云服务器IP:7500,应该能看到客户端已连接,以及映射的服务列表。