It works!!!
Ken thanks for your quick reply. I've seen your name come up quite a bit in my past research of RSLinx access through VPN. You have provided some great information and a very helpful starting point for my own troubleshooting.
I was able to get RSLinx to work with the "Remote Devices via RSLinx Gateway" using the port forwarding capabilities of my SSL VPN appliance. You da' man!!! I saw you recommend this to someone else but I was unsure of the parameters, "Server name" and "Remote driver name" in the driver but I have since found out that you don't need them for a PLC connection. You just need to specify the "Server IP address of hostname" as the PLC's IP address. As a side note, I did not see the "Remote Devices via RSLinx Gateway" driver ever talk on port 2222.
You mentioned sniffing the traffic. I had already done that in my troubleshooting and sniffed both a direct connection and a SSL VPN connection. Sniffing the direct connection showed me the three "Port Closed" responses and then the switch to port 44818.
On a VPN connection, I sniffed the connection between the SSL VPN and the PLC. I also saw the three "Port Closed" responses but the Port 2222 RESETs just kept coming back from the PLC. Sniffing the connection between the SSL VPN client and the RSLinx application is a little more tricky because they don't actually talk to each other through the network card. It is more like a shim in the TCP/IP stack of the client PC. When you sniff the network card, all you see is SSL traffic on port 443.
I haven't dug deep enough into the product, or my own toolkit, to determine if I have diagnostic sniffing capabilities between the application and SSL client. That is why I guessed about the SYN-ACK being generated by the SSL client. What tipped me off to this was something, that I hadn't mentioned before, which was RSlinx Driver Diagnostics showed an Active CSPv4 connection when using the "Ethernet Devices" driver. But the connection didn't work and the RESETs were continually being generated by the PLC.
From what I've learned from you and my sniffer, it should work like this:
TCP 2222 SYN -->
<-- TCP 2222 RST-ACK from PLC
TCP 2222 SYN -->
<-- TCP 2222 RST-ACK from PLC
TCP 2222 SYN -->
<-- TCP 2222 RST-ACK from PLC
RSLinx figures out we don't want to talk CSPv4
TCP 44818 SYN -->
<-- TCP 44818 SYN-ACK from PLC
TCP 44818 ACK -->
Now we are talking PCCC
I'm assuming (and may be completely wrong) that what is happening with my application layer proxy (port forwarder) and the "Ethernet Devices" driver is this:
TCP 2222 SYN -->
<-- TCP 2222 SYN-ACK from proxy
TCP 2222 ACK -->
RSLinx thinks we want to talk CSPv4
<-- TCP 2222 RST-ACK from PLC via proxy
Nope, lets try again
TCP 2222 SYN -->
<-- TCP 2222 SYN-ACK from proxy
TCP 2222 ACK -->
RSLinx thinks we want to talk CSPv4
<-- TCP 2222 RST-ACK from PLC via proxy
Nope, lets try again to infinity and beyond
You asked about my implementation. I'd hate to slight anyones SSL product in public because I can get it to work with the "Ethernet Devices" driver using a different access method on the same SSL appliance. The product has both application level port forwarding (which is what I am working with here) and full layer 3 VPN functionality that has none of the issues we are discussing here. I'd be happy to discuss offline.
Thanks again for your help, Ken!