用 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

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

谢谢
4200 次点击
所在节点    宽带症候群
26 条回复
trepwq
2018-08-08 09:07:25 +08:00
client-1 会丢弃 vps2 的 tcp 数据包的吧
yingtl
2018-08-08 09:09:54 +08:00
@trepwq 用 UDP, 端口统统打开
mt7620
2018-08-08 09:10:32 +08:00
prerouting 做 DNAT 试试
mt7620
2018-08-08 09:15:35 +08:00
VPS1 上开来一个
iptables -t nat -A PREROUTING -p tcp --dport 12306 -j DNAT --to-destination 222.222.222.222:12315
oott123
2018-08-08 09:17:23 +08:00
听说很多机房防火墙会丢掉 src 不对的包。
dorothyREN
2018-08-08 09:17:49 +08:00
这。。。随便写个转发就行了吧
ThirdFlame
2018-08-08 09:25:23 +08:00
这不就是 目的地址转换么?
yingtl
2018-08-08 09:51:24 +08:00
@mt7620 我这里试验的是还要加一条 SNAT 不然数据到达不了, 如同 @oott123 所讲, 某个环节过滤掉了
ivyliner
2018-08-08 10:21:40 +08:00
如果 VPS_2 可以直接访问 Client 的话, 可以直接添加路由表就好了.
ShadowStar
2018-08-08 10:41:11 +08:00
和 TCP/UDP 无关,和什么机房的防火墙也无关。
对于 Client 来说,发送的五元组信息是 Client_1:Rand_Port -> VPS_1:Port_A,接收到的五元组信息是 VPS_2:Port_B -> Client_1:Rand_Port,socket 根本对不上。
LGA1150
2018-08-08 11:14:51 +08:00
@oott123 正解
@ShadowStar 其实 Client 端也可以 DNAT
yingtl
2018-08-08 12:13:57 +08:00
@ShadowStar UDP 监听的话就不用在乎这个了
Austing
2018-08-09 03:15:28 +08:00
@ShadowStar
@yingtl
和发送回复对不对的上以及 UDP 无关.
了解一下 BCP 38/RFC 2827.
如果 VPS_A 直接 DNAT 到 VPS_B 不不改变 SRC, 那么理论上就是伪造发送源进行 IP 欺骗, 99% 的 VPS 都不可能没开启 uRPF 和 ACL 来防止伪造的.
并且很多不是自有 transit 的服务商在其上游就已经被开启了 uRPF, 你可以直接在 VPS_A 尝试用 client 或其他任意 IP 直接向 B/其他服务器发包看一下, 然后接受 server tcpdump 抓包一下, 我相信对面是根本收不到的.
Austing
2018-08-09 03:18:17 +08:00
如果你想做到不改变发送源, 那你可以在 VPS_A 和 VPS_B 之间另外建立一条隧道来实现.
纯公网基本不太可能, 如果你不缺钱, 那你可以找没有开 uRPF 的机房或者自己买条 transit 做 bgp 吧 :)
ShadowStar
2018-08-09 04:26:56 +08:00
@yingtl 胡扯,你以为 UDP 就不需要 IP 了?
ShadowStar
2018-08-09 04:28:20 +08:00
@Austing 你说的这些都是外围的安全防护措施,当然可以有各种的方式。
我说的是最基础的 TCP/IP 通信基础,在什么防护措施都没有的情况下,本身就无法双向通信。
Austing
2018-08-09 06:22:33 +08:00
@ShadowStar 双向无法通信的前提是, 只是在客户端不进行任何操作的前提下, 当然无法通信, 你大可客户端 hook 再进行一次包修改.
没有任何问题, 而且使用情况也很多, 各大云的 LB 几乎全是如此.
yingtl
2018-08-09 08:04:33 +08:00
@Austing #13 早先的时候是用用户态程序做的转发, 包前面再加了个地址. 现在换成了 IPIP 隧道
yingtl
2018-08-09 08:10:09 +08:00
@Austing #12 题外话, 伪造源的话, 如果伪造的是相同机房的可以发出去么, 这些 VPS 商家的构架有防止这种情况么
Austing
2018-08-09 08:58:57 +08:00
@yingtl 一般来讲是不行的, 因为一般 VPS 服务商是在宿主机就过滤, 现在 VPS 商家常用的 solusvm openstack 之类的默认防止欺骗什么的都是最基本的- -
如果它是租用的其他服务商的服务器, 那么他的上游服务商很可能也会有过滤.
所以很多时候可能会有很多层的...
不过你可以自己试试啊, 随便用 hping 什么的发包然后抓包看看, 能收到就是能发呗.
但是你要是同机房同网络的话, IPIP 隧道正常应该也没多少性能衰减吧.

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

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

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

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

© 2021 V2EX