凌峰创科服务平台

如何外网安全访问内网Tomcat服务器?

核心概念:为什么外网不能直接访问?

你的 Tomcat 服务器通常位于一个局域网(比如家庭网络或公司内网)中,这个局域网中的所有设备(你的电脑、手机、服务器等)都通过一个路由器共享一个公网 IP 地址 访问互联网。

如何外网安全访问内网Tomcat服务器?-图1
(图片来源网络,侵删)
  • 内网 IP (私有 IP)168.1.1000.0.5,这是路由器给你电脑分配的内部地址,只在局域网内可见。
  • 公网 IP (公共 IP)45.67.89,这是你的互联网服务提供商 分配给你路由器的地址,整个互联网上的设备都能看到。

当外网用户访问 45.67.89 时,请求首先到达你的路由器,但路由器不知道这个请求应该转发给局域网内的哪台设备(是 168.1.100 还是 168.1.101?),也不知道应该使用哪个端口(是 8080 还是 22?)。端口映射就是告诉路由器:“所有发往 公网IP:8080 的请求,都转发给 内网IP:8080 的设备”。


端口映射 (Port Forwarding) - 适合有公网 IP 的场景

这种方法需要你能够配置连接你内网的路由器,大多数家庭宽带和企业网络都支持此功能。

操作步骤:

第 1 步:获取 Tomcat 服务器的内网 IP 地址

  1. 在运行 Tomcat 的服务器电脑上,打开命令提示符 或终端。
  2. 输入命令 ipconfig (Windows) 或 ifconfig / ip addr (Linux/Mac)。
  3. 找到你的网络连接(如“以太网适配器”或“en0”),记下对应的 IPv4 地址,这就是你的 Tomcat 服务器的内网 IP,168.1.100

第 2 步:获取路由器的公网 IP 地址

如何外网安全访问内网Tomcat服务器?-图2
(图片来源网络,侵删)
  1. 在任意能上网的设备上,打开浏览器,访问 ip.sbwhatismyip.comcmyip.com 等网站。
  2. 页面上显示的就是你的路由器的公网 IP 地址,45.67.89

第 3 步:配置 Tomcat 服务器

为了方便外网访问,建议修改 Tomcat 的监听端口,默认端口是 8080,但你可以修改为 80,这样访问时就无需输入端口号(http://123.45.67.89 而不是 http://123.45.67.89:8080)。

  1. 找到 Tomcat 安装目录下的 conf/server.xml 文件。
  2. 用文本编辑器打开,找到如下行:
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  3. port="8080" 修改为你想要的端口,port="80"注意:端口号 1024 以下的端口需要管理员/root 权限才能使用。
  4. 保存文件并重启 Tomcat 服务器。

第 4 步:在路由器上进行端口映射

这是最关键的一步,不同品牌路由器的设置界面不同,但逻辑大同小异。

如何外网安全访问内网Tomcat服务器?-图3
(图片来源网络,侵删)
  1. 登录路由器管理后台:在浏览器中输入路由器的管理地址,通常是 168.1.1168.0.1168.31.1(具体地址请查看路由器背面标签)。
  2. 找到端口映射/虚拟服务器/转发设置:这个功能可能在“高级设置”、“NAT转发”、“端口映射”等菜单下。
  3. 添加映射规则
    • 服务端口/外部端口:输入你希望外网访问的端口,80
    • 内部 IP 地址:输入你在第 1 步中获取到的 Tomcat 服务器的内网 IP,168.1.100
    • 内部端口:输入 Tomcat 实际监听的端口,如果你在第 3 步改成了 80,这里就填 80,如果没改,就填 8080
    • 协议:选择 TCP(Tomcat 使用 TCP 协议)。
    • 状态:勾选 启用
  4. 保存并应用设置,路由器可能会重启。

第 5 步:测试访问

  1. 确保你的电脑防火墙 或服务器的防火墙没有阻止 Tomcat 端口(如 808080)。
  2. 在外网的一台电脑上(比如你的手机流量,或者朋友家的网络),打开浏览器。
  3. 输入 http://你的公网IP (http://123.45.67.89) 进行访问。

如果一切顺利,你就能看到 Tomcat 的欢迎页面了!


内网穿透 - 适合没有公网 IP 或无法修改路由器的场景

很多家庭宽带用户没有固定的公网 IP,或者路由器在运营商网络下,无法进行端口映射,这时,内网穿透是最佳选择。

内网穿透的原理是:你在公网(例如云服务器)上部署一个中转服务,你在内网的 Tomcat 服务器上运行一个客户端,这个客户端会主动连接到中转服务并注册一个“隧道”,这样,外网用户访问中转服务的某个端口时,请求就会通过这个隧道转发到你的内网 Tomcat。

主流内网穿透工具:

  • frp (Fast Reverse Proxy):功能强大、性能好、开源免费,是目前最流行的选择。
  • ngrok:非常简单易用,有免费套餐,但免费版有域名随机、带宽限制等问题。
  • 花生壳:老牌的商业服务,提供付费的稳定内网穿透方案。

下面以 frp 为例,讲解如何配置。

frp 配置步骤:

第 1 步:准备 frp 服务端和客户端

  1. 下载 frp:访问 frp GitHub Release 页面 下载最新版本的服务端和客户端程序,通常服务端和客户端的版本要一致。
  2. 服务端:你需要一台有公网 IP 的服务器(可以是阿里云、腾讯云、Vultr 等任何云服务器)。
  3. 客户端:将下载的 frp 客户端程序(frpc)放到你的 Tomcat 服务器上。

第 2 步:配置 frp 服务端

在你的公网服务器上,编辑 frps.ini 文件:

# frps.ini
[common]
# frp 服务端监听的端口
bind_port = 7000
# 设置一个仪表盘端口,方便查看客户端连接状态
dashboard_port = 7500
# 设置仪表盘的用户名和密码,强烈建议设置!
dashboard_user = admin
dashboard_pwd = your_password

启动服务端:

./frps -c frps.ini

第 3 步:配置 frp 客户端

在你的 Tomcat 服务器上,编辑 frpc.ini 文件:

# frpc.ini
[common]
# frp 服务端的公网 IP 地址
server_addr = 你的公网服务器IP
# frp 服务端监听的端口,必须和上面服务端配置的 bind_port 一致
server_port = 7000
# 配置一个 Tomcat 的代理
[tomcat_web]
# 类型是 http
type = http
# 本地 Tomcat 服务的内网 IP 和端口
local_ip = 127.0.0.1  # 或者你服务器的内网 IP,如 192.168.1.100
local_port = 8080
# 访问此代理的公网域名前缀(如果你有域名的话)或者自定义的二级域名
# 如果你没有域名,可以使用 subdomain = "random",frp 会分配一个随机的子域名
subdomain = myweb

启动客户端:

./frpc -c frpc.ini

第 4 步:测试访问

  1. 确保服务端和客户端都在运行。
  2. 打开浏览器,访问 http://你的公网服务器IP:7500,输入你设置的账号密码,可以查看到客户端的连接状态。
  3. 访问你的 Tomcat 服务:
    • 如果你在 frpc.ini 中配置了 subdomain 并且你有一个域名解析到了你的公网服务器 IP,那么你可以通过 http://myweb.你的域名.com 来访问。
    • 如果你没有域名,frp 默认会提供一个类似 http://你的公网服务器IP:8080 的访问地址(具体取决于 frp 版本和配置,请查看服务端日志或仪表盘获取正确的端口和地址)。

重要注意事项

  1. 安全风险

    • 端口映射:直接将服务器暴露在公网上,如同打开了家门。强烈建议不要使用默认的 808080 端口,而是使用一个高端口号(如 58080),确保 Tomcat 的 managerhost-manager 管理页面设置了强密码,并限制访问 IP。
    • 内网穿透:同样存在安全风险,但比直接端口映射要安全一些,因为流量经过了 frp 服务的“中转”,请务必设置 dashboard 的用户名和密码。
  2. 动态公网 IP:如果你使用的是家庭宽带,你的公网 IP 可能会经常变化,端口映射后,IP 变了映射就失效了,你需要使用 DDNS (动态域名解析) 服务,将一个固定的域名(如 myhome.ddns.net)动态指向你当前变化的公网 IP,路由器通常自带 DDNS 客户端功能。

  3. 防火墙:请检查并放行所有涉及的端口:

    • Tomcat 服务器防火墙:放行 8080 或你自定义的端口。
    • 路由器防火墙:确保端口映射的端口是开启的。
    • 云服务器防火墙:如果你使用 frp,确保云服务器的 7000 (frp端口) 和 7500 (dashboard端口) 是开放的。
  4. 带宽和性能:公网访问速度受限于你的家庭/公司宽带的上行带宽,这通常远低于下行带宽,上传大文件或进行高并发访问可能会很慢。

特性 端口映射 内网穿透
原理 路由器转发请求 公网中转服务
成本 通常免费(利用现有设备) frp免费,商业服务(如花生壳)收费
适用场景 有路由器管理权限,有公网IP 无公网IP,无法/不愿修改路由器
安全性 较低,直接暴露 相对较高,流量经过中转
动态IP 需配合DDNS服务 无需关心,客户端主动连接
推荐度 家庭用户首选 企业/开发者/无公网IP用户首选

对于绝大多数个人用户和小型应用,端口映射 是最直接、成本最低的方案,如果你是开发者,或者网络环境复杂,frp 内网穿透 则提供了极大的灵活性和便利性。

分享:
扫描分享到社交APP
上一篇
下一篇