Hi,
I am currently running OpenBSD 4.9 as a router/firewall for my work and so
far I have nearly a fully working config but there is something I cannot
manage to do :(

Here is my configuration:
The server has 1 physical interface, I added a gif interface to connect it
to a remote machine which is used to route most of the traffic, on this gif
interface I have incoming requests I want to pass through squid.

Here is my pf.conf fie (prettier version here:
https://gist.github.com/1131783 ):

    phys_if = "re0"

    c1_tunnel = "gif1001"
    c1_tunnel_dst = "95.140.15.38"
    c1_tunnel_src = "87.98.149.50"
    c1_escape = "87.98.154.179"

    set skip on lo0
    set block-policy drop

    # block any packet with no match
    block log all

    # allow our own services to work
    pass in on $phys_if proto tcp from any to $phys_if port { ssh } synproxy
state
    pass in on $phys_if inet proto icmp from any to $phys_if
    pass out on $phys_if label "system"

    # allow ipip traffic (gif interface)
    pass in on $phys_if from $c1_tunnel_dst to $c1_tunnel_src label
"c1_tunnel"
    pass out on $phys_if from $c1_tunnel_src to $c1_tunnel_dst label
"c1_tunnel"

    # tag incoming packets from the tunnel and from
    # the outside to the public ip address
    match in log(matches) on $c1_tunnel tag "c1"
    match in log(matches) on $phys_if from any to $c1_escape tag "c1"

    # Allow incoming packet to port 80 and redirect them to squid
    pass in log(matches, all) on $c1_tunnel proto tcp to port 80 \
      rdr-to 127.0.0.1 port 1001 \
      reply-to ($c1_tunnel 10.0.0.5) \
      tagged "c1" label "c1_proxied_traffic"



The result is that I cannot establish a tcp connection to port 80 for a
machine behing the gif tunnel, here is what tcpdump says on this machine (
tcpdump -s 0 -vlni <interface> port 80 ):

IP (tos 0x0, ttl  62, id 8175, offset 0, flags [DF], length: 60)
<client_address>.21746 > <web_address>.80: S [tcp sum ok]
3993732249:3993732249(0) win 65535 <mss 1380,nop,wscale 3,sackOK,timestamp
442132554 0>
IP (tos 0x0, ttl  64, id 59219, offset 0, flags [DF], length: 64)
<web_address>.80 > <client_address>.21746: S [tcp sum ok]
3332347257:3332347257(0) ack 3993732250 win 16384 <mss
1440,nop,nop,sackOK,nop,wscale 3,nop,nop,timestamp 2569862135 442132554>

IP (tos 0x0, ttl  62, id 8176, offset 0, flags [DF], length: 52)
<client_address>.21746 > <web_address>.80: . [tcp sum ok] ack 1 win 8208
<nop,nop,timestamp 442132595 2569862135>
IP (tos 0x0, ttl  62, id 8189, offset 0, flags [DF], length: 54)
<client_address>.21746 > <web_address>.80: P [tcp sum ok] 1:3(2) ack 1 win
8208 <nop,nop,timestamp 442134444 2569862135>
IP (tos 0x0, ttl  64, id 65354, offset 0, flags [DF], length: 58)
<web_address>.80 > <client_address>.21746: P [bad tcp cksum a676 (->a9cf)!]
1:7(6) ack 3 win 2052 <nop,nop,timestamp 2569862139 442134444>

IP (tos 0x0, ttl  62, id 8190, offset 0, flags [DF], length: 54)
<client_address>.21746 > <web_address>.80: P [tcp sum ok] 1:3(2) ack 1 win
8208 <nop,nop,timestamp 442134770 2569862135>
IP (tos 0x0, ttl  64, id 23274, offset 0, flags [DF], length: 52)
<web_address>.80 > <client_address>.21746: . [bad tcp cksum b6c8 (->ba21)!]
ack 3 win 2052 <nop,nop,timestamp 2569862139 442134770>

IP (tos 0x0, ttl  62, id 8194, offset 0, flags [DF], length: 54)
<client_address>.21746 > <web_address>.80: P [tcp sum ok] 1:3(2) ack 1 win
8208 <nop,nop,timestamp 442135222 2569862135>
IP (tos 0x0, ttl  64, id 4613, offset 0, flags [DF], length: 52)
<web_address>.80 > <client_address>.21746: . [bad tcp cksum b503 (->b85c)!]
ack 3 win 2052 <nop,nop,timestamp 2569862140 442135222>
IP (tos 0x0, ttl  62, id 8199, offset 0, flags [DF], length: 54)
<client_address>.21746 > <web_address>.80: P [tcp sum ok] 1:3(2) ack 1 win
8208 <nop,nop,timestamp 442135926 2569862135>
IP (tos 0x0, ttl  64, id 41419, offset 0, flags [DF], length: 52)
<web_address>.80 > <client_address>.21746: . [bad tcp cksum b241 (->b59a)!]
ack 3 win 2052 <nop,nop,timestamp 2569862142 442135926>

IP (tos 0x0, ttl  62, id 8205, offset 0, flags [DF], length: 52)
<client_address>.21746 > <web_address>.80: F [tcp sum ok] 3:3(0) ack 1 win
8208 <nop,nop,timestamp 442136662 2569862135>
IP (tos 0x0, ttl  62, id 8209, offset 0, flags [DF], length: 54)
<client_address>.21746 > <web_address>.80: FP [tcp sum ok] 1:3(2) ack 1 win
8208 <nop,nop,timestamp 442137134 2569862135>
IP (tos 0x0, ttl  64, id 43519, offset 0, flags [DF], length: 58)
<web_address>.80 > <client_address>.21746: P [bad tcp cksum 9bee (->9f47)!]
1:7(6) ack 3 win 2052 <nop,nop,timestamp 2569862145 442137134>


There is only one packet from the web server (which is in fact my server
since the request was redirected to squid ) which finds its way to the
client and after that all the checksum are wrong and I suppose the packets
are dropped since they never reach my client (which is curl). I tried to
figure out why the checksum could be wrong but I am now out of ideas...

I hope someone can help me on this.

Reply via email to