mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
bugfix #9 vpc vr: Add PREROUTING rule for vm with static nat to multiple private gateways
This commit is contained in:
parent
69c0f71cf7
commit
8a68617eee
@ -817,6 +817,13 @@ class CsForwardingRules(CsDataBag):
|
||||
return interface.get_gateway()
|
||||
return None
|
||||
|
||||
def getPrivateGatewayNetworks(self):
|
||||
interfaces = []
|
||||
for interface in self.config.address().get_interfaces():
|
||||
if interface.is_private_gateway():
|
||||
interfaces.append(interface)
|
||||
return interfaces
|
||||
|
||||
def portsToString(self, ports, delimiter):
|
||||
ports_parts = ports.split(":", 2)
|
||||
if ports_parts[0] == ports_parts[1]:
|
||||
@ -948,12 +955,21 @@ class CsForwardingRules(CsDataBag):
|
||||
if device is None:
|
||||
raise Exception("Ip address %s has no device in the ips databag" % rule["public_ip"])
|
||||
|
||||
chain_name = "PREROUTING-%s-def" % device
|
||||
self.fw.append(["mangle", "front",
|
||||
"-A PREROUTING -s %s/32 -m state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff" %
|
||||
rule["internal_ip"]])
|
||||
self.fw.append(["mangle", "front",
|
||||
"-A PREROUTING -s %s/32 -m state --state NEW -j MARK --set-xmark %s/0xffffffff" %
|
||||
(rule["internal_ip"], hex(100 + int(device[len("eth"):])))])
|
||||
"-A PREROUTING -s %s/32 -m state --state NEW -j %s" %
|
||||
(rule["internal_ip"], chain_name)])
|
||||
self.fw.append(["mangle", "",
|
||||
"-A %s -j MARK --set-xmark %s/0xffffffff" %
|
||||
(chain_name, hex(100 + int(device[len("eth"):])))])
|
||||
self.fw.append(["mangle", "",
|
||||
"-A %s -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff" %
|
||||
chain_name])
|
||||
private_gateways = self.getPrivateGatewayNetworks()
|
||||
for private_gw in private_gateways:
|
||||
self.fw.append(["mangle", "front", "-A %s -d %s -j RETURN" %
|
||||
(chain_name, private_gw.get_network())])
|
||||
|
||||
self.fw.append(["nat", "front",
|
||||
"-A PREROUTING -d %s/32 -j DNAT --to-destination %s" % (rule["public_ip"], rule["internal_ip"])])
|
||||
self.fw.append(["nat", "front",
|
||||
|
||||
@ -488,6 +488,9 @@ class CsIP:
|
||||
self.fw.append(["mangle", "",
|
||||
"-A PREROUTING -m state --state NEW -i %s -s %s ! -d %s/32 -j ACL_OUTBOUND_%s" %
|
||||
(self.dev, self.address['network'], self.address['gateway'], self.dev)])
|
||||
self.fw.append(["mangle", "front",
|
||||
"-A PREROUTING -s %s -d %s -m state --state NEW -j MARK --set-xmark %s/0xffffffff" %
|
||||
(self.cl.get_vpccidr(), self.address['network'], hex(100 + int(self.dev[3:])))])
|
||||
if self.address["source_nat"]:
|
||||
self.fw.append(["nat", "front",
|
||||
"-A POSTROUTING -o %s -j SNAT --to-source %s" %
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user