DSL/ethernet network perf problem with pf

Patrick Proniewski patpro at patpro.net
Mon Jul 30 08:21:08 UTC 2007


Hello,

I'm running a FreeBSD 6.2 on a Tyan motherboard. The board has 3  
ethernet ports (fpx0, em0, em1). It uses `pf` to share/protect an  
internet access over xDSL plugged in fxp0 to 2 LANs on em0/1.
When pf is loaded, my transfert rate for a file on the internet  
reaches about 150-200 KB/s max, but I can download 2 or 3 files each  
at 120-150 KB/s at the same time.

If i disable pf (by unloading the kernel module), my transfert rate  
jumps to 650-700 KB/s

Here is my pf.conf :

# macros
int_if = "em0"
int_if_sec = "em1"
ext_if = "fxp0"
wif_if = "ath0"

tcp_services = "{ 22, 113, 80, 443, 25, 53, 554 }"
udp_services = "{ 53 }"
admin_tcp_services = "{ 311, 625, 5900, 5988 }"
admin_udp_services = "{ 3283 }"

icmp_types = "echoreq"

priv_nets = "{ 127.0.0.0/8, 172.16.0.0/12, 10.0.0.0/8 }"

# Tables: similar to macros, but more flexible for many addresses.
table <admin_nets> persist { --some ip's-- }
table <friends> persist { --some ip's-- }
table <spammers> persist file "/etc/pf.liste_ip_spamer"
table <sshscan> persist file "/etc/pf.liste_ip_ssh_scan"
table <webspam> persist file "/etc/pf.liste_ip_webspam"
table <openarena> persist { --some ip's-- }

# options
set block-policy return
set loginterface $ext_if

# scrub
scrub in all

# nat/rdr
nat on $ext_if from $int_if:network to any -> ($ext_if)
nat on $ext_if from $int_if_sec:network to any -> ($ext_if)

# filter rules
block log all
block in log quick proto tcp from <spammers> to any port smtp
block in log quick proto tcp from <sshscan> to any port ssh
block in log quick proto tcp from <webspam> to any port http

pass quick on lo0 all

block drop in  log quick on $ext_if from $priv_nets to any
block drop out log quick on $ext_if from any to $priv_nets

pass in on $ext_if inet proto tcp from any to ($ext_if) port  
$tcp_services flags S/SA keep state
pass in on $ext_if inet proto udp from any to ($ext_if) port  
$udp_services keep state

##### admin
pass in log on $ext_if inet proto tcp from { <admin_nets>,  
<friends> } to { ($ext_if), 192.168.0.2 } port $admin_tcp_services  
flags S/SA keep state
pass in log on $ext_if inet proto udp from { <admin_nets>,  
<friends> } to { ($ext_if), 192.168.0.2 } port $admin_udp_services  
keep state
##### friends
#pass in log on $ext_if inet proto tcp from <friends> to ($ext_if)  
flags S/SA keep state
#pass in log on $ext_if inet proto udp from <friends> to ($ext_if)  
keep state
##### OpenArena
pass in on $ext_if inet proto tcp from <openarena> to ($ext_if) port  
56789 flags S/SA keep state
pass in on $ext_if inet proto udp from <openarena> to ($ext_if) port  
56789 keep state

pass in inet proto icmp all icmp-type $icmp_types keep state

pass in  on $int_if from $int_if:network to any keep state
pass out on $int_if from any to $int_if:network keep state
pass in  on $int_if_sec from $int_if_sec:network to any keep state
pass out on $int_if_sec from any to $int_if_sec:network keep state

pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep state


any idea how I can reach 650-700 KB/s with pf enabled ?
regards,

patpro


More information about the freebsd-performance mailing list