自从路由器(Airport)开了RADIUS认证以及使用macOS sever进行管理之后,路由器上的端口映射就只能通过macOS上运行的Server.app进行端口管理了。
然而Server.app只能分配端口给Server主机本体,也就是服务端口可以映射到作为服务器的localhost,而内网下的其他机器是拿不到端口的。然而如果想要给内网其他机器进行端口映射,只能另外找解决方案。
不过还好经过漫长的研究,试过了ssh端口转发,还有各种代理都失败了。最后在某人的指导下,发现了可以通过socat进行端口映射。
当然需要安装socat,linux下可以直接搜软件包,mac可以下可以用brew装。具体就不说了。
假设服务器已经设置好对外开启的端口,然后需要对内网映射的机器IP和端口是192.168.1.123:1234的话,只需要在服务器上执行这个命令:
socat TCP-LISTEN:1234,fork TCP:192.168.1.123:1234
这样服务器就会监听内网192.168.1.123的1234端口,并转发TCP数据作为本机端口1234。于是外网就可以通过1234这个端口访问到内网对应机器的对应端口上。
当然这个方法可以适用于所有需要服务器进行内网设备端口转发的情况,只要服务器保持这个命令在运行,那么转发就应该一直有效。