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

请问各位大佬, windows 下可以实现这种 ip 转发的效果吗

  •  
  •   Saurichthys · 2020-06-11 12:07:03 +08:00 · 4118 次点击
    这是一个创建于 1631 天前的主题,其中的信息可能已经有所发展或是发生改变。

    A: 10.10.10.11 B: 10.10.10.12 C: 10.72:74:74

    服务器 A 和 B 是相同的局域网,B 可以通过 C 一个端口(比如 8888)进行 TCP 访问,且 B 只能访问 C,C 不能主动访问 B,A 和 C 是不相通的。

    要实现在 A 服务器中访问 C 服务器的地址请求,实现 10.10.10.11 -> 10.72:74:74,访问地址为 http:// 10.72:74:74:8888/api 。 请问 A 服务器如何监听请求的 ip 为 10.72:74:74,把 10.72:74:74 转换成请求 10.10.10.12 的 8888 端口就可以, 请问有什么技术可以实现这样子的功能吗,各位大佬们

    20 条回复    2020-06-11 17:56:25 +08:00
    laoyur
        1
    laoyur  
       2020-06-11 12:34:56 +08:00
    要不试试在 A 机器上添加静态路由?

    route add 10.72:74:0 MASK 255.255.255.0 10.10.10.12
    diguoemo
        2
    diguoemo  
       2020-06-11 12:49:32 +08:00 via Android
    sokit 里面带的转发器功能可以用,去找个 sokit win32 版本
    Jirajine
        3
    Jirajine  
       2020-06-11 13:01:39 +08:00
    Windows 不清楚,Linux 系统你可以这样做:
    A 上添加路由:
    ip route add 10.72.74.74 via 10.0.0.12
    B 上打开转发和 masquerade
    sysctl -w net.ipv4.ip_forward=1
    iptables -I FORWARD -J ACCEPT
    iptables -t nat -A POSTROUTING -i <与 A 相连的接口名称> -J MASQUERADE
    imn1
        4
    imn1  
       2020-06-11 13:22:03 +08:00
    我怎么看看看着,B 就像个 proxy ?
    你这里只写了 AB 是相同局域网,没写 B 有没有开放给 A 访问呢
    Saurichthys
        5
    Saurichthys  
    OP
       2020-06-11 14:31:48 +08:00
    @laoyur 大佬试了不行唉
    @Jirajine 尴尬了 都是 windows server 服务器
    @imn1 A 和 B 都是同个局域网的,都是可以自由访问的
    tomczhen
        6
    tomczhen  
       2020-06-11 14:35:43 +08:00 via Android
    HTTP 反向代理可以用 IIS 的 ARR 模块来做。如果是基于 IP 的路由,Windows 也有路由功能模块,开启配置就行。

    建议是如果仅仅因为路由表问题,那么调整本地路由表更简单。如果仅需要代理 HTTP 协议,那么用 IIS 反代更简单。
    Jirajine
        7
    Jirajine  
       2020-06-11 14:44:52 +08:00 via Android
    @Saurichthys Windows 也有 nat 和路由转发功能,具体怎么打开你需要查一下文档。
    或者如果能接受的话用传输层转发,随便什么反代、端口转发工具都可以。
    Saurichthys
        8
    Saurichthys  
    OP
       2020-06-11 14:52:55 +08:00
    @tomczhen 你好大佬,这应该不是反向代理 A 服务器只能请求 C 服务器的地址( 10.72:74:74:8888 ),而不能通过请求直接请求 B 服务器达到效果
    imn1
        9
    imn1  
       2020-06-11 14:57:14 +08:00
    如果你能操控 B,事情很简单,把 C:8888 监听转发到 B:某个端口对外监听,一般隧道工具就可以,高级点就上面各位说的添加路由(这个对我超纲),所以我说 B 像个 proxy 。反正你现在就缺在 B 上设置一个监听,并把数据转发给 C,就是这个意思
    Saurichthys
        10
    Saurichthys  
    OP
       2020-06-11 14:59:55 +08:00
    @imn1 大佬的意思还是 从 A 请求 B 然后实现 A 请求 C 的效果,我的意思是要实现 A 请求 C 实现 A 请求 B 的效果,协议是 TCP 协议,另外发现有一个 v2 文章就是讨论这个,但是没有结果,https://www.v2ex.com/amp/t/421219
    Xusually
        11
    Xusually  
       2020-06-11 15:03:50 +08:00
    B 上开个反向代理就可以了,nginx 之类的,几行配置
    Saurichthys
        12
    Saurichthys  
    OP
       2020-06-11 15:06:13 +08:00
    @Xusually 你好,A 是不直接请求 B 的,在 B 开一个反向代理行得通吗
    Xusually
        13
    Xusually  
       2020-06-11 15:21:00 +08:00
    哦,仔细看了一下,你需要的是在 A 本身可能代码不改动的情况下,自己劫持自己的访问,把对 C 的访问,自己更改成对 B 的中转访问,B 获取后给 A 。
    那么,B 上面还是需要一个反代,或者转发。
    A 上面需要对网络做处理,实现的方式也很多呀,最简单的还是在 A 上开个代理服务器,过滤 C 的请求,单独代理

    感觉楼主你这是要共享某些鉴权啊。。。手动狗头.jpg
    imn1
        14
    imn1  
       2020-06-11 15:34:34 +08:00
    @Saurichthys #10
    还是 proxy,Sorry,我只懂 http,其他协议你自己举一反三吧
    1.是改 A 的 DNS 请求,把 C 指向 B,你这个情况好像不适用
    2.接管 A 的请求,把 C 的请求指向 B,一是 redir 工具,二是 proxy 工具
    原则都是自我劫持 A 的请求,遇到 filter 指定的就更改目标 host,当然 B 上面要有相关监听端口转发

    C 是 google,A 在墙内,B 在墙外,不就跟你的需求一样么?你搞定协议问题就行了
    yongbeili
        15
    yongbeili  
       2020-06-11 16:19:09 +08:00
    b 上管理员执行
    netsh interface portproxy add v4tov4 listenaddress=10.10.10.12 listenport=8888 connectaddress=10.72.74.74 connectport=74
    然后 a 直接访问 10.10.10.12:8888
    Saurichthys
        16
    Saurichthys  
    OP
       2020-06-11 17:11:20 +08:00
    @Xusually 哈哈是的 方便某些操作而已啦
    @imn1 现在就是要劫持自己的请求,请问劫持请求这块有什么工具
    @yongbeili 大佬 就是 A 不能直接访问 B 啦
    takemeaway
        17
    takemeaway  
       2020-06-11 17:17:08 +08:00
    A 不能访问 B ? 局域网都不能访问? 你这不是逗吗?
    imn1
        18
    imn1  
       2020-06-11 17:32:29 +08:00
    @takemeaway #17
    他的意思 A 上面的某个(些)软件已经写死了,是直接请求访问 C,他现在没法改这个软件请求,只能用工具绕路

    @Saurichthys #16
    基本 socks 类的 proxy 软件都能做全局 proxy,不过需要带一个 filter (例如 pac )把其他请求排除
    mingl0280
        19
    mingl0280  
       2020-06-11 17:56:06 +08:00 via Android
    windows 非服务器防火墙配置下转发规则。
    winserver 请打开路由和远程访问功能配一下 NAT.
    mingl0280
        20
    mingl0280  
       2020-06-11 17:56:25 +08:00 via Android
    另外还有 proxifier 可以用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5368 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:48 · PVG 13:48 · LAX 21:48 · JFK 00:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.