请教一条 iptables 转发

218 天前
 zsj1029
1 、当前主机 A 有一张物理网卡 eth0 ,ip 10.10.10.1
2 、这台 A 主机新增一张虚拟网卡 vnet0 ,ip 10.10.10.10 ,外部测试以上两个 ip 均可以 ping 通
目标:我用 10.10.10.50 主机 B ,访问 A 主机 vnet 10.10.10.10 时,将流量转发到另一台主机 c:10.10.10.20 ,同时限制-s 来源 ip 为我发起请求的这台主机 B

目前
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -i vnet0 -s 10.10.10.50 -j DNAT --to-destination 10.10.10.20
测试无效

测试了一下午没有搞定,求大佬指路。

或者有什么更好的方案
目前是这样的需求,cli 客户端 B 向 A 发起请求 c 资源(很多 c ),A 批准后经过 A 路由流量转发到 c 上。
访问 A 的虚拟网卡 vnet0 流量转发到 c1 ,访问 A 的虚拟网卡 vnet1 转发到 c2 ,依次类推,同时限制-s 来源为访问主机 ip
911 次点击
所在节点    问与答
8 条回复
kiah
218 天前
# 清除现有规则
iptables -t nat -F

# 配置 POSTROUTING 规则
iptables -t nat -A POSTROUTING -j MASQUERADE

# 配置 PREROUTING 规则,将特定源 IP 的流量转发到目标主机
iptables -t nat -A PREROUTING -i vnet0 -s 10.10.10.50 -j DNAT --to-destination 10.10.10.20
zsj1029
218 天前
@kiah 我每次都清除才测试的,不行大佬,我测试下来如果把-i vnet0 去掉,就可以,但是做不到指定网卡流量转发了
Yien
218 天前
这问题我最近测试过,如果 .50 IP 主机的网关不是主机 A 的.1 IP 的话,无法实现重定向到 20
zsj1029
218 天前
@Yien 啊,那有什么其他方案吗?是不是虚拟网卡的问题呢
Jirajine
218 天前
你如果要只有目的地址为 10.10.10.10 的流量转发给 10.10.10.20 ,那你可以在写规则的时候匹配目的地址。网卡和 ip 没什么关系,从 eth0 进来的目的地址为 10.10.10.10 的包也会被接受,但匹配不到你的规则。

如果你的需求是由 B 向 C 发起请求但是要经过 A ,那你直接在 B 添加静态路由,ip route add <dest_C> via <ip_of_A>,然后在 A 上配置规则决定谁能发给谁。
zsj1029
218 天前
已解决
iptables -t nat -A PREROUTING -s 10.10.10.50 -d 10.10.10.10 -j DNAT --to-destination 10.10.10.20

不要给 A 创建虚拟网卡,在单网卡上创建多个 ip ,主机 B 10.10.10.50 访问 A 的 10.10.10.10 ,转发到 c 的 10.10.10.20
wumoumou
218 天前
向大佬学习一下
zsj1029
218 天前
@wumoumou 好的 小同志

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

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

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

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

© 2021 V2EX