使用FRP实现内网Ubuntu SSH远程开发
谭庆新
·发布于 1 个月前·4 人看过
本文档将指导您如何利用一台具有公网IP的云服务器(如阿里云ECS)作为FRP服务端,穿透局域网内的Ubuntu服务器,实现外网SSH访问。
一、 准备工作
- 一台阿里云ECS服务器:
- 操作系统:Ubuntu (或兼容的Linux发行版)
- 公网IP地址:195.22.1.11 (请替换为您的实际IP)
- 配置:2核2G2M及以上配置足以满足需求。
- 一台本地Ubuntu服务器:
- 操作系统:Ubuntu
- 内网IP地址:192.168.1.11 (请替换为您的实际内网IP)
- 已安装并运行SSH服务(默认已安装)。
- FRP下载:
- 在阿里云服务器和本地Ubuntu服务器上都下载对应系统架构的FRP压缩包。
- 访问FRP GitHub Releases页面:https://github.com/fatedier/frp/releases
- 找到最新版本的
frp_X.X.X_linux_amd64.tar.gz
(X.X.X是版本号,请替换为最新版本)。 - 下载并解压:
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz # 请替换为最新版本号
tar -zxvf frp_0.63.0_linux_amd64.tar.gz
cd frp_0.63.0_linux_amd64
二、 阿里云服务器 (frps) 配置
阿里云服务器IP: 195.22.1.11
- 配置frps.toml
- 进入FRP解压后的目录(例如 /root/frp_0.63.0_linux_amd64),编辑 frps.toml 文件:
nano frps.toml
文件内容如下:
frps.tomlbindPort = 7000 # frp服务端与客户端通信的端口
auth.token = "your_secret_token_here" # 认证token,务必设置复杂且与客户端一致
重要提示:
- bindPort (例如 7000) 和 auth.token 是核心配置,必须与客户端保持一致。
- auth.token 请设置为强密码。
- 配置Systemd服务 (开机自启)
创建 frps.service 文件:
sudo nano /etc/systemd/system/frps.service
粘贴以下内容:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
# User=nobody # 注释或者 nobody 或者实际用户
Restart=on-failure
RestartSec=5s
ExecStart=/root/frp_0.63.0_linux_amd64/frps -c /root/frp_0.63.0_linux_amd64/frps.toml # 替换为实际路径
[Install]
WantedBy=multi-user.target
注意:ExecStart
中的路径 /root/frp_0.63.0_linux_amd64/
替换为您实际的frp解压路径(例如,如果您是在 /home/ubuntu/frp_0.63.0_linux_amd64
,则相应修改)。
- 启动和管理frps服务
# 重新加载Systemd配置:
sudo systemctl daemon-reload
#启动frps服务:
sudo systemctl start frps.service
#设置开机自启:
sudo systemctl enable frps.service
#检查服务状态:
sudo systemctl status frps.service
确认 Active: active (running)
即配置ok。
- 配置阿里云安全组
登录阿里云控制台,找到您的ECS实例的安全组,添加入方向规则,开放以下端口:
- TCP 7000: FRP服务端与客户端通信端口。
- TCP 6000: (示例端口) 您计划用于SSH穿透的远程端口(自定义,但必须开放)。
三、 本地Ubuntu服务器 (frpc) 配置
本地Ubuntu服务器IP: 192.168.1.11
大部分步骤和服务端相同,注意下面是配置客户端的配置即可
- 配置frpc.toml
进入FRP解压后的目录(例如 /home/samsun/frp_0.63.0_linux_amd64),编辑 frpc.toml 文件:
nano frpc.toml
文件内容如下:
# frpc.toml
serverAddr = "195.22.1.11" # 您的阿里云服务器公网IP
serverPort = 7000 # 与frps.toml中的bindPort一致
auth.token = "your_secret_token_here" # 与frps.toml中的auth.token一致
[[proxies]] # 配置一个代理
name = "ssh_local_ubuntu" # 代理名称,可自定义
type = "tcp" # 代理类型,SSH是TCP协议
localIP = "127.0.0.1" # 本地要穿透的服务IP,如果SSH在本机,就用127.0.0.1
localPort = 22 # 本地SSH服务的端口,默认是22
remotePort = 6000 # frps服务器上用于转发的端口,此端口需要在阿里云安全组中开放
重要提示:
- 确保 serverAddr、serverPort 和 auth.token 与服务端配置完全一致。
- remotePort 是您最终在外网连接时需要使用的端口。
2.配置Systemd服务 (开机自启)操作同服务端设置
#创建 frpc.service 文件:
sudo nano /etc/systemd/system/frpc.service
粘贴以下内容:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody # 可以用nobody或创建专门的用户,也可以用root,但一般不推荐
Restart=on-failure
RestartSec=5s
ExecStart=/home/samsun/frp_0.63.0_linux_amd64/frpc -c /home/samsun/frp_0.63.0_linux_amd64/frpc.toml # 替换为实际路径
[Install]
WantedBy=multi-user.target
# 启动和管理frpc服务,重新加载Systemd配置:
sudo systemctl daemon-reload
# 启动frpc服务:
sudo systemctl start frpc.service
# 设置开机自启:
sudo systemctl enable frpc.service
# 检查服务状态:
sudo systemctl status frpc.service
确认 Active: active (running),且日志中应显示连接成功的提示。
四、 从外网SSH连接本地Ubuntu
当服务端和客户端FRP都成功运行后,您就可以从任何有外网连接的设备上,通过以下命令SSH到您的本地Ubuntu服务器:
ssh -p 6000 your_ubuntu_username@195.22.1.11
- -p 6000: 指定连接端口为您在 frpc.toml 中配置的 remotePort (例如 6000)。
- your_ubuntu_username: 您本地Ubuntu服务器的SSH登录用户名。
- 195.22.1.11: 您的阿里云服务器公网IP。
五、 安全建议
- 使用SSH密钥登录: 禁用密码登录,只允许使用SSH密钥对登录,大大提高安全性。
- 更改SSH默认端口: 将本地SSH的默认22端口更改为其他非常规端口。
- 复杂Token和密码: auth.token 和 dashboard 密码务必设置为复杂且足够长的字符串。
- 精确安全组规则: 在阿里云安全组中只开放必要的端口,并尽量将源IP限制为您固定的办公IP地址,而不是 0.0.0.0/0 (所有IP)。
- Fail2Ban: 在您的本地Ubuntu服务器上安装并配置Fail2Ban,防止暴力破解。
- 定期更新系统和软件: 确保您的Ubuntu系统和所有软件都是最新版本,修复已知漏洞。