在我拥有的 Raspberry PI 上,无论我运行什么,比如说,http://localhost:8080
都会自动被我本地网络上的其他计算机看到http://192.168.0.xxx:8080
或http://pi.local:8080
。
我的 Mac 上不会发生这种情况。如果我测试在 上运行的 Angular 应用http://localhost:4200
,该应用将不是http://mymac.local:4200
可以被本地网络上的其他计算机看到。
我所要做的就是将本地主机端口暴露给我的 LAN,不是对世界其他地方来说。然而,当我寻找这个问题的解决方案时,我找到的都是这样的工具ngrok
,这不是我想要的。我并不想让我的应用程序对全世界可见,只是我的局域网可见。
我的 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 流量。
答案1
如果正在运行的服务明确地使用环回作为监听接口,例如硬编码,并且您无法控制源。例如动态直接使用 ssh 隧道。
使用 socat https://stackoverflow.com/questions/16808543/install-socat-on-mac
查看帮助文档,您可以选择协议、要绑定的接口等以及许多其他内容。
SOCAT 摇滚....
socat TCP-LISTEN:8080,fork TCP:127.0.1:8888
答案2
在我拥有的 Raspberry PI 上,无论我运行什么,比如 http://localhost:8080,都会自动被我本地网络上的其他计算机看到http://192.168.0.xxx:8080或者http://pi.local:8080。
不,你不需要。Linux 和所有其他现代操作系统一样,有一个“你在哪里听”的概念。这叫做接口绑定。Windows、Darwin、Linux 和所有其他现代操作系统都支持此功能,它本质上让您指定要监听的接口。也许您希望 Apache 监听 203.0.113.1,而 nginx 监听 203.0.113.2?如果是这样,您可以在配置文件中指定这一点。
这通常用于当你想做某事时仅有的本地可用:您告诉它绑定到 127.0.0.1 或 ::1,这是环回地址。这将无法从任何其他主机访问,因为它仅绑定到环回接口。
还有一个全称:0.0.0.0,或 IPv6 用语中的 :::绑定任何可用接口。这将监听所有启用的接口,包括环回接口和其他接口。
简而言之:弄清楚您使用的服务如何定义网络接口绑定,并进行修改以适应。