我们已经在虚拟化(OpenVZ)环境中成功地使用了CSF,并结合了venet和桥接接口,所以我们可以使用公有IP +本地寻址的虚拟系统。
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.100 0.0.0.0 255.255.255.255 UH 0 0 0 venet0 xxx.xxx.xxx.24 0.0.0.0 255.255.255.255 UH 0 0 0 venet0 xxx.xxx.xxx.0 0.0.0.0 255.255.255.0 U 0 0 0 vmbr0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 vmbr10 0.0.0.0 xxx.xxx.xxx.254 0.0.0.0 UG 0 0 0 vmbr0
我们通过一个iptables规则来路由“本地”ips的stream量:
iptables -t nat -A POSTROUTING -s "10.0.0.0/24" -o vmbr0 -j MASQUERADE
/ proc / sys / net / ipv4 / ip_forward值被明显地设置为1
主机和venet联网机器运行自己的CSF安装,为该设置创build所有的防火墙规则,包括创build“redirect”到内部IP的可能性。
有了这个,我们可以在本地networking上打开本地内部虚拟机所服务的主机IP上的特定端口。 CSF创build的长长的防火墙规则列表包括:
Chain PREROUTING (policy ACCEPT 53M packets, 15G bytes) num pkts bytes target prot opt in out source destination 1 0 0 DNAT tcp -- !lo * 0.0.0.0/0 XXX.XXX.XXX.184 tcp dpt:5100 to:10.0.0.100:5000 Chain POSTROUTING (policy ACCEPT 9700K packets, 615M bytes) num pkts bytes target prot opt in out source destination 3 0 0 SNAT tcp -- * !lo 0.0.0.0/0 10.0.0.100 to:XXX.XXX.XXX.184 8 10 600 MASQUERADE all -- * vmbr0 10.0.0.0/24 0.0.0.0/0
CSF防火墙上的redirectfunction工作正常,但IP报告的是主机IP,而不是始发IP,所以我们不能用目标虚拟系统上的另一个CSF实例(或简单的防火墙规则)进行限制。 我们知道,在PREROUTING上,他们不能限制在主机CSF上。
CSF自述文件实际上指出: “所有redirect到另一个IP地址将始终出现在具有此服务器的源的目标服务器上,而不是始发IP地址”。 所以这是一个标准function。
CSF支持postrules.sh文件,我们可以手动包含NAT规则,但我们不确定是否使用IPTABLES SNAT和/或DNAT,可以将“真实”源IP传递到NAT IP的目的地。
您提到的在目的地查看“真实”来源IP的唯一方法是避免使用Natting或伪装。 请记住,SNAT和DNAT分别代表源和目标networkingTRANSLATION,因此一旦数据包通过NAT规则,源/目标地址就会“改变”。 你不能在目的地检索它们。