I think this is my first post on this topic. September, 2010.
http://forum.mikrotik.com/t/walled-garden-and-ssl-sites-intermittent-problem/40829/1
It is in “/ip dns cache” that this all happens. Initially when your web browser tries to access a SSL site, it first does the dns resolution. That puts the ip of the server in the cache. Later, when the web browser tries to access that ip of the SSL site, the hotspot looks through the cache list of ip addresses. If it finds that ip, then it checks the associated domain name and checks the walled garden domain names for that domain.
The problem lies in the fact that PayPal, and other busy sites, use the dns TTL as a form of load balancing. PayPal uses 4 severs at a time, and rotates through those ips every 30 seconds or so.
For examples, presume these are PayPal server ips for today.
x.x.x.20
x.x.x.21
x.x.x.22
x.x.x.23
When your web browser does the initial dns resolution, it gets x.x.x.20. So you go to that payment form page right away, and it works because x.x.x.20 is in the dns cache with a valid domain to bypass the hotspot.
But by the time you fill out the form, and want to submit your payment form, the ip address x.x.x.20 has been dropped from the dns cache because the TTL expired, and you are NOT allowed through the hotspot,
If another user on the same hotspot does a resolution for PayPal, the odds are 1 in 4 that they will put that ip (x.x.x.20) back in the dns cache for 15 seconds or so. So if you are really lucky, you might get let through with your payment form if your timing is almost perfect.
edit: The theory behind my wiki code is that it uses the system scheduler to resolve the domain until it gets all 4 daily PayPal server ips in “/ip hotspot walled-garden ip”. Now, no matter which of those 4 ips your client gets, they will all be in the walled-garden ip list and will bypass the hotspot ok. It no longer matters if the TTL is short and drops from the cache.
http://wiki.mikrotik.com/wiki/PayPal_with_hotspot_and_walled_garden_bypass
If you think it would be as easy as getting those ips and entering them in “/ip hotspot walled-garden ip” manually, that won’t work. I have found they rotate one of those servers out every day or two. Then it will use these ips:
x.x.x.21
x.x.x.22
x.x.x.23
x.x.x.24
If I worked at MikroTik, which I don’t, here is the fix I would try:
I would develop a routine that, when the domain is resolved by the hotspot, and that domain is in the hotspot walled garden, it adds the destination ip to a special address-list with a timeout of 1 day. Then use that address-list as the bypass check. You could make the “/ip hotspot walled-garden ip” that address list by adding an expires field to it. 