用 iptable 做这样的转发能实现么

2018-08-08 09:00:40 +08:00
 yingtl
三台机器 Client_1 VPS_1 VPS_2
VPS_1 设置到达它的 PORT_A 数据 转发到 VPS_2:PORT_B, 但是不修改 src
VPS_2:PORT_B 收到数据后 看到的数据包的 src 是 Client_1

这种做法在公网上能实现么

谢谢
4371 次点击
所在节点    宽带症候群
26 条回复
yingtl
2018-08-09 12:27:00 +08:00
@Austing #17 谢谢。我想到的用法是用来骗墙的,现在不都是封回程数据包么,如果伪装 src 数据不就能回去了么。
ShadowStar
2018-08-09 15:08:49 +08:00
@Austing 再 Hook 修改一次?
按照题主的描述,Client_1 是如何得知自己访问 VPS_1:PORT_A 的链接实际访问的是 VPS_2:PORT_B 的呢?
Client_1 只是看到了一个 VPS_2:PORT_B 访问自己的报文,凭什么修改啊?

VPS_2 也无法得知 Client_1 的报文是从 VPS_1:PORT_A 修改过的啊。
VPS_2 也只是看到了 Client_1 访问自己的报文。

你所说的 Hook 修改,要不就是访问是完全固定的,只存在 3 台主机,并且关系固定;要不就需要另外的实时消息通知机制。
Austing
2018-08-10 08:00:12 +08:00
@ShadowStar
您真的了解 TCP/IP 和 netfilter?

没有任何操作的下 Client_1 和 VPS_2 当然不知道, 但是这和我说的有什么关系吗?

题主所说的不就是三台主机的固定关系? 即便不固定, Client 的处理也不会说只能针对一个地址.
即便不针对地址, 同样可以 connmark 一个特定状态或者数据包标识来标记用来匹配.


@yingtl 如果可以伪装 src 确实可以达到此目的, 但是你要想要比较满意的达到这个目的, 成本不会亚于你多买几台机器的.
yingtl
2018-08-10 09:03:03 +08:00
@Austing #19 代码改起来是非常简单的, 就是把发送的部分改成用 raw socket 发送, 自己加上伪造的 ip 头.
问题是按照你说的常见的 vps 构架都过滤这种情况了
ShadowStar
2018-08-10 10:32:12 +08:00
@Austing 10 年前我就是做某国产防火墙的内核开发的,用的就是 Linux 的 netfilter 基础,写的就是 netfilter 模块,当时用的内核版本还是 2.6.24 呢。
目前,我是做 Cavium 平台数据通信安全产品的底层开发。天天写代码玩的就是网络数据。

connmark 的前提是要双向命中相同的 conntrack,按照正向 Client_1:Rand_Port -> VPS_1:Port_A ;反向 VPS_2:Port_B -> Client_1:Rand_Port 这个会话,在 Client_1 上根本命中不了同一个 conntrack !
Themyth
2019-02-08 11:15:09 +08:00
无意中看到这个,我大概知道楼主想干什么
楼主是不是想在强 内发送数据包出去,用一台 VPS 勾住然后伪造 src port 发到强 外?

Client_1:Rand_Port -> VPS_1:Port_A ;返程 VPS_2:Port_B -> Client_1:Rand_Port 是肯定不行的。
但是 Client_1:Rand_Port -> VPS_1:Port_A ;返程 VPS_2:Port_A -> Client_1:Rand_Port 是可行的。

可行的前提是,你的那台返回数据的 VPS,必须加白名单,这个难度相当大,从最开始的服务商,到机房,到上游运营商都允许才行,成本很高,我以前的解决方案是购买自己的 ASN 和 IP space,然后和机房做 bgp session。

如果有兴趣,我们可以交流

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

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

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

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

© 2021 V2EX