【内网穿透】frp简单几步实现任意地点访问内网机器

简介

以下提供了 linux 和 windows 机器上的配置方式。并且提供了基于 nginx 代理来处理一些无法登录机器的访问问题。

官网提供了很多类型连接,其实都是 TCP 的,不管你搞什么直接选 TCP 就完事了。它可以满足绝大多数场景。

建议在公网服务器上配置防火墙避免其他人访问你的内网环境。

应用场景:

  • 在家访问公司任意电脑或服务器
  • 在公司访问家里的任意电脑或服务器
  • 在家或在公司访问内网的任意网站
  • 在任意地点访问内网的任意网盘

常见限制:

  • 公司内网没有公网 IP管理权限

  • 家庭网络没有公网 IP

  • 家庭网络 IP 会变呀

使用要求:

  • 具有一台有公网 IP 的机器 (可以买云主机等)

配置完成后能实现的功能:

  • 基于外网 IP 不同端口
    • 访问到内网任意机器
      • windwos 机器
      • linux 机器
    • 访问到内网任意 web 服务
      • https 服务
      • http 服务
      • ftp 服务等

项目地址:https://github.com/fatedier/frp

安装

这里的安装的软件包含客户端和服务端,有公网的机器和内网机器都要安装,只是用到的文件不一样

服务端或客户端可以是 windows 也可以是 linux 都能实现以上功能

1. linux机器安装

# 安装目录
cd /opt

# 下载包
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

# 解压包
tar xf frp_0.59.0_linux_amd64.tar.gz

# 改名
mv frp_0.59.0_linux_amd64 frp

2. windows机器安装

点击链接下载:

https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_darwin_amd64.tar.gz

使用解压工具解压到想要保存的位置即可

windows 和 linux 安装完成后都会包含这几个文件

frpc       # 客户端程序
frpc.toml  # 客户端配置文件
frps       # 服务端程序
frps.toml  # 服务端配置文件

配置

通过端口访问内网机器

  1. 在具有公网 IP 的机器上配置 frps

    编辑 frps.toml 文件

bindPort = 7000  # 可以改成你想要的端口
  1. 在需要访问的内网机器上配置 frpc

    编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 x.x.x.x。以下是示例配置:

serverAddr = "x.x.x.x"  # 服务端公网IP
serverPort = 7000       # 服务端端口

[[proxies]]            # 固定写法
name = "test-01"       # 机器备注信息 多个proxies时名字不要重复
type = "tcp"           # 代理类型 保持默认即可
localIP = "127.0.0.1"  # 需要代理的内网机器的 IP
localPort = 22         # 需要代理的内网机器的端口
remotePort = 6000      # 在服务端可以访问的端口 不能和现有端口重复

当你有多个机器需要代理时编辑 frpc.toml 文件

serverAddr = "x.x.x.x" 
serverPort = 7000      

[[proxies]]    # 第一个机器         
name = "test-01"       
type = "tcp"           
localIP = "10.0.0.2"   # 第一个机器的 内网IP
localPort = 22         
remotePort = 6000      # 远程访问的端口  不能重复

[[proxies]]    # 第二个机器        
name = "test-01"       
type = "tcp"           
localIP = "10.0.0.3"  # 第二个机器的 内网IP
localPort = 22         
remotePort = 6001     # 远程访问的端口  不能重复

[[proxies]] # 第三个机器  
......

注意:

  • 当你在家里访问公司的内网端口时,就要输入公网 IP加你在内网配置文件中配置的 remotePort 来访问内网端口的

  • 在使用frp 工具前你需要知道你要访问的端口

    • ssh 默认端口:22
    • windows 远程服务默认端口: 3389
    • http服务默认端口:80
    • https服务默认端口:443
  • 在访问不同机器时,修改 [[proxies]] 下的 localIP 和 localPort 控制你要访问的内网机器和服务

  • 当你想添加新的内网机器访问时,你需要在配置文件中复制一份 [[proxies]] 并修改成你想访问的 IP 和端口重启服务即可

  • 不管你用的是 windows 或 linux 配置文件和程序都是相同的,只是启动方式略有区别

启动

linux 机器配置

1. 服务端 systemd 管理
cat  >/usr/lib/systemd/system/frps.service<<'EOF'
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml

[Install]
WantedBy = multi-user.target
EOF
# 重载
sudo systemctl daemon-reload

# 启动frp
sudo systemctl start frps

# 停止frp
# sudo systemctl stop frps

# 重启frp
# sudo systemctl restart frps

# 查看frp状态
sudo systemctl status frps

# 开机自启动
sudo systemctl enable frps

验证是否启动成功

sudo systemctl status frps  # 查看状态
ps -ef|grep frps   # 查看进程是否存在
tail -f /var/log/messages  # 查看日志
2. 客户端systemd管理
cat  >/usr/lib/systemd/system/frpc.service<<'EOF'
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml

[Install]
WantedBy = multi-user.target
EOF
# 重载
sudo systemctl daemon-reload

# 启动frp
sudo systemctl start frpc

# 停止frp
# sudo systemctl stop frpc

# 重启frp
# sudo systemctl restart frpc

# 查看frp状态
sudo systemctl status frpc

# 开机自启动
systemctl enable frpc

验证是否启动成功

sudo systemctl status frpc  # 查看状态
ps -ef|grep frpc   # 查看进程是否存在

tail -f /var/log/messages  # 查看日志

windows 机器配置

1. 服务端启动

新建一个 startup.bat 文件, 记住后缀必须时 .bat // 可能需要在 windows 上打开显示后缀名的功能 自行百度

输入以下内容

@echo off
REM 这里的文件路径改成你自己的路径就好了
start /MIN  C:\frp_path\frps.exe -c C:\frp_path\frps.toml

配置完成后点击 startup.bat文件就起来了

2. 客户端启动

新建一个 startup.bat 文件, 记住后缀必须时 .bat // 可能需要在 windows 上打开显示后缀名的功能 自行百度

输入以下内容

@echo off
REM 这里的文件路径改成你自己的路径就好了
start /MIN  C:\frp_path\frpc.exe -c C:\frp_path\frpc.toml

配置完成后点击 startup.bat文件就起来了

小技巧

注意:

当你完成以上配置后,就可以通过配置的公网 IP+ remotePort 来访问它们了。

windows 机器开启安全防护时,会删除 frp 工具的文件,所以需要将文件加入白名单或关闭安全防护。

  • 如果无法访问
    • 是否开启了防火墙
    • 是否开启了云主机的访问策略
    • 服务是否正常

测试连接

  • ssh 使用 xshell 等连接工具 输入公网 IP+remotePort 即可访问
  • windows 机器打开远程桌面连接服务 输入 IP:端口 即可访问
  • http 服务 在浏览器输入 IP: remotePort 即可访问
  • https 服务就比较麻烦,有的需要用 nginx 代理一下,代理完成后在浏览器输入 IP: remotePort 即可访问
    • 在 nginx 上需要配置 ssl 加密要不然就不行
    • 也可以用 frp 自带的功能好像用不了,没整明白

配置 nginx 代理

我的内网有台机器上有个 https 的服务 比如 IP 是 10.0.0.67 ,配置 frpc 的机器 IP 为 10.0.0.66

cat /etc/nginx/conf.d/test.conf 
server {
    listen 666 ssl;  # 自定义端口

    server_name 10.0.0.66;  # 请替换为你的域名或服务器的 IP 地址
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;       # 记得配置证书 很关键
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; # 记得配置证书 很关键
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass https://10.0.0.67;  # https 服务的地址端口不是 443时 需要指定端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 忽略证书验证(如果目标服务器使用自签名证书)
        #proxy_ssl_verify off;
        #proxy_ssl_server_name on;
        proxy_ssl_protocols TLSv1.2 TLSv1.3;
        proxy_ssl_ciphers HIGH:!aNULL:!MD5;
        proxy_ssl_server_name on;
        proxy_ssl_name 10.0.0.66;    # 改成你的IP
        proxy_ssl_verify off;  # 禁用对目标服务器 SSL 证书的验证

        add_header 'Access-Control-Allow-Origin' 'https://10.0.0.66' always; # 改成你的IP
        add_header 'Access-Control-Allow-Credentials' 'true' always;
        proxy_connect_timeout 30s ;
        proxy_read_timeout 86400s ;
        proxy_send_timeout 30s ;
        proxy_http_version 1.1 ;
        proxy_set_header Upgrade $http_upgrade ;
        proxy_set_header Connection "upgrade" ;
        add_header X-Cache $upstream_cache_status ;                  
    }
}
  • 配置完成后重启 nginx 先在内网测试访问这个 IP 端口

  • 添加一个 frp内网机器上的配置文件中新建一个 [[proxies]]

    [[proxies]]  
    name = "web01"       
    type = "tcp"           
    localIP = "10.0.0.3"
    localPort = 666       # nginx中的本地端口       
    remotePort = 6003     # 远程访问的端口  不能重复
    
  • 搞完重启

当你完成以上步骤后,你将拥有全新的办公体验或在家悄悄挂机的快感。

nginx配置 ssl

如果不会配置 ssl 请看这里

1. 创建必要的目录

首先,创建缺失的目录:

sudo mkdir -p /etc/ssl/private
sudo mkdir -p /etc/ssl/certs

2. 生成自签名证书

  1. 生成私钥:

    sudo openssl genrsa -out /etc/ssl/private/nginx-selfsigned.key 2048
    
  2. 创建证书签名请求 (CSR):

    sudo openssl req -new -key /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.csr
    
  3. 自签名证书:

    sudo openssl x509 -req -days 365 -in /etc/ssl/certs/nginx-selfsigned.csr -signkey /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
    

3. 测试并重启 Nginx

  1. 测试 Nginx 配置:

    sudo nginx -t
    
  2. 重启 Nginx 服务:

    sudo systemctl restart nginx
    

注意事项

  • 自签名证书在浏览器中不会被信任,会显示“不安全”的警告。这适合内部测试和开发环境,但不适用于生产环境。
  • 如果需要在生产环境中使用 HTTPS,建议从可信的证书颁发机构(CA)获取证书,或者使用 Let’s Encrypt 提供免费的证书服务。

封面图片由通义万象生成:https://tongyi.aliyun.com/wanxiang/

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值