[BSD] Hamá pf legyen kövér

Zeller Balázs zeller at axelero.hu
2005. Ápr. 12., K, 10:49:35 CEST


Hali!

Látom éppen dúl a pf téma gondoltam énis beszállok.
Szal csináltam egy olyan „tüzfalat” ami igazából csak annyit csinál, hogy load balance-ol kifelé két adsl-t, natol egyet, megpróbálja megoldani az adslnél
jövő feltöltés során szar a letöltés gondot és minden portot kivéve 1-et átpassol egy ms isa servernek (ez követelmény volt hogy a rule-okat rajtam kívül más is tudja változtatni ☹)
majd az isa natol még1-et és ott jön a helyi háló.

Topológia:

Inet1—--
        |---fbsd+pf---192.168.2.0/24---msisa2004---192.168.1.0/24---lan
Inet2---

Itt van a ruleset:

ext_if1="tun0"
ext_if2="tun1"
int_if="rl2"
lan_net="192.168.2.0/24"
ext_gw1="195.70.32.10"
ext_gw2="195.70.32.10"
server="192.168.2.2"
gre = "47"

scrub in all

#xxx adsl altq
altq on $ext_if1 priq bandwidth 350Kb queue { q_pri_1, q_def_1 }
queue q_pri_1 priority 7
queue q_def_1 priority 1 priq(default)

#yyy adsl altq
altq on $ext_if2 priq bandwidth 350Kb queue { q_pri_2, q_def_2 }
queue q_pri_2 priority 7
queue q_def_2 priority 1 priq(default)

#nat
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

#internetbank nat (csak egy if-en mehet)
nat on $ext_if2 from $lan_net to 195.56.141.44 -> ($ext_if2)

#ez akarna lenni az port atiranyitas
rdr on $ext_if1 proto tcp from any to any port 1:21 -> $server port 1:21
rdr on $ext_if2 proto tcp from any to any port 1:21 -> $server port 1:21

rdr on $ext_if1 proto tcp from any to any port 23:65535 -> $server port 23:65535
rdr on $ext_if2 proto tcp from any to any port 23:65535 -> $server port 23:65535

rdr on $ext_if1 proto udp from any to any port 1:65535 -> $server port 1:65535
rdr on $ext_if2 proto udp from any to any port 1:65535 -> $server port 1:65535

#pptp servernek kell (vpn)
rdr on $ext_if1 proto $gre from any to any -> $server
rdr on $ext_if2 proto $gre from any to any -> $server

#internetbank atiranyitas (csak egy if-en keresztül mehet)
rdr on $ext_if2 from 195.56.141.44 to any -> $server

#antispoof
antispoof for $ext_if1
antispoof for $ext_if2

pass all

pass out quick all keep state

#pass all outgoing packets on internal interface
pass out on $int_if from any to $lan_net

#pass in quick any packets destined for the gatewy itself
pass in quick on $int_if from $lan_net to $int_if

#altq tcp ack priorizing (feltöltés/letöltés gond)
pass out on $ext_if1 proto tcp from $ext_if1 to any flags S/SA \
keep state queue (q_def_1, q_pri_1)

pass in on $ext_if1 proto tcp from any to $ext_if1 flags S/SA \
keep state queue (q_def_1, q_pri_1)

pass out on $ext_if2 proto tcp from $ext_if2 to any flags S/SA \
keep state queue (q_def_2, q_pri_2)

pass in on  $ext_if2 proto tcp from any to $ext_if2 flags S/SA \
keep state queue (q_def_2, q_pri_2)

#load balance
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto tcp from $lan_net to any flags S/SA modulate state

pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto { udp, icmp } from $lan_net to any keep state

#  general "pass out" rules for external interfaces
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

#  route packets from any IPs on $ext_if1 to $ext_gw1 and the same for
#  $ext_if2 and $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any


Szal a load balance müxik is legalábbis az mrtg szerint amit nem látok hogy müködne a "feltöltés/letöltés" javítás.
Legalábbis ha nézem a "pfctl -s queue -v" akkor a 7 prioritású queue-k mindig üresek. Nem kéne ezt a részt "keep state queue (q_def_X, q_pri_X)"
minden sor végére odatenni?
A másik kérdés/kérés hogy nem lehetne vhogy letisztultabbá tenni a ruleset-et? Nem vagyok biztos benne hogy nem engedélyezek túl sokszor mindent :)
Ötletek?

Üdv zeller




További információk a(z) BSD levelezőlistáról