我目前正在运行一台 Ubuntu Server 计算机,该计算机使用隧道连接运行 OpenVPN 客户端。尽管我希望网络数据通过 VPN 隧道传输,但我仍然希望使用端口转发从公共网络访问该计算机(以允许在离家可访问的计算机上运行 Web 服务器)。
使用其他论坛上的一些帖子,我能够设置一些自定义网络表和路由,以允许特定端口上的某些网络通过我的常规网络接口。这工作得很好,我的所有网络活动现在默认通过 VPN 客户端,我指定的端口上的网络活动现在通过我的物理网络接口,允许我打开 Web 浏览器并使用端口 80 浏览此机器。
但是,我目前面临的问题是,有了这些自定义表和路由,我似乎无法再在同一网络上本地浏览到计算机(例如 192.168.0.110)(例如从 192.168.0.27)。当我尝试打开 Web 浏览器并浏览到计算机上的端口 80 时,一段时间后会收到超时提示。有趣的是,当我使用端口转发使用我的公共 IP 地址时,我能够很好地访问端口 80 上的计算机。当我删除自定义表设置或“无 VPN”访问的自定义路由时,我能够再次本地访问计算机,但这会中断从公共网络的访问。
我一直试图在网上寻找有类似问题的人,但似乎找不到与我所面临的问题相关的任何信息。
我感觉,自从我添加了这些自定义表和路由后,Ubuntu 机器的响应被重定向到默认网关,而不是直接重定向到向 Ubuntu 机器发送请求的计算机。
这是我的 mangle 表配置: 截屏
我使用这些命令来配置表的规则和路由: 截屏
无论如何,您是否知道我在这里做错了什么以及如何实现从 LAN 内部和外部访问端口 80 上的机器?
TLDR;我使用自定义表和路由允许使用默认网关路由某些端口,以便即使 VPN 客户端正在计算机上运行,也能访问该计算机。由于某种原因,即使可以使用我的外部 IP 地址和端口转发来使用此端口,也无法在本地访问端口 80 上的计算机。
答案1
好吧,我终于能够解决这个问题了......
由于我能够创建一种只能从 LAN 访问的 Web 服务器的情况和一种只能从外部网络访问的情况,因此我开始思考是否有办法以另一种方式结合这些场景。
我使用 Nginx 作为 Web 服务器,发现可以在多个端口上运行 Web 服务器!因此,我编辑了 Nginx 配置,使其在端口 80 和 8090 上运行,并仅对端口 8090 应用了 OP 中描述的表、规则和路由。然后,我更新了路由器的端口转发规则,将外部端口 80 转发到 LAN 上的端口 8090。我很高兴地发现,这完全解决了问题,因为我现在能够从 LAN 和端口 80 访问端口 80 上的服务器,因为它将其转发到包含“无 VPN”规则的端口 8090。
我认为有更好的方法来解决这个问题,但目前我对当前的解决方案感到满意。