Hello David & Misc,

While these methods are functional and powerful, I believe they introduce a
significant amount of configuration overhead; particularly in dynamic
environments where WAN interfaces may change, or where simple per-interface
WireGuard isolation is desired.

This led me to wonder:
Would it be possible to extend the WireGuard implementation to support an
explicit bind option for the local address. Something like:
ifconfig wg1 wglistenip A.B.C.D

This would allow the interface to handle all traffic via the intended WAN
IP, without the need for a separate rdomain, no PF trickery, and no
dependency on manipulating the global routing table.

I realize that OpenBSD favors architectural clarity over feature creep, but
from a usability perspective, this would make WireGuard deployments in
multi-WAN scenarios considerably simpler and easier to maintain.

Do you think such a feature could align with the system's design
philosophy? Or is there a fundamental reason why such explicit binding is
not desired or viable?

Thanks again for your time and input.

On Fri, Aug 1, 2025 at 9:33 AM David Gwynne <da...@gwynne.id.au> wrote:

> On Wed, Jul 30, 2025 at 12:10:02AM +0000, Andrew Dekker wrote:
> > To preface, please bear with me, my terminology may not be accurate but
> I'll try to describe what I've been struggling with this all week.
> > I am using 7.7 as a router/firewall with multiple lan's
> > I would like to have multiple egress vpn's over wireguard, for
> individual lans
>
> ok. i think the important thing to know here is that the interface a
> packet goes out on is determined by a route lookup, and a route lookup
> only uses the destination ip address. it does not care which interface
> a packet comes from, or what the source address in the packet is, it's
> only the destination ip that matters.
>
> this means if you want to route packets from em1 out wg1, and packets
> from em2 out wg2, regardless of the destination ip addresses, you have
> to override the route decision with route-to in pf, or use multiple
> routing tables/domains.
>
> i personally find separate rdomains easier to work with, particularly
> in failover situations.
>
> so for your setup, i would have configs like this:
>
> # cat /etc/hostname.lo1
> rdomain 1
> inet 127.0.0.1
> up
> # cat /etc/hostname.wg1
> wgrtable 0
> rdomain 1
> inet WGIP blah
> !route add default WGPEER
> up
> # cat /etc/hostname.em1
> rdomain 1
> inet foo bar
> up
>
> # cat /etc/hostname.lo2
> rdomain 2
> inet 127.0.0.1
> up
> # cat /etc/hostname.wg2
> wgrtable 0
> rdomain 2
> inet blah blah
> !route add default WG2PEER
> up
> # cat /etc/hostname.em2
> rdomain 2
> inet foo bar
> up
>
> > I have 5 dedicated ports on my router. em0 is wan, em1-4 are individual
> lans. I have some vlans too but thats not important.
> >
> > I would like to have 1 wireguard tunnel per lan, so that the lan traffic
> flows through its tunnel only, except for em1 which
> > will need to failover to the default route on em0 when wg1 is down.
>
> you can do this with sysctl net.inet.ip.multipath=1 and a low
> priority link between rdomain 1 and 0.
>
> # cat /etc/hostname.rport0
> rdomain 0
> inet x.x.x.0 255.255.255.255 x.x.x.1
> !route add em1.subnet/prefix x.x.x.1
> up
> # cat /etc/hostname.rport1
> rdomain 1
> priority 2 # lower than wg1 priority
> parent rport0
> inet x.x.x.1 255.255.255.255 x.x.x.0
> !route add default x.x.x.0 -mpath
> up
>
> the default route in rdomain 1 via wg1 should be preferred until wg1 is
> taken down, then the default route over rport0 should take effect.
>
> > I have tried with manually creating wg interfaces and gateways, using pf
> and rtables but am not having any luck getting wg
> > to handshake unless I route 0/1 and 128/1 to the wg interface.
> >
> > wg-quick is out of the question it seems as it automatically adds routes
> which prevent the other lans from using their gateways.
> >
> > Does anyone know how to setup these gateways, routes and pf rules
> properly that individual lans can exit through different wg interfaces?
> > And how to connect multiple wg interfaces at the same time?
>
> again, i think the trick is to partition these interfaces into separate
> rdomains.
>
>

Reply via email to