Hi there!

I asked, without an answer, something about nat-to and real IPs. Well, I
really need an answer there, so if someone get a clue, I will be glad tho
hear :)

Now, to the new issue!

Here in our WiFi ISP we are have contracted a tproxy service from FreeBSD
Brasil. It is somehow working, but I can not figure out exactly how. Here
is a diagram of the desired paths:

http://devio.us/~raitech/Obsd53PfTproxy.png

These are my rules by now:

RFC1918 = "{ 172.16/12, 192.168/16, 10/8, 127/8 }"
table <INT_NET> persist {  internal nets, all valid IPs }

ext_if_1 = "em0"
ext_gw_1 = "187.72.X.X"
ext_ip_1 = "187.72.X.X"

ext_if_2 = "em1"
ext_gw_2 = "187.72.X.X"
ext_ip_2 = "187.72.X.X"

ext_if_3 = "alc0"
ext_gw_3 = "187.72.X.X"
ext_ip_3 = "187.72.X.X"

int_if_1 = "em2"
int_gw_1 = "187.72.X.X"
int_ip_1 = "187.72.X.X"

squid_master_if = "em3"
squid_master_gw = "187.72.X.X"
squid_master_ip = "187.72.X.X"

set limit states 6304000
set limit tables 5000
set limit src-nodes 200000
set limit frags 3000
set optimization aggressive
set state-defaults pflow, no-sync

set skip on lo

block in log quick on {  \
 $ext_if_1,        \
 $ext_if_2,        \
 $ext_if_3,        \
 $squid_master_if, \
 $int_if_1 } from $RFC1918 label "blocking RFC1918"

# trying to prioritizing ACKs...
match set prio (3,5)
# ... and all traffic http. https over the others
match proto tcp to port { http, https } set prio (5,6)
match proto tcp from port { http, https } set prio (5,6)

match proto tcp to port { ssh, 9876 } set prio(5,7)

pass in on $int_if_1 proto tcp from { <INT_NET>, $int_gw_1 } to port http \
 route-to ($squid_master_if $squid_master_gw)

pass in on { $ext_if_1, $ext_if_2, $ext_if_3 } proto tcp from port http \
 to { <INT_NET>, $int_gw_1 } \
 route-to ($squid_master_if $squid_master_gw)

pass in on $squid_master_if proto tcp from { <INT_NET>, $int_gw_1 } to \
 port http no state route-to \
{ \
  ($ext_if_1 $ext_gw_1) , \
  ($ext_if_2 $ext_gw_2)   \
} least-states label "cahce external outbound balancing"

pass in on $squid_master_if proto tcp from port http    \
 to { <INT_NET>, $int_gw_1 } route-to ($int_if_1 $int_gw_1)   \
 label "cahce internal outbound routing"

An here are a pfctl -vsr output:

block drop in log quick on em0 inet from 172.16.0.0/12 to any label
"blocking RFC1918"
  [ Evaluations: 61764339  Packets: 332       Bytes: 32854       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em0 inet from 192.168.0.0/16 to any label
"blocking RFC1918"
  [ Evaluations: 5883927   Packets: 114       Bytes: 28621       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em0 inet from 10.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 5883813   Packets: 170       Bytes: 18354       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em0 inet from 127.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 5883643   Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em1 inet from 172.16.0.0/12 to any label
"blocking RFC1918"
  [ Evaluations: 60684174  Packets: 305       Bytes: 30912       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em1 inet from 192.168.0.0/16 to any label
"blocking RFC1918"
  [ Evaluations: 6862827   Packets: 93        Bytes: 9232        States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em1 inet from 10.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 6862734   Packets: 196       Bytes: 19396       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em1 inet from 127.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 6862538   Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on alc0 inet from 172.16.0.0/12 to any label
"blocking RFC1918"
  [ Evaluations: 50726925  Packets: 304       Bytes: 30856       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on alc0 inet from 192.168.0.0/16 to any label
"blocking RFC1918"
  [ Evaluations: 1251      Packets: 79        Bytes: 8268        States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on alc0 inet from 10.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 1172      Packets: 152       Bytes: 16948       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on alc0 inet from 127.0.0.0/8 to any label
"blocking RFC1918"
  [ Evaluations: 1020      Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em3 inet from 172.16.0.0/12 to any label
"blocking RFC1918"
  [ Evaluations: 50726392  Packets: 304       Bytes: 30856       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em3 inet from 192.168.0.0/16 to any label
"blocking RFC1918"
  [ Evaluations: 13589809  Packets: 76        Bytes: 8132        States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em3 inet from 10.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 13589733  Packets: 152       Bytes: 16948       States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em3 inet from 127.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 13589581  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em2 inet from 172.16.0.0/12 to any label
"blocking RFC1918"
  [ Evaluations: 39571927  Packets: 10414     Bytes: 478685      States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em2 inet from 192.168.0.0/16 to any label
"blocking RFC1918"
  [ Evaluations: 6364466   Packets: 1779      Bytes: 142401      States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em2 inet from 10.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 6362687   Packets: 32496     Bytes: 1375238     States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
block drop in log quick on em2 inet from 127.0.0.0/8 to any label "blocking
RFC1918"
  [ Evaluations: 6330191   Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match all set ( prio(3, 5) )
  [ Evaluations: 61717375  Packets: 13877464  Bytes: 10275632710  States:
3831  ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match proto tcp from any to any port = 80 set ( prio(5, 6) )
  [ Evaluations: 61717375  Packets: 13877464  Bytes: 10275632710  States:
3831  ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match proto tcp from any to any port = 443 set ( prio(5, 6) )
  [ Evaluations: 51200612  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match proto tcp from any port = 80 to any set ( prio(5, 6) )
  [ Evaluations: 51200612  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match proto tcp from any port = 443 to any set ( prio(5, 6) )
  [ Evaluations: 51200612  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match proto tcp from any to any port = 22 set ( prio(5, 7) )
  [ Evaluations: 51200616  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
match proto tcp from any to any port = 9876 set ( prio(5, 7) )
  [ Evaluations: 51200616  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass all no state allow-opts
  [ Evaluations: 61717379  Packets: 61549113  Bytes: 41451833770  States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em0 inet proto tcp from any port = 80 to <INT_NET> flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 61717379  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em1 inet proto tcp from any port = 80 to <INT_NET> flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 55197296  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on alc0 inet proto tcp from any port = 80 to <INT_NET> flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 38378103  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em0 inet proto tcp from any port = 80 to 187.72.X.X flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 48038032  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em1 inet proto tcp from any port = 80 to 187.72.X.X flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 44966361  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on alc0 inet proto tcp from any port = 80 to 187.72.X.X flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 41608198  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em2 inet proto tcp from <INT_NET> to any port = 80 flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 48044445  Packets: 1439990   Bytes: 894473590   States:
435   ]
  [ Inserted: uid 0 pid 19584 State Creations: 40060 ]
pass in on em2 inet proto tcp from 187.72.X.X to any port = 80 flags S/SA
keep state (no-sync, pflow) route-to 187.72.X.X@em3
  [ Evaluations: 3694317   Packets: 12437474  Bytes: 9381159120  States:
3396  ]
  [ Inserted: uid 0 pid 19584 State Creations: 128206]
pass in on em3 inet proto tcp from <INT_NET> to any port = 80 no state
label "cahce external outbound balancing" route-to <__automatic_9ca6f8d9_0>
least-states
  [ Evaluations: 38420511  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em3 inet proto tcp from 187.72.X.X to any port = 80 no state
label "cahce external outbound balancing" route-to <__automatic_9ca6f8d9_1>
least-states
  [ Evaluations: 13586403  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em3 inet proto tcp from any port = 80 to <INT_NET> flags S/SA
keep state (no-sync, pflow) label "cahce internal outbound routing"
route-to 187.72.X.X@em2
  [ Evaluations: 13731058  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]
pass in on em3 inet proto tcp from any port = 80 to 187.72.X.X flags S/SA
keep state (no-sync, pflow) label "cahce internal outbound routing"
route-to 187.72.X.X@em2
  [ Evaluations: 13586403  Packets: 0         Bytes: 0           States: 0
    ]
  [ Inserted: uid 0 pid 19584 State Creations: 0     ]

This is the same behavior with or without multipath routing. What bahavior?
Well, only rules for in on em3 that are destineted to internal network are
working, the others barelly catches a few thousands of packets. Very
strange...

But, as said before: more strange is the fact that the cache solution is
almost working, just some delays to load a page here, youtube gasps there,
but overall it seems to work!

Tested without multipath routing, without keep state, and the behavior are
the same.

Will apreciate any kind of help on this, thank you in advance.

Raimundo Santos

Reply via email to