From d88c614a35107015f211c598282c03f0408f32d2 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 6 Feb 2020 20:25:56 +0100 Subject: [PATCH] vr: add missing rule for port forwarding rule in vpc (#3857) --- systemvm/debian/opt/cloud/bin/configure.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/systemvm/debian/opt/cloud/bin/configure.py b/systemvm/debian/opt/cloud/bin/configure.py index 8ce18d49e32..cadb7c54f05 100755 --- a/systemvm/debian/opt/cloud/bin/configure.py +++ b/systemvm/debian/opt/cloud/bin/configure.py @@ -793,6 +793,12 @@ class CsForwardingRules(CsDataBag): return None + def getGuestIpByIp(self, ipa): + for interface in self.config.address().get_interfaces(): + if interface.ip_in_subnet(ipa): + return interface.get_ip() + return None + def getDeviceByIp(self, ipa): for interface in self.config.address().get_interfaces(): if interface.ip_in_subnet(ipa): @@ -930,8 +936,20 @@ class CsForwardingRules(CsDataBag): if not rule["internal_ports"] == "any": fw_output_rule += ":" + self.portsToString(rule["internal_ports"], "-") + fw_postrout_rule2 = "-j SNAT --to-source %s -A POSTROUTING -s %s -d %s/32 -o %s -p %s -m %s --dport %s" % \ + ( + self.getGuestIpByIp(rule['internal_ip']), + self.getNetworkByIp(rule['internal_ip']), + rule['internal_ip'], + self.getDeviceByIp(rule['internal_ip']), + rule['protocol'], + rule['protocol'], + self.portsToString(rule['internal_ports'], ':') + ) + self.fw.append(["nat", "", fw_prerout_rule]) self.fw.append(["nat", "", fw_postrout_rule]) + self.fw.append(["nat", "", fw_postrout_rule2]) self.fw.append(["nat", "", fw_output_rule]) def processStaticNatRule(self, rule):