在我拥有的 Raspberry PI 上,无论我在 上运行什么http://localhost:8080
,都自动对我本地网络上位于http://192.168.0.xxx:8080
或的其他计算机可见http://pi.local:8080
。
这不会发生在我的 Mac 上。如果我正在测试在 上运行的 Angular 应用程序,则本地网络上的其他计算机将看不到该http://localhost:4200
应用程序。http://mymac.local:4200
我只想将 localhost 端口暴露给我的 LAN,而不是暴露给世界其他地方。然而,当我寻找这个问题的解决方案时,我发现的只是 之类的工具ngrok
,这不是我想要的。我并不想让我的应用程序对全世界可见,只是让我的 LAN 可见。
我的 macOS 防火墙没有打开,所以据我所知,特定端口被主动阻止没有问题。
更新:
我发现的临时解决方案是这样的:
browser-sync start --proxy "localhost:4200" --no-open --no-ghost-mode --no-notify --no-snippet --no-ui --port 4200
browser-sync
但是,它是专门面向 HTTP 的,并试图弄乱以多种方式提供的内容,因此--no-xxx
我使用了所有标志。我想找到一个类似的、更简单的解决方案,以纯粹中立的方式转发 TCP 流量。
不,你不知道。与所有其他现代操作系统一样,Linux 具有您正在收听的位置的概念。这称为接口绑定。Windows、Darwin、Linux 和所有其他现代操作系统都支持这一点,它基本上让您指定要收听的接口。也许你想让 Apache 监听 203.0.113.1,nginx 监听 203.0.113.2?如果是这样,您可以在配置文件中指定它。
当您希望某些内容仅在本地可用时,通常使用此方法:您告诉它绑定到 127.0.0.1 或 ::1,这是环回地址。这将无法从任何其他主机访问,因为它仅绑定到环回接口。
还有一个包罗万象的东西:0.0.0.0,或者 :: 用 IPv6 的说法:绑定任何可用的接口。这将监听所有启用的接口,包括环回和其他接口。
简而言之:弄清楚您正在使用的服务如何定义网络接口绑定,并对其进行修改以适应。
如果运行的服务是专门绑定使用loopback作为监听接口的,比如硬编码并且你不控制源头。例如,动态简单的 ssh 隧道。
使用 socat https://stackoverflow.com/questions/16808543/install-socat-on-mac
查看帮助文档,您可以选择协议、要绑定的接口等,以及许多其他内容。
SOCAT 摇滚……
socat TCP-LISTEN:8080,fork TCP:127.0.1:8888