V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
movq
V2EX  ›  程序员

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

  •  
  •   movq · 163 天前 · 1202 次点击
    这是一个创建于 163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的 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 来连接

    这是为什么???

    8 条回复    2021-12-09 20:28:43 +08:00
    fzinfz
        1
    fzinfz  
       163 天前   ❤️ 1
    关键词:Hairpin NAT
    flynaj
        2
    flynaj  
       163 天前 via Android
    没有回环 nat
    flynaj
        3
    flynaj  
       163 天前 via Android   ❤️ 1
    可以配置路由器的回环 nat,或者使用 hosts 文件,直接解析成内网 IP
    movq
        4
    movq  
    OP
       162 天前
    我设置的端口转发: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
        5
    AllenHua  
       162 天前 via iPhone
    既然是在内网使用,绕一大圈反而效率低下,直接用 nginx 把 A.B.C.D:8888 proxy_pass 到 localhost:3306 ?
    JamesR
        6
    JamesR  
       162 天前
    内外网端口映射最好是同一个端口,很多程序都能免去很多莫名其妙的链接问题。建议修改 mysql 的默认端口,一劳永逸地解决问题。
    unknowsll
        7
    unknowsll  
       162 天前
    普通的路由器应该都只是单向,没办法做双向的,就是无法实现 wan/lan------lan 都能访问,所以内网就用内部地址,外网就用外部地址吧,或者参照楼上表哥的意见,直接用 nginx 把 A.B.C.D:8888 proxy_pass 到 localhost:3306 这个也是可以的。
    lff0305
        8
    lff0305  
       162 天前 via Android
    端口回流,一般的路由器不支持,需要软路由,比如 ROS ,通过 dst nat address type 来配置
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1608 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:16 · PVG 08:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.