异地组网+内网穿透实现远程访问内网服务器(完全免费) ...

鼠扑  论坛元老 | 2025-2-13 11:49:58 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1035|帖子 1035|积分 3105

0. 前言



  • 当服务器处于内网且仅允许内网内主机ssh时,我们无法在外网访问服务器。
  • 现有方案要么需要购买云主机进行内网穿透,要么异地组网后在外网主机进行ssh署理,都比力繁杂。
  • 本方案无需云主机,完全免费。
1. 场景与原理




  • S1 和 S2 仅允许 P1 连接,P1、P2 可访问internet,目标是使用 P2 ssh 到 S1 和 S2
  • 4个设备的 ip 和端口 表现为:

    • S1: S1_N1_ip ; S1_N1_port
    • S2:S2_N1_ip ; S2_N1_port
    • P1: P1_N1_ip ; P1_N1_port; P1_N2_ip ; P1_N2_port
    • P2: P2_N2_ip ; P2_N2_port

  • 大要原理是:

    • P1 是 N2 局域网中的 内网穿透服务器。
    • P1 是 N1 局域网中的 内网穿透客户端,将 S1 和 S2 穿透到 N2。
    • P2 连接到 P1 的 用于内网穿透客户端 的端口,即可连接到 S1 和 S2。

  • P2 仅进行异地组网,其他所有操作均在 P1 实行,P1 是 Linux系统 (windows 也可,但 Linux可能更稳定)。
2. 异地组网



  • 星空组网、贝锐蒲公英 等工具可实现异地组网,推荐使用星空组网,可免费组网20台机器,而蒲公英仅允许3台。
   官网: https://starvpn.cn/
教程:https://doc.starvpn.cn/#/register
  

  • 首先,在浏览器上,进入星空组网官网注册账号,进入配景管理,点击成员列表,点击添加成员,填写 名称、成员账号、登陆密码,需要创建两个成员,分别供P1和P2使用

  • 登录 P1, 在 P1 上安装星空组网客户端并运行:
  1. # 安装
  2. sudo curl -O https://file.starvpn.cn/stars/releases/deb/5.0.5/starvpn-5.0.5-amd64.deb
  3. sudo dpkg -i starvpn-5.0.5-amd64.deb
  4. # 登录
  5. sudo stars login
  6. # 输入用于P1的成员账号和登录密码
复制代码

  1. # 查看状态
  2. sudo stars status
复制代码

该命令输出的 IP 192.168.188.8 , 即为 P1_N2_ip


  • 在 P2上登录星空组网客户端,windows系统登录较为简单,不做赘述。

需要注意的是,如果 P1 和 P2 组网乐成,那么在客户端里点击 PING 会显示 地点可访问。
3. 内网穿透



  • 该部分所有操作均在 P1 进行,使用 frp 工具。
   frp: https://gofrp.org/zh-cn/docs/setup/
  

  • 安装 frp
  1. # 下载,如下载有问题,也可下载至 P2 然后上传至 P1
  2. wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
  3. # 解压
  4. tar zxvf frp_0.61.1_linux_amd64.tar.gz -C ./
  5. # 赋予执行权限
  6. cd frp_0.61.1_linux_amd64
  7. sudo chmod +x frpc
  8. sudo chmod +x frps
复制代码


  • 编写frp服务器配置文件,需创建 2 个配置文件,分别用以穿透 S1 和 S2
  1. # 如没有 vim ,可运行 sudo apt install vim
  2. sudo vim server_s1.toml
  3. # 输入
  4. bindPort = 30001
复制代码

同样地,创建 server_s2.toml,输入 bindPort = 30002,bindPort 可任意设置


  • 编写**:**,也需创建 2 个配置文件,分别用以穿透 S1 和 S2
  1. sudo vim client_s1.toml
  2. # 输入
  3. serverAddr = "127.0.0.1"
  4. serverPort = 30001
  5. [[proxies]]
  6. name = "s1"
  7. type = "tcp"
  8. localIP = "S1_N1_ip"
  9. localPort = S1_N1_port
  10. remotePort = 30003
复制代码
同样地,创建 client_s2.toml,输入 serverPort = 30002,remotePort =30004 ,localIP 、localPort 相应更改。


  • 开放端口,必须开放端口,不然无用。本文以ufw软件开放端口,也可使用其他工具
  1. sudo ufw allow 30001:30004/tcp
复制代码


  • 运行frp服务器
  1. sudo ./frps -c server_s1.toml
复制代码

请注意,如需停止服务器,请输入ctrl+c,如输入其他,会造成 30001 端口占用。然后,新开一个终端,实行:
  1. cd frp_0.61.1_linux_amd64
  2. sudo ./frps -c server_s2.toml
复制代码


  • 运行frp客户端
    新开一个终端,实行:
  1. cd frp_0.61.1_linux_amd64
  2. sudo ./frpc -c client_s1_toml
复制代码

同样地,对于S2,也实行雷同操作。
4. 测试

在P2上,打开cmd,输入:
  1. ssh S1_N1_user@P1_N2_ip -p 30001
复制代码
即可连接上S1,对于S2,操作类似,不做赘述。
5. 更进一步------配景运行所有frp服务



  • 第三章的命令需要同时运行4个终端且不能停止,不适合长期运行。
  • 本文使用nohup命令使所有frp服务配景运行,当然也可使用.service,可自行探索。
  1. cd frp_0.61.1_linux_amd64
  2. # 创建用于存储log的文件夹
  3. mkdir logs
复制代码
  1. # 创建服务器一键运行脚本
  2. cd frp_0.61.1_linux_amd64
  3. sudo vim start_servers.sh
  4. # 输入
  5. nohup ./frps -c server_s1.toml > logs/server_s1.txt 2>&1 &
  6. nohup ./frps -c server_s2.toml > logs/server_s2.txt 2>&1 &
  7. # 存储
复制代码
  1. # 创建客户端一键运行脚本
  2. cd frp_0.61.1_linux_amd64
  3. sudo vim start_clients.sh
  4. # 输入
  5. nohup ./frpc -c client_s1.toml > logs/client_s1.txt 2>&1 &
  6. nohup ./frpc -c client_s2.toml > logs/client_s2.txt 2>&1 &
  7. # 存储
复制代码
  1. # 赋予执行权限
  2. cd frp_0.61.1_linux_amd64
  3. sudo chmod +x start_servers.sh
  4. sudo chmod +x start_clients.sh
复制代码
  1. # 执行脚本
  2. cd frp_0.61.1_linux_amd64
  3. sudo ./start_servers.sh
  4. sudo ./start_clients.sh
复制代码


  • 如需一键杀死frp服务:
  1. sudo pkill -9 frp
复制代码
5. 竣事



  • 本文实现了无需云服务器,免费实现访问内网服务器。
  • 如需增加新的设备访问内网服务器,则只需将新的设备接入星空组网的捏造子网。
  • 如上述流程有问题,可以邮件接洽我,我只管解答:
   sunyafeng0312@qq.com

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表