I added a static route.<br><br>I found the reason.<br>One of my tp-link device has a bug  which quietly ignored my static route configuration.<br><br><br><br><div class="gmail_quote">2011/5/4 Balazs Scheidler <span dir="ltr">&lt;<a href="mailto:bazsi@balabit.hu" target="_blank">bazsi@balabit.hu</a>&gt;</span><br>


<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div></div><div>On Mon, 2011-05-02 at 19:42 +0800, 文剑 wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; I want to write a full transparency proxy too.<br>
&gt;<br>
&gt; Squid and haproxy are so complicated that i can&#39;t quickly understand<br>
&gt; how tproxy works.<br>
&gt; And I am new to iptables.<br>
&gt; If there is a sample peace of code which is simple, I think it would<br>
&gt; be helpful.<br>
&gt;<br>
&gt; I wrote some code which failed at initiating connections with a<br>
&gt; foreign address as a source.<br>
&gt; The reason is timeout while attempting connection.<br>
&gt; Where am I wrong?<br>
&gt;<br>
&gt; Thanks.<br>
&gt;<br>
&gt;<br>
&gt; My code:<br>
&gt;<br>
&gt; #define NON_LOCAL_IP &quot;192.168.111.23&quot;<br>
&gt; #define NON_LOCAL_PORT 2000<br>
&gt;<br>
&gt; int sockfd = socket(AF_INET, SOCK_STREAM, 0);<br>
&gt;<br>
&gt; memset (&amp;non_local_addr, 0, sizeof(non_local_addr));<br>
&gt; non_local_addr.sin_family = AF_INET;<br>
&gt; dst_addr.sin_addr.s_addr = inet_addr(NON_LOCAL_IP);<br>
&gt; inet_pton(AF_INET, NON_LOCAL_IP, &amp;non_local_addr.sin_addr);<br>
&gt; non_local_addr.sin_port = htons(NON_LOCAL_PORT);<br>
&gt;<br>
&gt; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &amp;optvalue,<br>
&gt; sizeof(optvalue));<br>
&gt; setsockopt(sockfd, SOL_IP, IP_TRANSPARENT, &amp;optvalue,<br>
&gt; sizeof(optvalue));<br>
&gt; bind(sockfd, (struct sockaddr *)&amp;non_local_addr,<br>
&gt; sizeof(non_local_addr));<br>
&gt;<br>
&gt; memset(&amp;dst_addr, 0, sizeof(dst_addr));<br>
&gt; dst_addr.sin_family = AF_INET;<br>
&gt; dst_addr.sin_addr.s_addr = inet_addr(&quot;192.168.1.1&quot;);<br>
&gt; dst_addr.sin_port = htons(80);<br>
&gt;<br>
&gt; connect(sockfd, (struct sockaddr *) &amp;dst_addr, sizeof(dst_addr));  //<br>
&gt; ETIMEOUT<br>
<br>
</div></div>are you sure the reverse direction is routed back through your box? that<br>
is needed for tproxy to pick up packets.<br>
<br>
e.g. the server should route client destined packets using your box as a<br>
gateway.<br>
<font color="#888888"><br>
--<br>
Bazsi<br>
<br>
<br>
</font></blockquote></div><br><br clear="all"><br><br>