I have three rules at the top of my input and forward chains for dealing with connections based on state: drop invalid, accept established, accept related.
I'm using masquerade on customer traffic coming in via ether2 and out via ether1.
In my filter logs, I see drops on the input chain for traffic that should be accepted as part of a valid connection from customer hosts on ether2. For example, SYN-ACK or FIN packets from a remote site hosting my Hotspot sign-on application. This also happens for other web sites. It doesn't happen all the time, but I'm concerned it's affecting the user experience for my customers. I've had similar problems with DNS responses being dropped, so my customers can't connect. I've had to put rules explicitly allowing traffic from my DNS and web servers to get around this problem.
The destination address in these packets is the IP on ether1 (the external address of the router). I would think that on input, the router would translate the destination back to the appropriate customer IP and send it through the forward chain, where it can match the rule for established connections. But it doesn't.
Why would this traffic be dropped on the input chain?