我的 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 来连接
这是为什么???
1
fzinfz 2021-12-09 00:38:14 +08:00 1
关键词:Hairpin NAT
|
2
flynaj 2021-12-09 02:08:11 +08:00 via Android
没有回环 nat
|
3
flynaj 2021-12-09 02:10:07 +08:00 via Android 1
可以配置路由器的回环 nat,或者使用 hosts 文件,直接解析成内网 IP
|
4
movq OP 我设置的端口转发: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 操作系统 |
5
AllenHua 2021-12-09 08:51:48 +08:00 via iPhone
既然是在内网使用,绕一大圈反而效率低下,直接用 nginx 把 A.B.C.D:8888 proxy_pass 到 localhost:3306 ?
|
6
JamesR 2021-12-09 10:08:04 +08:00
内外网端口映射最好是同一个端口,很多程序都能免去很多莫名其妙的链接问题。建议修改 mysql 的默认端口,一劳永逸地解决问题。
|
7
unknowsll 2021-12-09 11:58:57 +08:00
普通的路由器应该都只是单向,没办法做双向的,就是无法实现 wan/lan------lan 都能访问,所以内网就用内部地址,外网就用外部地址吧,或者参照楼上表哥的意见,直接用 nginx 把 A.B.C.D:8888 proxy_pass 到 localhost:3306 这个也是可以的。
|
8
lff0305 2021-12-09 20:28:43 +08:00 via Android
端口回流,一般的路由器不支持,需要软路由,比如 ROS ,通过 dst nat address type 来配置
|