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 端口就可以, 请问有什么技术可以实现这样子的功能吗,各位大佬们
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 |
2
diguoemo 2020-06-11 12:49:32 +08:00 via Android
sokit 里面带的转发器功能可以用,去找个 sokit win32 版本
|
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 |
4
imn1 2020-06-11 13:22:03 +08:00
我怎么看看看着,B 就像个 proxy ?
你这里只写了 AB 是相同局域网,没写 B 有没有开放给 A 访问呢 |
5
Saurichthys OP |
6
tomczhen 2020-06-11 14:35:43 +08:00 via Android
HTTP 反向代理可以用 IIS 的 ARR 模块来做。如果是基于 IP 的路由,Windows 也有路由功能模块,开启配置就行。
建议是如果仅仅因为路由表问题,那么调整本地路由表更简单。如果仅需要代理 HTTP 协议,那么用 IIS 反代更简单。 |
7
Jirajine 2020-06-11 14:44:52 +08:00 via Android
@Saurichthys Windows 也有 nat 和路由转发功能,具体怎么打开你需要查一下文档。
或者如果能接受的话用传输层转发,随便什么反代、端口转发工具都可以。 |
8
Saurichthys OP @tomczhen 你好大佬,这应该不是反向代理 A 服务器只能请求 C 服务器的地址( 10.72:74:74:8888 ),而不能通过请求直接请求 B 服务器达到效果
|
9
imn1 2020-06-11 14:57:14 +08:00
如果你能操控 B,事情很简单,把 C:8888 监听转发到 B:某个端口对外监听,一般隧道工具就可以,高级点就上面各位说的添加路由(这个对我超纲),所以我说 B 像个 proxy 。反正你现在就缺在 B 上设置一个监听,并把数据转发给 C,就是这个意思
|
10
Saurichthys OP @imn1 大佬的意思还是 从 A 请求 B 然后实现 A 请求 C 的效果,我的意思是要实现 A 请求 C 实现 A 请求 B 的效果,协议是 TCP 协议,另外发现有一个 v2 文章就是讨论这个,但是没有结果,https://www.v2ex.com/amp/t/421219
|
11
Xusually 2020-06-11 15:03:50 +08:00
B 上开个反向代理就可以了,nginx 之类的,几行配置
|
12
Saurichthys OP @Xusually 你好,A 是不直接请求 B 的,在 B 开一个反向代理行得通吗
|
13
Xusually 2020-06-11 15:21:00 +08:00
哦,仔细看了一下,你需要的是在 A 本身可能代码不改动的情况下,自己劫持自己的访问,把对 C 的访问,自己更改成对 B 的中转访问,B 获取后给 A 。
那么,B 上面还是需要一个反代,或者转发。 A 上面需要对网络做处理,实现的方式也很多呀,最简单的还是在 A 上开个代理服务器,过滤 C 的请求,单独代理 感觉楼主你这是要共享某些鉴权啊。。。手动狗头.jpg |
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 在墙外,不就跟你的需求一样么?你搞定协议问题就行了 |
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 |
16
Saurichthys OP |
17
takemeaway 2020-06-11 17:17:08 +08:00
A 不能访问 B ? 局域网都不能访问? 你这不是逗吗?
|
18
imn1 2020-06-11 17:32:29 +08:00
@takemeaway #17
他的意思 A 上面的某个(些)软件已经写死了,是直接请求访问 C,他现在没法改这个软件请求,只能用工具绕路 @Saurichthys #16 基本 socks 类的 proxy 软件都能做全局 proxy,不过需要带一个 filter (例如 pac )把其他请求排除 |
19
mingl0280 2020-06-11 17:56:06 +08:00 via Android
windows 非服务器防火墙配置下转发规则。
winserver 请打开路由和远程访问功能配一下 NAT. |
20
mingl0280 2020-06-11 17:56:25 +08:00 via Android
另外还有 proxifier 可以用
|