You need ifstated or relayd, here is my ifstated.conf (I use 3 different pf.conf, 1 Dual Wan conf, and 1 gw1 conf and 1 gw2 conf):
Code:
net1 = '"ping -q -c1 -w1 10.1.1.1 >/dev/null" every 5'
net2 = '"ping -q -c1 -w1 10.222.222.222 >/dev/null" every 5'
init-state one
state one {
init {
run "route delete default 10.1.1.1"
run "route delete default 10.222.222.222"
run "route add -mpath default 10.1.1.1"
run "route add -mpath default 10.222.222.222"
}
if ! $net1 {
if $net2
set-state two
}
if ! $net2 {
if $net1
set-state three
}
}
state two {
init {
run "route delete default 10.1.1.1"
run "route delete default 10.222.222.222"
run "route add -mpath default 10.222.222.222"
run "pfctl -f /etc/pf.conf.gw2"
}
if $net1 {
if $net2
set-state four
}
if ! $net2 {
if $net1
set-state three
}
}
state three {
init {
run "route delete default 10.1.1.1"
run "route delete default 10.222.222.222"
run "route add -mpath default 10.1.1.1"
run "pfctl -f /etc/pf.conf.gw1"
}
if $net1 {
if $net2
set-state four
}
if ! $net1 {
if $net2
set-state two
}
}
state four {
init {
run "route delete default 10.1.1.1"
run "route delete default 10.222.222.222"
run "route add -mpath default 10.1.1.1"
run "route add -mpath default 10.222.222.222"
run "pfctl -f /etc/pf.conf"
}
if ! $net1 {
if $net2
set-state two
}
if ! $net2 {
if $net1
set-state three
}
}