venkata swamybabu budumuru created CLOUDSTACK-2761:
------------------------------------------------------

             Summary: [VMware] [VPC] Failed to create PF/StaticNAT rules on VPC
                 Key: CLOUDSTACK-2761
                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-2761
             Project: CloudStack
          Issue Type: Bug
      Security Level: Public (Anyone can view this level - this is the default.)
          Components: Network Controller
    Affects Versions: 4.2.0
         Environment: commit # 8d1189c2ae87216bc1c4a1443f75e9a8629abdc2
            Reporter: venkata swamybabu budumuru
            Priority: Blocker
             Fix For: 4.2.0


Steps to reproduce:

1. Have latest CloudStack build with at least 1 advanced zone
2. Have at least 1 VMware cluster with 1 host.
3. Create a VPC with at least 1 Tier
4. deploy a VM
5. apply an ACL to allow all 
6. acquire at least 1 IP
7. create PF/staticNAT on the above created IP to the VM created in step (4) 

Observations:

(i) It failed to create staticNAT with the following error


2013-05-30 08:05:20,203 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-38:null) Seq 1-1416495168: Response Received:
2013-05-30 08:05:20,206 DEBUG [agent.transport.Request] (DirectAgent-38:null) 
Seq 1-1416495168: Processing:  { Ans: , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 0, [{"routing.IpAssocAnswer":{"results":["10.147.44.63 - 
success"],"result":true,"wait":0}}] }
2013-05-30 08:05:20,207 DEBUG [agent.transport.Request] (catalina-exec-19:null) 
Seq 1-1416495168: Received:  { Ans: , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 0, { IpAssocAnswer } }
2013-05-30 08:05:20,211 INFO  [cloud.network.NetworkManagerImpl] 
(catalina-exec-19:null) Let VpcVirtualRouter handle StaticNat in network 204
2013-05-30 08:05:20,223 DEBUG 
[network.router.VirtualNetworkApplianceManagerImpl] (catalina-exec-19:null) 
Applying static nat rules in network Ntwk[204|Guest|11]
2013-05-30 08:05:20,288 DEBUG [agent.transport.Request] (catalina-exec-19:null) 
Seq 1-1416495169: Sending  { Cmd , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 100001, 
[{"routing.SetStaticNatRulesCommand":{"rules":[{"dstIp":"10.0.1.188","id":0,"srcIp":"10.147.44.63","revoked":false,"alreadyAdded":false,"purpose":"StaticNat","icmpType":0,"icmpCode":0}],"vpcId":1,"accessDetails":{"router.guest.ip":"10.0.1.1","zone.network.type":"Advanced","router.ip":"10.147.40.62","router.name":"r-3-VM"},"wait":0}}]
 }
2013-05-30 08:05:20,288 DEBUG [agent.transport.Request] (catalina-exec-19:null) 
Seq 1-1416495169: Executing:  { Cmd , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 100001, 
[{"routing.SetStaticNatRulesCommand":{"rules":[{"dstIp":"10.0.1.188","id":0,"srcIp":"10.147.44.63","revoked":false,"alreadyAdded":false,"purpose":"StaticNat","icmpType":0,"icmpCode":0}],"vpcId":1,"accessDetails":{"router.guest.ip":"10.0.1.1","zone.network.type":"Advanced","router.ip":"10.147.40.62","router.name":"r-3-VM"},"wait":0}}]
 }
2013-05-30 08:05:20,289 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-16:null) Seq 1-1416495169: Executing request
2013-05-30 08:05:20,290 INFO  [vmware.resource.VmwareResource] 
(DirectAgent-16:10.147.40.12) Executing resource SetFirewallRuleCommand: 
{"rules":[{"dstIp":"10.0.1.188","id":0,"srcIp":"10.147.44.63","revoked":false,"alreadyAdded":false,"purpose":"StaticNat","icmpType":0,"icmpCode":0}],"vpcId":1,"accessDetails":{"router.guest.ip":"10.0.1.1","zone.network.type":"Advanced","router.ip":"10.147.40.62","router.name":"r-3-VM"},"wait":0}
2013-05-30 08:05:20,290 DEBUG [vmware.resource.VmwareResource] 
(DirectAgent-16:10.147.40.12) Use router's private IP for SSH control. IP : 
10.147.40.62
2013-05-30 08:05:21,746 ERROR [utils.ssh.SshHelper] 
(DirectAgent-16:10.147.40.12) SSH execution of command /root/firewall.sh  -A  
-l 10.147.44.63 -r 10.0.1.188 -d 0:0 -G  has an error status code in return. 
result output: Bad argument `10.147.44.63'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `10.147.44.63'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.4.14: option "--set-mark" requires an argument
Try `iptables -h' or 'iptables --help' for more information.
iptables: No chain/target/match by that name.
Bad argument `10.147.44.63'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `eth0'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `10.147.44.63'
Try `iptables -h' or 'iptables --help' for more information.
iptables: No chain/target/match by that name.
iptables: No chain/target/match by that name.
Bad argument `10.147.44.63'
Try `iptables -h' or 'iptables --help' for more information.

2013-05-30 08:05:21,790 DEBUG [vmware.resource.VmwareResource] 
(DirectAgent-16:10.147.40.12) Executing script on domain router 10.147.40.62: 
/root/firewall.sh  -A  -l 10.147.44.63 -r 10.0.1.188 -d 0:0 -G

(ii) After changing the firewall.sh as mentioned below, it went fine.

get_dev_list() {
  ip link show | grep -e eth[2-9] | awk -F ":" '{print $2}'
  ip link show | grep -e eth1[0-9] | awk -F ":" '{print $2}'
}

Changed the above with the following to include eth1 device as well.

get_dev_list() {
  ip link show | grep -e eth[1-9] | awk -F ":" '{print $2}'
  ip link show | grep -e eth1[0-9] | awk -F ":" '{print $2}'
}
 
2013-05-30 08:32:52,492 INFO  [cloud.network.NetworkManagerImpl] 
(catalina-exec-3:null) Let VpcVirtualRouter handle StaticNat in network 204
2013-05-30 08:32:52,506 DEBUG 
[network.router.VirtualNetworkApplianceManagerImpl] (catalina-exec-3:null) 
Applying static nat rules in network Ntwk[204|Guest|11]
2013-05-30 08:32:52,523 DEBUG [agent.transport.Request] (catalina-exec-3:null) 
Seq 1-1416495239: Sending  { Cmd , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 100001, 
[{"routing.SetStaticNatRulesCommand":{"rules":[{"dstIp":"10.0.1.188","id":0,"srcIp":"10.147.44.63","revoked":false,"alreadyAdded":false,"purpose":"StaticNat","icmpType":0,"icmpCode":0}],"vpcId":1,"accessDetails":{"router.guest.ip":"10.0.1.1","zone.network.type":"Advanced","router.ip":"10.147.40.62","router.name":"r-3-VM"},"wait":0}}]
 }
2013-05-30 08:32:52,524 DEBUG [agent.transport.Request] (catalina-exec-3:null) 
Seq 1-1416495239: Executing:  { Cmd , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 100001, 
[{"routing.SetStaticNatRulesCommand":{"rules":[{"dstIp":"10.0.1.188","id":0,"srcIp":"10.147.44.63","revoked":false,"alreadyAdded":false,"purpose":"StaticNat","icmpType":0,"icmpCode":0}],"vpcId":1,"accessDetails":{"router.guest.ip":"10.0.1.1","zone.network.type":"Advanced","router.ip":"10.147.40.62","router.name":"r-3-VM"},"wait":0}}]
 }
2013-05-30 08:32:52,524 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-12:null) Seq 1-1416495239: Executing request
2013-05-30 08:32:52,525 INFO  [vmware.resource.VmwareResource] 
(DirectAgent-12:10.147.40.12) Executing resource SetFirewallRuleCommand: 
{"rules":[{"dstIp":"10.0.1.188","id":0,"srcIp":"10.147.44.63","revoked":false,"alreadyAdded":false,"purpose":"StaticNat","icmpType":0,"icmpCode":0}],"vpcId":1,"accessDetails":{"router.guest.ip":"10.0.1.1","zone.network.type":"Advanced","router.ip":"10.147.40.62","router.name":"r-3-VM"},"wait":0}
2013-05-30 08:32:52,529 DEBUG [vmware.resource.VmwareResource] 
(DirectAgent-12:10.147.40.12) Use router's private IP for SSH control. IP : 
10.147.40.62
2013-05-30 08:32:53,937 DEBUG [vmware.resource.VmwareResource] 
(DirectAgent-12:10.147.40.12) Executing script on domain router 10.147.40.62: 
/root/firewall.sh  -A  -l 10.147.44.63 -r 10.0.1.188 -d 0:0 -G
2013-05-30 08:32:53,938 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-12:null) Seq 1-1416495239: Response Received:
2013-05-30 08:32:53,938 DEBUG [agent.transport.Request] (DirectAgent-12:null) 
Seq 1-1416495239: Processing:  { Ans: , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 0, 
[{"routing.SetStaticNatRulesAnswer":{"results":[null],"result":true,"wait":0}}] 
}


(iii) Tried to access the staticNat rule but, it failed because, it created a 
firewall rule with DROP policy which is not required in case of staticNAt. 
Ideally instead of firewall.sh, it should call "vlc_staticnat.sh" script to 
configure staticnat.

Here is the snippet of iptable output.


root@r-3-VM:~# iptables -L -nv -t mangle
Chain PREROUTING (policy ACCEPT 3060 packets, 346K bytes)
 pkts bytes target     prot opt in     out     source               destination 
        
    1    60 CONNMARK   all  --  eth1   *       0.0.0.0/0            0.0.0.0/0   
         state NEW CONNMARK set 0x1
 2360 3256K FIREWALL_10.147.44.63  all  --  *      *       0.0.0.0/0            
10.147.44.63        
 1388 77740 CONNMARK   all  --  eth2   *       0.0.0.0/0            0.0.0.0/0   
         state RELATED,ESTABLISHED CONNMARK restore
   27  1620 ACL_OUTBOUND_eth2  all  --  eth2   *       10.0.1.0/24         
!10.0.1.1             state NEW
    0     0 MARK       all  --  eth1   *       0.0.0.0/0            
10.147.44.63         state NEW MARK set 0x1
    0     0 CONNMARK   all  --  eth1   *       0.0.0.0/0            
10.147.44.63         state NEW CONNMARK save
    0     0 MARK       all  --  eth0   *       10.0.1.188           0.0.0.0/0   
         state NEW MARK set 0x1
    0     0 CONNMARK   all  --  eth0   *       10.0.1.188           0.0.0.0/0   
         state NEW CONNMARK save

Chain INPUT (policy ACCEPT 3048 packets, 345K bytes)
 pkts bytes target     prot opt in     out     source               destination 
        

Chain FORWARD (policy ACCEPT 21 packets, 10108 bytes)
 pkts bytes target     prot opt in     out     source               destination 
        
 3774 3335K VPN_STATS_eth1  all  --  *      *       0.0.0.0/0            
0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 2402 packets, 384K bytes)
 pkts bytes target     prot opt in     out     source               destination 
        
    0     0 CHECKSUM   udp  --  *      *       0.0.0.0/0            0.0.0.0/0   
         udp dpt:68 CHECKSUM fill

Chain POSTROUTING (policy ACCEPT 2423 packets, 395K bytes)
 pkts bytes target     prot opt in     out     source               destination 
        

Chain ACL_OUTBOUND_eth2 (1 references)
 pkts bytes target     prot opt in     out     source               destination 
        
   27  1620 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0   
        
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0   
        

Chain FIREWALL_10.147.44.63 (1 references)
 pkts bytes target     prot opt in     out     source               destination 
        
 2359 3256K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0   
         state RELATED,ESTABLISHED
    1    60 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0   
        

Chain VPN_STATS_eth1 (1 references)
 pkts bytes target     prot opt in     out     source               destination 
        
    0     0            all  --  *      eth1    0.0.0.0/0            0.0.0.0/0   
         mark match 0x525
    0     0            all  --  eth1   *       0.0.0.0/0            0.0.0.0/0   
         mark match 0x524

(iv) Tried to configure PF rule but that as well failed but with a different 
error.

here is the snippet from mgmt server log.


2013-05-30 11:30:35,264 DEBUG [vmware.resource.VmwareResource] 
(DirectAgent-495:10.147.40.12) Use router's private IP for SSH control. IP : 
10.147.40.62
2013-05-30 11:30:36,548 ERROR [utils.ssh.SshHelper] 
(DirectAgent-495:10.147.40.12) SSH execution of command 
/opt/cloud/bin/vpc_portforwarding.sh  -A -P tcp -l 10.147.44.64 -p 22-22 -r 
10.0.1.188 -d 22-22 has an error status code in return. result output:
2013-05-30 11:30:36,555 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-495:null) Seq 1-1416495677: Response Received:
2013-05-30 11:30:36,556 DEBUG [agent.transport.Request] (DirectAgent-495:null) 
Seq 1-1416495677: Processing:  { Ans: , MgmtId: 7280707764394, via: 1, Ver: v1, 
Flags: 0, 
[{"routing.SetPortForwardingRulesAnswer":{"results":["Failed"],"result":false,"wait":0}}]
 }
2013-05-30 11:30:36,556 DEBUG [agent.transport.Request] 
(Job-Executor-26:job-23) Seq 1-1416495677: Received:  { Ans: , MgmtId: 
7280707764394, via: 1, Ver: v1, Flags: 0, { SetPortForwardingRulesAnswer } }
2013-05-30 11:30:36,556 WARN  [network.rules.RulesManagerImpl] 
(Job-Executor-26:job-23) Failed to apply port forwarding rules for ip due to
com.cloud.exception.ResourceUnavailableException: Resource [DataCenter:1] is 
unreachable: Unable to apply firewall rules on router
        at 
com.cloud.network.router.VirtualNetworkApplianceManagerImpl.applyRules(VirtualNetworkApplianceManagerImpl.java:3739)
        at 
com.cloud.network.router.VirtualNetworkApplianceManagerImpl.applyFirewallRules(VirtualNetworkApplianceManagerImpl.java:3567)
        at 
com.cloud.network.element.VirtualRouterElement.applyPFRules(VirtualRouterElement.java:787)
        at 
com.cloud.network.firewall.FirewallManagerImpl.applyRules(FirewallManagerImpl.java:565)
        at 
com.cloud.network.NetworkManagerImpl.applyRules(NetworkManagerImpl.java:2913)
        at 
com.cloud.network.firewall.FirewallManagerImpl.applyRules(FirewallManagerImpl.java:509)
        at 
com.cloud.network.rules.RulesManagerImpl.applyPortForwardingRules(RulesManagerImpl.java:889)
        at 
com.cloud.network.rules.RulesManagerImpl.applyPortForwardingRules(RulesManagerImpl.java:1072)
        at 
com.cloud.utils.component.ComponentInstantiationPostProcessor$InterceptorDispatcher.intercept(ComponentInstantiationPostProcessor.java:125)
        at 
org.apache.cloudstack.api.command.user.firewall.CreatePortForwardingRuleCmd.execute(CreatePortForwardingRuleCmd.java:184)
        at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:155)
        at 
com.cloud.async.AsyncJobManagerImpl$1.run(AsyncJobManagerImpl.java:437)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:679)

(v) Tried the following iptables command manually and found an error with syntax

root@r-3-VM:~# sudo iptables -t nat -A PREROUTING --proto tcp -d 10.147.44.64 
--destination-port 22-22 -j DNAT --to-destination 10.0.1.188:22-22
iptables v1.4.14: invalid port/service `22-22' specified
Try `iptables -h' or 'iptables --help' for more information.

Attaching all the mgmt server logs to the bug.

Here is the system vm template version that I used for testing.

root@r-3-VM:~# cat /etc/cloudstack-release
Cloudstack Release 4.2.0 Tue Apr 16 04:09:58 UTC 2013

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to