control without port forwarding

One other thought, do you really need this level of real time response? I assume that this setup is to allow you to turn things on and off remotely. If so, do you really care if it takes a little while to take effect? If not, just have the arduino web client poll the linux box periodically with a get request telling the web server what the current sensor readings are. The web server response will tell the arduino what state it wants the output pins to be in. All user facing display of data is handled on the Linux web site.