使用SSH建立内网穿透,能够访问内网的web服务器
搞了一个晚上,终于建立了一个内网穿透。和AI配合,还是得自己思考,AI配合才能搞定,不思考只依赖AI也不行。内网服务器只是简单地使用了python -m http.server 8899,但是对于Gradio建立的服务器好像不行,会出问题。

问题背景
需求
- 将内网的 Web 服务器(
http://localhost:8899)通过 SSH 隧道映射到外网服务器,使外网可以通过外网服务器的8080端口访问内网服务。
环境
- 内网服务器:
- Web 服务运行在
localhost:8899。 - 可以访问外网服务器,但外网服务器无法直接访问内网服务器(由于防火墙限制)。
- Web 服务运行在
- 外网服务器:
- 外网 IP:
47.238.40.212。 - 需要将
8080端口的流量通过 SSH 隧道转发到内网的8899端口。
- 外网 IP:
问题分析
-
SSH 隧道未正确建立:
- 外网服务器的
8080端口被sshd监听,但流量未正确转发到内网的8899端口。 - 错误日志显示
upstream prematurely closed connection,表明连接被提前关闭。
- 外网服务器的
-
Nginx 配置问题:
- Nginx 配置正确,将请求转发到
127.0.0.1:8080,但 SSH 隧道未正常工作。
- Nginx 配置正确,将请求转发到
-
客户端服务问题:
- 内网的 Web 服务(
http://localhost:8899)正常运行,但未通过 SSH 隧道暴露到外网。
- 内网的 Web 服务(
解决方案
1. 配置 SSH 隧道
在内网服务器上执行以下命令:
ssh -R 8080:localhost:8899 user@47.238.40.212
- 参数说明:
-R 8080:localhost:8899:将外网服务器的8080端口转发到内网的8899端口。user@47.238.40.212:外网服务器的用户名和 IP 地址。
验证 SSH 隧道:
- 在外网服务器上检查
8080端口是否被sshd监听:
输出示例:netstat -tuln | grep 8080tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 12345/sshd: user tcp6 0 0 ::1:8080 :::* LISTEN 12345/sshd: user
2. 配置外网服务器的 SSH 服务
编辑 /etc/ssh/sshd_config:
- 确保以下配置项已启用:
AllowTcpForwarding yes GatewayPorts yes - 重启 SSH 服务以应用更改:
sudo systemctl restart sshd
检查防火墙:
- 确保外网服务器的防火墙允许
8080端口的流量:sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
3. 配置 Nginx
编辑 Nginx 配置文件:
- 在外网服务器上编辑
/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf,添加以下内容:server {listen 80;server_name xinnian.wang;location / {proxy_pass http://127.0.0.1:8080;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_connect_timeout 300s;proxy_read_timeout 300s;proxy_send_timeout 300s;} }
测试 Nginx 配置:
- 检查配置文件语法:
sudo nginx -t - 重新加载 Nginx 配置:
sudo systemctl reload nginx
4. 启动内网 Web 服务
在内网服务器上启动 Web 服务:
- 使用 Python 的
http.server模块启动 Web 服务:python -m http.server 8899 - 确保服务正常运行,并可以通过
http://localhost:8899访问。
5. 测试 SSH 隧道
在外网服务器上测试:
- 使用
curl测试8080端口:
如果 SSH 隧道正常工作,应该返回内网 Web 服务的内容。curl http://127.0.0.1:8080
通过外网访问:
- 在外网浏览器中访问
http://47.238.40.212:8080,确认可以访问内网 Web 服务。
最终结果
- SSH 隧道成功建立:
- 外网服务器的
8080端口通过 SSH 隧道转发到内网的8899端口。
- 外网服务器的
- Nginx 配置正确:
- Nginx 将外网请求转发到
127.0.0.1:8080,并通过 SSH 隧道传递到内网。
- Nginx 将外网请求转发到
- 测试成功:
- 通过
curl http://127.0.0.1:8080和浏览器访问http://47.238.40.212:8080,成功访问内网 Web 服务。
- 通过
后续建议
-
保持 SSH 隧道稳定:
- 使用
autossh或tmux保持 SSH 隧道的稳定性。 - 示例:
autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 8080:localhost:8899 user@47.238.40.212
- 使用
-
安全性:
- 使用 SSH 密钥认证代替密码认证。
- 限制允许访问的 IP 地址。
-
日志监控:
- 定期检查 Nginx 和 SSH 的日志,确保没有异常访问或错误。
🚀
- 定期检查 Nginx 和 SSH 的日志,确保没有异常访问或错误。
相关文章:
使用SSH建立内网穿透,能够访问内网的web服务器
搞了一个晚上,终于建立了一个内网穿透。和AI配合,还是得自己思考,AI配合才能搞定,不思考只依赖AI也不行。内网服务器只是简单地使用了python -m http.server 8899,但是对于Gradio建立的服务器好像不行,会出…...
JWT认证实战
JWT(JSON Web Token)是一种轻量级的、基于 JSON 的开放标准(RFC 7519),用于在各方之间安全地传递信息。JWT 的特点是结构简单、轻量化和跨平台支持,适用于用户身份验证、信息加密以及无状态的 API 访问控制…...
计算机网络 (23)IP层转发分组的过程
一、IP层的基本功能 IP层(Internet Protocol Layer)是网络通信模型中的关键层,属于OSI模型的第三层,即网络层。它负责在不同网络之间传输数据包,实现网络间的互联。IP层的主要功能包括寻址、路由、分段和重组、错误检测…...
权限管理的方法
模块化分类 功能模块划分 把人资管理系统按业务逻辑拆分成清晰的功能区,例如招聘管理、培训管理、绩效管理、员工档案管理等。招聘管理模块下还能细分职位发布、简历筛选、面试安排等子功能;员工档案管理涵盖基本信息、教育经历、工作履历录入与查询等。…...
【郑大主办、ACM出版、EI稳定检索】第四届密码学、网络安全与通信技术国际会议 (CNSCT 2025)
第四届密码学、网络安全与通信技术国际会议(CNSCT 2025)将于2025年1月17-19日在中国郑州盛大启幕(线上召开)。本次会议旨在汇聚全球密码学、网络安全与通信技术领域的顶尖学者、研究人员与行业领袖,共同探索计算机科学的最新进展与未来趋势。…...
48小时,搭建一个设备巡检报修系统
背景 时不时的,工地的设备又出了状况。巡检人员一顿懵逼、维修人员手忙脚乱,操作工人抱怨影响进度。老板看着待完成的订单,就差骂娘了:“这么搞下去,还能有效率吗?”。 于是,抱着试一试的心态…...
基于Redisson实现重入锁
一. 分布式锁基础 在分布式系统中,当多个客户端(应用实例)需要访问同一资源时,可以使用分布式锁来确保同一时刻只有一个客户端能访问该资源。Redis作为高性能的内存数据库,提供了基于键值对的分布式锁实现,…...
Java文件操作的简单示例
使用原生库 创建空白文件 package com.company; import java.io.File; import java.io.IOException;public class Main {public static void main(String[] args) {File f new File("newfile.txt");try {boolean flag f.createNewFile();System.out.println(&quo…...
删除与增加特定行
1.删除特定行 new_df <- df[-c(4), ] #删除第4行 new_df <- df[-c(2:4), ] #去除第2-4行 new_df <- subset(df, col1 < 10 & col2 < 6) #删除特定第一列<10和第二列<6的行。按名字删除 无论行列,可以找出对应索引或构造相同长…...
动态规划六——两个数组的dp问题
目录 题目一——1143. 最长公共子序列 - 力扣(LeetCode) 题目二——1035. 不相交的线 - 力扣(LeetCode) 题目三——115. 不同的子序列 - 力扣(LeetCode) 题目四—— 44. 通配符匹配 - 力扣(…...
项目优化之策略模式
目录 策略模式基本概念 策略模式的应用场景 实际项目中具体应用 项目背景: 策略模式解决方案: 计费模块策略模式简要代码 策略模式基本概念 策略模式(Strategy Pattern) 是一种行为型设计模式,把算法的使用放到环境类中,而算…...
[读书日志]从零开始学习Chisel 第四篇:Scala面向对象编程——操作符即方法(敏捷硬件开发语言Chisel与数字系统设计)
3.2操作符即方法 3.2.1操作符在Scala中的解释 在其它语言中,定义了一些基本的类型,但这些类型并不是我们在面向对象中所说的类。比如说1,这是一个int类型常量,但不能说它是int类型的对象。针对这些数据类型,存在一些…...
三子棋游戏
目录 1.创建项目 2.主函数编写 3.菜单函数编写 4.宏定义棋盘行和列 5.棋盘初始化 6.打印棋盘 7.玩家下棋 8.电脑下棋 9.平局判断 10.输赢判断 11.game函数 三子棋游戏(通过改变宏定义可以变成五子棋),玩家与电脑下棋 1.创建项目…...
MyBatis执行一条sql语句的流程(源码解析)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MyBatis执行一条sql语句的流程(源码解析) MyBatis执行sql语句的流程加载配置文件加载配置文件的流程 创建sqlsessionFactory对象解析Mapper创建sqlses…...
【电机控制】低通滤波器及系数配置
【电机控制】低通滤波器及系数配置 文章目录 [TOC](文章目录) 前言一、低通滤波器原理二、理论计算三、代码四、参考资料总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、低通滤波器原理 二、理论计算 三、代码 //低通滤波 pv->Ealpha…...
ArcgisServer过了元旦忽然用不了了?许可过期
昨天过完元旦之后上班发现好多ArcgisServer的站点运行出错了,点击日志发现,说是许可过去,也就是当时安装ArcgisServer时读取的ecp文件过期了,需要重新读取。 解决方法 1.临时方法,修改系统时间,早于2024年…...
如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…...
【算法刷题】链表
文章目录 环形链表判断是否有环找出环的入口位置 双指针反转链表(Reverse a Linked List)移除链表中的指定元素(Remove Linked List Elements) 环形链表 判断是否有环 环形链表是指链表中的某些节点的 next 指针指向了链表中的某…...
计算机网络 —— 网络编程实操(1)(UDP)
计算机网络 —— 网络编程实操(UDP) 套接字端口套接字的定义为什么需要套接字? 套接字的分类1. 按照通信协议分类2. 按照地址族(Address Family)分类3. 按照通信模式分类 socket APIsockaddr结构 使用接口套接字初始化…...
selenium 确保页面完全加载
在使用Python和Selenium进行Web自动化时,确保页面完全加载是非常重要的。为了实现这一点,Selenium提供了两种主要类型的等待:显式等待(Explicit Waits)和隐式等待(Implicit Waits)。此外&#x…...
Visual C++运行库终极解决方案:告别DLL缺失的完整指南
Visual C运行库终极解决方案:告别DLL缺失的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 还在为"应用程序无法正常启动"的弹窗而…...
如何用imFile下载工具提升你的下载效率:开源下载工具的完整使用秘籍
如何用imFile下载工具提升你的下载效率:开源下载工具的完整使用秘籍 【免费下载链接】imfile-desktop A full-featured download manager. 项目地址: https://gitcode.com/gh_mirrors/im/imfile-desktop 还在为下载速度慢、文件管理混乱而烦恼吗?…...
米哈游游戏启动器终极指南:如何用Starward一站式管理你的游戏世界
米哈游游戏启动器终极指南:如何用Starward一站式管理你的游戏世界 【免费下载链接】Starward Game Launcher for miHoYo - 米家游戏启动器 项目地址: https://gitcode.com/gh_mirrors/st/Starward 还在为管理多个米哈游游戏而烦恼吗?每次都要打开…...
PvZ Toolkit:植物大战僵尸终极免费修改器完整指南
PvZ Toolkit:植物大战僵尸终极免费修改器完整指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸无尽模式中阳光不足而烦恼吗?是否曾经精心布置的完美阵…...
告别连线噩梦:用SV的interface和modport重构你的UVM验证平台连接
告别连线噩梦:用SV的interface和modport重构你的UVM验证平台连接 在构建复杂UVM验证环境时,工程师们常常陷入信号连线的泥潭。每当DUT接口增减一个信号,就需要在多个模块中同步修改端口定义——这种重复劳动不仅低效,还容易引入连…...
解锁RK3588潜力:从4K到8K的HDMI配置实战解析
1. 为什么RK3588默认不支持8K输出? 很多开发者拿到RK3588开发板时,会发现默认配置下HDMI最高只能输出4K分辨率。这其实是一个设计上的权衡结果。RK3588芯片本身具备8K视频解码和显示能力,但在Android 12 SDK中,为了兼顾多个显示接…...
Spring AI集成State Graph实战指南
Spring AI集成State Graph实战指南 前言 Spring AI 作为 Spring 生态的重要一员,极大地提升了智能应用的开发效率。State Graph 作为 AI 流程编排与状态管理的利器,能帮助开发者高效管理业务流程。在本篇实战指南中,将通过详实案例࿰…...
Graphormer效果验证:使用OGB官方评估脚本验证模型预测准确率
Graphormer效果验证:使用OGB官方评估脚本验证模型预测准确率 1. 模型概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。与传统的图神经网络(GNN)相比&#x…...
别再只会用CSS Transition了!用FLIP动画思想搞定扭蛋机抽奖的复杂位移
FLIP动画原理:从扭蛋机抽奖到复杂位移的高性能实现方案 当我们在电商平台看到商品飞入购物车的流畅动画,或是在图片查看器中体验元素放大缩小的丝滑过渡时,很少会思考这些效果背后的技术实现。传统CSS Transition虽然简单易用,但在…...
Kubernetes集群的高可用性设计与实践:从理论到落地
Kubernetes集群的高可用性设计与实践:从理论到落地 🔥 硬核开场 各位技术老铁们,今天咱们来聊聊Kubernetes集群的高可用性设计。别跟我说你的K8s集群就一个master节点,那都不叫生产环境!在生产环境中,高可用…...
