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

2020-06-11 12:07:03 +08:00
 Saurichthys

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 端口就可以, 请问有什么技术可以实现这样子的功能吗,各位大佬们

3876 次点击
所在节点    Windows
20 条回复
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
2020-06-11 12:49:32 +08:00
sokit 里面带的转发器功能可以用,去找个 sokit win32 版本
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
2020-06-11 13:22:03 +08:00
我怎么看看看着,B 就像个 proxy ?
你这里只写了 AB 是相同局域网,没写 B 有没有开放给 A 访问呢
Saurichthys
2020-06-11 14:31:48 +08:00
@laoyur 大佬试了不行唉
@Jirajine 尴尬了 都是 windows server 服务器
@imn1 A 和 B 都是同个局域网的,都是可以自由访问的
tomczhen
2020-06-11 14:35:43 +08:00
HTTP 反向代理可以用 IIS 的 ARR 模块来做。如果是基于 IP 的路由,Windows 也有路由功能模块,开启配置就行。

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

感觉楼主你这是要共享某些鉴权啊。。。手动狗头.jpg
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
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
2020-06-11 17:11:20 +08:00
@Xusually 哈哈是的 方便某些操作而已啦
@imn1 现在就是要劫持自己的请求,请问劫持请求这块有什么工具
@yongbeili 大佬 就是 A 不能直接访问 B 啦
takemeaway
2020-06-11 17:17:08 +08:00
A 不能访问 B ? 局域网都不能访问? 你这不是逗吗?
imn1
2020-06-11 17:32:29 +08:00
@takemeaway #17
他的意思 A 上面的某个(些)软件已经写死了,是直接请求访问 C,他现在没法改这个软件请求,只能用工具绕路

@Saurichthys #16
基本 socks 类的 proxy 软件都能做全局 proxy,不过需要带一个 filter (例如 pac )把其他请求排除
mingl0280
2020-06-11 17:56:06 +08:00
windows 非服务器防火墙配置下转发规则。
winserver 请打开路由和远程访问功能配一下 NAT.
mingl0280
2020-06-11 17:56:25 +08:00
另外还有 proxifier 可以用

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

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

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

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

© 2021 V2EX