Linux netfilter NAT variable

Roman Vasilyev roman at anchorfree.com
Wed Dec 8 05:52:32 MSK 2010


Hi,

I've added very useful for me variable which helps get destination IP 
from netfilter NAT table, in this case we don't need to make extra 
resolving requests, adding code for this variable, is it useful for other?
Also I have question what best attributes for this var? I'm using 
NGX_HTTP_VAR_NOHASH.

static ngx_int_t
ngx_http_orig_ip(ngx_http_request_t *r, ngx_http_variable_value_t *v,
     uintptr_t data)
{
   struct sockaddr_in addr;
   socklen_t addr_sz = sizeof(addr);
   bzero(&addr, addr_sz);
   addr.sin_family = AF_INET;

   if (getsockopt(r->connection->fd, SOL_IP, SO_ORIGINAL_DST, &addr, 
&addr_sz) != 0) {
     ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
     "Couldn't read SO_ORIGINAL_DST from socket errno: %d", errno);
     return NGX_ERROR;
   }

   v->data = ngx_palloc(r->pool, NGX_INET_ADDRSTRLEN);
   v->len=ngx_inet_ntop(AF_INET, &addr.sin_addr, v->data, 
NGX_INET_ADDRSTRLEN);
   return NGX_OK;
}




More information about the nginx mailing list