KVM,iptables,part2

我有一个两个客人KVM机器和以下路线:

89.114.150.3 (eth0:0 alias)->192.168.122.1(virbr0)->192.168.122.5(vint0) 

到这两台机器之一(192.168.122.5和192.168.122.6)。 我在iptables中重写了我的规则:

 iptables -t nat -A PREROUTING -p tcp -d 89.114.150.3 --dport 80 -j DNAT --to 192.168.122.1:80 iptables -t nat -A PREROUTING -p tcp -d 192.168.122.1 --dport 80 -j DNAT --to 192.168.122.5:80 iptables -I FORWARD -d 192.168.122.5/32 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT iptables -t nat -A POSTROUTING -p tcp -s 192.168.122.5 --sport 80 -j SNAT --to-source 192.168.122.1 iptables -t nat -A POSTROUTING -p tcp -s 192.168.122.1 --sport 80 -j SNAT --to-source 89.114.150.3 

但我有一个问题 – 这条路线也不工作… 80 – 连接被拒绝。 为什么?

我们来看看iptables中的这个:

 iptables -t nat -A PREROUTING -p tcp -d 89.114.150.3 --dport 80 -j DNAT --to 192.168.122.1:80 

好的,会发送数据包到192.168.122.1:80。 iptables中的大部分规则都是终止规则。 作为目的地的LOG和其他一些是例外。 任何与此相匹配的东西,我们都已经完成了链条。

 iptables -t nat -A PREROUTING -p tcp -d 192.168.122.1 --dport 80 -j DNAT --to 192.168.122.5:80 

除非它真的进入192.168.122.1的计算机,否则没有任何匹配。 这不会影响上面的数据包。 我猜这是你的目标。

使用iptables重写你的最终目的地,而不是尝试多次改变数据包来匹配路由。 你的路由表将负责通过桥发送数据包到正确的接口。 因此,你的第一条规则应该是:

 iptables -t nat -A PREROUTING -p tcp -d 89.114.150.3 --dport 80 -j DNAT --to 192.168.122.5:80 

考虑你的其他规则相同。 你有你的POSTROUTING规则也需要工作。 如果您的FORWARD链中有其他规则描述丢弃或拒绝数据包,则知道您还需要接受ESTABLISHED,RELATED。