V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
weishao666
V2EX  ›  问与答

求某个内网 ip 映射到 localhost 的方法

  •  
  •   weishao666 · 2023-12-08 17:27:29 +08:00 · 1687 次点击
    这是一个创建于 382 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如: http://10.16.22.23:3001 映射到 http://localhost:3001

    迫于屎山代码,代码里边很多地方写死了接口的访问路径,由于某些原因,暂时不便修改。本地开发不方便,总需要新切分支,我能不能找个工具直接代理映射下,nginx 理论上应该不行?我试了改 host 不行

    19 条回复    2023-12-11 04:35:57 +08:00
    rwecho
        1
    rwecho  
       2023-12-08 19:04:46 +08:00
    为啥修改 hosts 不行? 为啥 nginx 也不行?感觉你有其他信息
    Chad0000
        2
    Chad0000  
       2023-12-08 19:15:20 +08:00 via iPhone
    或者可以试试改理由?比如重定向到你的内网 IP 。
    bobryjosin
        3
    bobryjosin  
       2023-12-08 19:15:20 +08:00
    hosts 只能作用域名,你确定目标地址是域名?如果是 ip ,你需要在上级路由器上做 dstnat
    danbai
        4
    danbai  
       2023-12-08 19:34:53 +08:00 via Android
    用 gost 做个端口转发就行监听本地 3001 转发到 10.16.22.23:3001
    danbai
        5
    danbai  
       2023-12-08 19:37:12 +08:00 via Android
    看反了,可以走代理然后重定向 10.16.22.23 的请求到本地 3001
    danbai
        6
    danbai  
       2023-12-08 19:38:33 +08:00 via Android
    ik
        7
    ik  
       2023-12-08 19:54:31 +08:00 via iPhone
    gost -L tcp://127.0.0.1:3001/10.16.22.23:3001
    falcon05
        8
    falcon05  
       2023-12-08 20:01:21 +08:00 via iPhone
    nginx 可以啊,就是简单的反代。
    rrfeng
        9
    rrfeng  
       2023-12-08 20:15:38 +08:00 via Android   ❤️ 1
    目标是 IP ?直接把 IP 配到 lo 上呗……
    ip add 10.xxx lo

    楼上都在绕啥呢…
    rrfeng
        10
    rrfeng  
       2023-12-08 20:16:44 +08:00 via Android
    哦然后还要让你的本地服务端程序监听 0.0.0.0 或者指定这个 IP 。
    gamexg
        11
    gamexg  
       2023-12-08 21:02:13 +08:00
    @rrfeng +1
    最简单的直接给本机网卡加上 ip 。
    Corybyte
        12
    Corybyte  
       2023-12-08 23:26:32 +08:00 via Android
    用 iptables 把 127.0.0.1 映射目标 ip ?
    msg7086
        13
    msg7086  
       2023-12-09 12:29:38 +08:00
    像上面说的,把地址加进 localhost 网卡就行了。
    同理如果你想屏蔽软件访问某个 IP ,除了用 iptable 锁以外也可以把 IP 加进 lo 达到类似的目的。
    laminux29
        14
    laminux29  
       2023-12-09 12:57:26 +08:00
    nginx 、gost 、socat 这类代理与转发的方法才是正解,因为它实现了访问地址的 IP 、端口号的解耦。

    楼上的路由、给网卡添加 IP 的方法,能解决问题,但仍然具有一定程度的耦合,通用性比代理转发方案要差一些。
    rrfeng
        15
    rrfeng  
       2023-12-10 12:43:49 +08:00 via Android
    @laminux29 正解个屁,第一步要拦截发往目标 IP 的请求,nginx 你告诉我怎么做,socat 怎么做?
    laminux29
        16
    laminux29  
       2023-12-10 13:19:09 +08:00
    @rrfeng

    1.假设楼主的 localhost 在内网的 IP 为 172.16.0.1 。

    2.在 10.16.22.23 上面架设 nginx 代理或 socat 代理,代理源地址 10.16.22.23:3001 ,目标地址 172.16.0.1:3001 。

    3.nginx 代理的配置,以及 socat 的代理命令行,直接问 GPT 就行了。
    rrfeng
        17
    rrfeng  
       2023-12-10 18:12:35 +08:00 via Android
    @laminux29 他要能控制 10.16.22.23 干嘛还要劫持回本机??
    或者 10.16.22.23 是生产服务器,你把生产干了转发到你本地??
    laminux29
        18
    laminux29  
       2023-12-11 00:44:16 +08:00
    @rrfeng

    我之前也有这个疑问,我是再三确认了楼主的需求,他的意思是不方便修改程序里的硬编码的访问路径,而并不是说不方便控制 10.16.22.23 。

    我猜测,有可能是他的同事水平菜,硬编码了访问接口 IP ,他又不想求同事改成配置文件,但他又要去测试,所以就遇到了这个问题。
    rrfeng
        19
    rrfeng  
       2023-12-11 04:35:57 +08:00 via Android
    @laminux29 👍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1520 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:03 · PVG 01:03 · LAX 09:03 · JFK 12:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.