From CoreBSD

multihoming

C -> A = port www , browsing
C -> B = port 6667, mirc
A -> internet = 1.1.1.2/24
B -> internet = 2.2.2.1/26
C -> client = 10.10.10.0/30 (GW = 10.10.10.2/30)

Tujuan dari design ini adalah mengimplementasikan konsep loadbalancing dan multihoming pada satu gateway yg berfungsi sebagai peering dari client. Di sini client di implementasikan memilikki dua jalur dalam berinternet, yaitu jalur mirc/irc port 6667 – 7000, dan jalur browsing port www(80), kenapa demikian ??? karena untuk implementasi ini untuk jalur C → A, port 5000 – 7000 di tutup sehingga pada jalur tsb hanya bisa melakukan browsing, dan ini hanya digunakan dalam percobaan semata dgn menerapkan konsep/metode load balancing & multihoming, dan bisa jadi ini bisa di implementasikan dalam real network dimana misalnya sebuah warnet/game station yg mau membagi akses internetnya dgn menggunakan 2 koneksi (ISP) ke client dalam 1 network. Ini mungkin bisa saja untuk koneksi dari 2 link yg berbeda atau sama tsb menggunakan 2 mesin/box yg di fungsikan sebagai gateway, dan hal ini terbatas hanya dalam 1 network , jd nantinya akan ada 1 network khusus browsing/surfing/internetan dan 1 network khusus chating/game online,dll. Nah dgn implementasi ini di harapkan tidak ada lagi membedakan network khusus browsing/internetan dan network khusus chating/game online, jd semua network bisa internetan/browsing/chating/gameonline hanya dgn mengarahkan/memetakan jalur koneksi yg ada untuk bisa di pakai semua network.
contoh file /etc/pf.conf

local_net = "10.10.10.0/30"
ext_if0 = "fx0"
ext_if1 = "fx1"
int_if0 = "fx3"
ext_gw0 = "1.1.1.1/24"
ext_gw1 = "2.2.2.2/26"

nat on $ext_if0 from !($ext_if0) -> ($ext_if0:0)
nat on $ext_if1 from $local_net to any -> ($ext_if1)
rdr pass on $int_if0 proto tcp to port 80 -> $int_if0 port 3128
rdr pass on $ext_if1 proto tcp from port 6667 -> $ext_if1 port 6667

pass out on $int_if0 from any to $local_net
pass in quick on $int_if0 from $local_net to $int_if0
pass in on $int_if0 route-to { ($ext_if0 $ext_gw0), ($ext_if1 $ext_gw1) } round-robin proto tcp from $local_net to any flags S/SA modulate state
pass in on $int_if0 route-to { ($ext_if0 $ext_gw0), ($ext_if1 $ext_gw1) } round-robin proto { udp, icmp } from $local_net to any keep state

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_if1 route-to { $ext_if0 $ext_gw0 } from $ext_if0 to any