使用FRP实现内网Ubuntu SSH远程开发

谭庆新
·发布于 1 个月前·
4 人看过

本文档将指导您如何利用一台具有公网IP的云服务器(如阿里云ECS)作为FRP服务端,穿透局域网内的Ubuntu服务器,实现外网SSH访问。

一、 准备工作

  1. 一台阿里云ECS服务器:
  • 操作系统:Ubuntu (或兼容的Linux发行版)
  • 公网IP地址:195.22.1.11 (请替换为您的实际IP)
  • 配置:2核2G2M及以上配置足以满足需求。
  1. 一台本地Ubuntu服务器:
  • 操作系统:Ubuntu
  • 内网IP地址:192.168.1.11 (请替换为您的实际内网IP)
  • 已安装并运行SSH服务(默认已安装)。
  1. 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

  1. 配置frps.toml
  • 进入FRP解压后的目录(例如 /root/frp_0.63.0_linux_amd64),编辑 frps.toml 文件:
nano frps.toml

文件内容如下:

frps.toml
bindPort = 7000 # frp服务端与客户端通信的端口
auth.token = "your_secret_token_here" # 认证token,务必设置复杂且与客户端一致

重要提示:

  • bindPort (例如 7000) 和 auth.token 是核心配置,必须与客户端保持一致。
  • auth.token 请设置为强密码。
  1. 配置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,则相应修改)。

  1. 启动和管理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。

  1. 配置阿里云安全组
    登录阿里云控制台,找到您的ECS实例的安全组,添加入方向规则,开放以下端口:
  • TCP 7000: FRP服务端与客户端通信端口。
  • TCP 6000: (示例端口) 您计划用于SSH穿透的远程端口(自定义,但必须开放)。

三、 本地Ubuntu服务器 (frpc) 配置

本地Ubuntu服务器IP: 192.168.1.11
大部分步骤和服务端相同,注意下面是配置客户端的配置即可

  1. 配置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系统和所有软件都是最新版本,修复已知漏洞。
frp
ssh
$ cd ..