转发端口并保留源IP

我有一个运行几个LXC容器的静态IP地址的系统。
我可以通过接口与容器进行通信,因为它将是一台物理机器。
其中一个容器是一个后缀服务器。 我将端口25从主机转发到容器,但是在进程中,源IP地址被接口1replace,导致后缀失败rDNS检查。

build立
主机通过eth0接口访问Internet,IP地址为188.xxx.xxx.xxx
主机站点上的容器IP地址为192.168.1.12br2 ),容器侧为192.168.1.2eth0 )。
容器通过主机获取互联网访问权限作为默认网关和iptable规则。

还有其他容器有类似的设置,容器不会直接对话,而是通过指定端口的iptable规则。

我发布所有的iptable规则,以防他们互相干扰

 # Generated by iptables-save v1.4.21 *nat :PREROUTING ACCEPT [760:48985] :INPUT ACCEPT [707:45761] :OUTPUT ACCEPT [114:7445] :POSTROUTING ACCEPT [50:2740] # Route HTTP & HTTPS to web container -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80 -A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.1:443 # Route internal mysql request to mysql container -A PREROUTING -i br1 -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.1.3:3306 -A PREROUTING -i br2 -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.1.3:3306 # Route mail from outside to mail container -A PREROUTING -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.2:25 -A PREROUTING -i eth0 -p tcp -m tcp --dport 143 -j DNAT --to-destination 192.168.1.2:143 -A PREROUTING -i eth0 -p tcp -m tcp --dport 587 -j DNAT --to-destination 192.168.1.2:587 -A PREROUTING -i eth0 -p tcp -m tcp --dport 993 -j DNAT --to-destination 192.168.1.2:993 -A PREROUTING -i eth0 -p tcp -m tcp --dport 4190 -j DNAT --to-destination 192.168.1.2:4190 # Route mail from web container to mail container -A PREROUTING -i br1 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.2:25 -A PREROUTING -i br1 -p tcp -m tcp --dport 143 -j DNAT --to-destination 192.168.1.2:143 -A PREROUTING -i br1 -p tcp -m tcp --dport 587 -j DNAT --to-destination 192.168.1.2:587 -A PREROUTING -i br1 -p tcp -m tcp --dport 993 -j DNAT --to-destination 192.168.1.2:993 -A PREROUTING -i br1 -p tcp -m tcp --dport 4190 -j DNAT --to-destination 192.168.1.2:4190 # Mark packages -A POSTROUTING -o eth0 -j MASQUERADE -A POSTROUTING -o br1 -j MASQUERADE -A POSTROUTING -o br2 -j MASQUERADE -A POSTROUTING -o br3 -j MASQUERADE COMMIT # Completed # Generated by iptables-save v1.4.21 *filter :INPUT ACCEPT [35371:3912708] :FORWARD ACCEPT [48:2620] :OUTPUT ACCEPT [29159:6870938] # All containers are allowed to place calls from inside to outside -A FORWARD -i eth0 -o br1 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o br2 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o br3 -m state --state RELATED,ESTABLISHED -j ACCEPT COMMIT # Completed 

IP路由,以防事件发生

 192.168.1.1 * 255.255.255.255 UH 0 0 0 br1 192.168.1.2 * 255.255.255.255 UH 0 0 0 br2 192.168.1.3 * 255.255.255.255 UH 0 0 0 br3 

我应该如何修改这个规则来保持源IP或者我应该采取不同的方式?

放弃这些规则:

 -A POSTROUTING -o br1 -j MASQUERADE -A POSTROUTING -o br2 -j MASQUERADE 

他们执行所有stream量到br1br2 。 通常你只想在连接到互联网的接口上有一个MASQUERADE规则。

如果每个容器在一个单独的桥上,我会把容器放在不同的子网中。 他们不需要满24岁。 A / 30将足以路由一个IP地址。