在你的内网网关(通常是路由器或防火墙)上设置一个“端口转发”(Port Forwarding)规则,当互联网上的用户访问你的公网IP的某个特定端口时,路由器会将这个请求转发到内网中指定IP地址和端口的设备(你的网站服务器)上。

公网ip 访问内网网站
(图片来源网络,侵删)

⚠️ 重要前提与安全警告

在开始之前,你必须了解并接受以下风险:

  1. 安全风险极高: 你的网站将直接暴露在互联网上,会持续受到各种扫描、攻击(如暴力破解、DDoS、注入攻击等)。一个不安全的网站会成为黑客入侵你整个内网的跳板。
  2. 动态IP问题: 大多数家庭宽带运营商分配的是动态公网IP,这意味着它会不定期变化,一旦IP变化,你的网站地址就失效了。
  3. 端口限制: 很多网络运营商(ISP)会封锁常见的端口(如80, 443),导致外部无法访问。
  4. 违反服务条款: 一些家庭宽带的用户协议不允许提供公共服务,可能会被运营商警告或封停。

端口转发 (最直接,但风险自负)

这是最传统的方法,适用于你有固定公网IP(或使用DDNS)且对网络有一定了解的情况。

准备工作

  1. 确定内网服务器的信息:

    • 内网IP地址: 你网站运行设备的局域网IP(168.1.10),在Windows上用 ipconfig 查看,在Linux/macOS上用 ifconfigip addr 查看。
    • 端口号: 你网站服务监听的端口(80 for HTTP, 443 for HTTPS, 8080 for a custom port)。
  2. 获取你的公网IP地址:

    公网ip 访问内网网站
    (图片来源网络,侵删)
    • 在浏览器中搜索“我的IP”或访问 ip.sbwhatismyip.com 等网站,即可看到你当前的公网IP。
  3. 配置DDNS (如果IP是动态的 - 强烈推荐):

    • 由于IP会变,你需要一个动态域名解析服务,它会自动将一个固定的域名(如 myhome.ddns.net)指向你当前变化的公网IP。
    • 常用DDNS服务商: No-IP, Dynu, DuckDNS (免费), 路由器厂商自带的服务等。
    • 设置步骤: a. 在DDNS服务商网站注册账号。 b. 在你的路由器或电脑上安装DDNS客户端,并输入你的账号信息。 c. 客户端会定期检查你的公网IP,并在变化时自动更新到DDNS服务器。

操作步骤 (以路由器为例)

  1. 登录路由器管理后台: 在浏览器中输入路由器的管理地址(通常是 168.1.1168.0.1),输入管理员账号密码。

  2. 找到端口转发/虚拟服务器设置:

    • 这个功能在不同品牌路由器中的名称可能不同,常见名称有:
      • 端口转发 (Port Forwarding)
      • 虚拟服务器 (Virtual Server)
      • NAT转发 (NAT Forwarding)
      • 应用与游戏 (Applications & Gaming)
  3. 添加转发规则:

    公网ip 访问内网网站
    (图片来源网络,侵删)
    • 服务/应用名称: 自定义一个名字,如 "My Web Server"。
    • 外部端口/公网端口: 你希望外部访问的端口。建议使用非标准端口(如 8080, 8888)来避免被扫描和干扰,如果必须用80/443,请确保防火墙配置严密。
    • 内部端口/私有端口: 你内网服务器实际监听的端口(80)。
    • 内部IP地址/服务器IP: 你在第一步中确定的内网服务器IP(168.1.10)。
    • 协议: 通常选择 TCP,如果网站同时支持HTTP和HTTPS,或者使用WebSocket,可能需要同时添加 TCPUDP 规则。
    • 启用: 勾选以激活该规则。
  4. 保存并重启路由器: 保存设置后,路由器可能会重启使配置生效。

  5. 测试访问:

    • 如果设置了DDNS,访问 http://你的DDNS域名:外部端口 (http://myhome.ddns.net:8080)。
    • 如果直接用公网IP,访问 http://你的公网IP:外部端口 (http://123.45.67.89:8080)。

使用内网穿透工具 (更安全、更简单、推荐)

内网穿透工具可以让你无需配置路由器,也无需暴露内网设备,它在你的服务器和公网之间建立一个安全的“隧道”。

工作原理

你在内网服务器上运行一个客户端,这个客户端连接到服务商的公网服务器,然后你通过服务商提供的域名访问,请求会通过隧道被安全地转发到你的内网客户端,再到达你的网站。

常用工具推荐

  1. frp (Fast Reverse Proxy) - 开源免费,功能强大

    • 优点: 完全免费、高度可定制、支持多种协议(HTTP, HTTPS, TCP, UDP等)、性能好。
    • 缺点: 需要自己有一台有公网IP的服务器来运行服务端,或者使用frp提供的免费服务(有流量和功能限制)。
    • 文档: https://gofrp.org/docs/
  2. Ngrok - 非常流行,适合快速测试

    • 优点: 开箱即用,无需配置,免费版方便快捷。
    • 缺点: 免费版会随机分配域名,且无法自定义子域名,有带宽和在线时间限制,付费版功能强大。
    • 官网: https://ngrok.com/
  3. 花生壳 (Peanut Shell) - 老牌商业服务

    • 优点: 提供内网穿透和DDNS一体化服务,有中文界面,对新手友好。
    • 缺点: 免费版功能有限,付费版价格相对较高。
    • 官网: https://hsk.oray.com/

以Ngrok为例的简单操作 (最快上手)

  1. 注册账号: 访问 ngrok.com 注册一个免费账号。
  2. 下载Ngrok: 下载适合你操作系统的版本。
  3. 获取Authtoken: 登录Ngrok官网,在账户页面找到你的Authtoken。
  4. 配置并启动:
    • 在命令行中,先进行身份验证:ngrok config add-authtoken <你的Authtoken>
    • 启动隧道,将你的网站端口暴露出来:ngrok http 80 (假设你的网站运行在80端口)
  5. 获取访问地址: 启动后,命令行会显示两个公网地址:
    • Forwarding: http://random-string.ngrok.io -> http://127.0.0.1:80
    • Forwarding: https://random-string.ngrok.io -> http://127.0.0.1:80
    • 现在任何人都可以通过 https://random-string.ngrok.io 访问你的内网网站了。

安全加固措施 (无论用哪种方法都必须做)

  1. 使用强密码: 网站后台、数据库、服务器SSH等所有密码都必须是复杂且唯一的。
  2. 及时更新: 保持你的网站程序(如WordPress)、服务器操作系统、所用的软件(如Nginx, Apache)都是最新版本,以修复已知漏洞。
  3. 配置防火墙:
    • 系统防火墙: 只开放必要的端口(如80, 443),关闭所有其他端口。
    • 应用防火墙: 如果使用Nginx,可以配置fail2ban来防止暴力破解。
  4. 使用HTTPS: 即使是内网网站,也强烈建议配置SSL证书(可以使用Let's Encrypt免费获取),启用HTTPS,这可以加密数据传输,防止中间人攻击。
  5. 最小权限原则: 网站程序运行的用户不要使用rootAdministrator等最高权限账户。
  6. 定期备份: 定期备份你的网站数据和数据库,以防万一被攻击或数据损坏。
方法 优点 缺点 适用场景
端口转发 直接、免费(无额外成本)、性能高 安全风险高、IP动态需DDNS、配置复杂、可能被运营商封禁 有固定公网IP、对网络熟悉、愿意承担风险、用于临时测试或内部工具
内网穿透 安全(无需暴露内网IP)、无需改路由器、有免费方案 依赖第三方服务(可能收费或限制)、多了一层转发可能影响性能 强烈推荐给绝大多数用户,特别是个人开发者、临时项目、对安全有要求的场景

对于绝大多数个人用户和小型项目,我强烈推荐使用内网穿透工具(如frp或Ngrok),因为它更安全、更简单,且能很好地解决动态IP的问题。 如果你只是想在本地电脑上临时给朋友展示一个项目,Ngrok是最佳选择,如果你想长期运行一个个人博客或项目,frp是更强大、更可控的选择。