一个关于路由器端口转发的问题

2021-12-09 00:05:59 +08:00
 movq

我的 WAN 口具有公网 IP ,记为 A.B.C.D

局域网有一台机器 M ,记为 192.168.1.2

这台机器的 3306 端口有一个 mysql 服务在监听,已经开启所有 IP 都可以访问。

我设置了如下的端口转发:

A.B.C.D:8888 -> 192.168.1.2:3306

这样的话,我使用非局域网的其它机器,可以通过 A.B.C.D:8888 连接到机器 M 上面的 mysql

但是我在 M 机器本机上面,使用 datagrip ,根据 A.B.C.D:8888 却无法连接到 mysql

使用telnet A.B.C.D:8888,无反应。使用telnet localhost:3306有反应

所以只能使用 localhost:3306 来连接

这是为什么???

2000 次点击
所在节点    程序员
8 条回复
fzinfz
2021-12-09 00:38:14 +08:00
关键词:Hairpin NAT
flynaj
2021-12-09 02:08:11 +08:00
没有回环 nat
flynaj
2021-12-09 02:10:07 +08:00
可以配置路由器的回环 nat,或者使用 hosts 文件,直接解析成内网 IP
movq
2021-12-09 08:37:43 +08:00
我设置的端口转发:A.B.C.D:8888 -> 192.168.1.2:3306

如果修改 hosts 文件,把 A.B.C.D 解析到 192.168.1.2 ,由于端口实际上没解析,所以实际上访问了 A.B.C.D:3306 ,这样应该不行吧??

至于路由器,我没有软路由,里面没有回环 NAT 配置文件。

有没有其它办法在本地配置呢?我的电脑是 macOS 操作系统
AllenHua
2021-12-09 08:51:48 +08:00
既然是在内网使用,绕一大圈反而效率低下,直接用 nginx 把 A.B.C.D:8888 proxy_pass 到 localhost:3306 ?
JamesR
2021-12-09 10:08:04 +08:00
内外网端口映射最好是同一个端口,很多程序都能免去很多莫名其妙的链接问题。建议修改 mysql 的默认端口,一劳永逸地解决问题。
unknowsll
2021-12-09 11:58:57 +08:00
普通的路由器应该都只是单向,没办法做双向的,就是无法实现 wan/lan------lan 都能访问,所以内网就用内部地址,外网就用外部地址吧,或者参照楼上表哥的意见,直接用 nginx 把 A.B.C.D:8888 proxy_pass 到 localhost:3306 这个也是可以的。
lff0305
2021-12-09 20:28:43 +08:00
端口回流,一般的路由器不支持,需要软路由,比如 ROS ,通过 dst nat address type 来配置

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX