And of course, too much copy paste while trying to use documentation IP ranges. The two gateways in pf.conf above should be
isp_a_gw = "198.51.100.1" isp_b_gw = "203.0.113.1" The rest stands. On Mon, Mar 19, 2018 at 1:40 PM, Samuel Wagen <[email protected]> wrote: > Hello, > > I'm trying to build a home router with OpenBSD. I have two ISPs, both are > giving me real IPs, one with straight DHCP (ISP_A), the other - via PPPoE > (ISP_B). I've described the topology with more detail in the diagram below. > > I wanted to use PF with routing domains instead of multipath forwarding, due > to multipath being very finicky when a link goes down. My current setup is > described below. I have the following issues: > > - Initially I can't pass traffic from the LAN. I think this is due to the > packets on em0 being dropped before PF has a chance to reach them, due > to missing default route on rdomain 0. If I execute the following two > commands: > # route -T 0 add 198.51.100.0/24 127.0.0.1 > # route -T 0 add 203.0.113.0/24 127.0.0.1 > then traffic starts passing half of the time - if the round-robin > decides it should go over the PPPoE link (ISP_B) - traffic from the LAN > flows. If, however, it decides to go through the other link (ISP_A) - > nothing passes, and I get the following kernel messages: > > arpresolve: 198.51.100.0: route contains no arp information > > - Traffic from the gateway itself to the Internet always fails, unless I > specify a routing domain manually (route -T 1 exec whatever). Not sure > what bogus route to add here, so that packets aren't dropped before PF, > and what to add to PF so that they flow. > > In other words, I'm stuck, and need some pointers on how to continue and what > am I doing wrong. I'm running latest snapshot, but also tried with 6.2. > > Many thanks in advance. > > Here's the info about my config, let me know if you need me to provide some > more. The "internet" networks are from RFC5737 for illustration purposes. > > 1. Network diagram > > +---------+ +---------+ > | ISP_A | | ISP_B | > +---+-----+ +---+-----+ > | | > | | > | | > ++-----+-------------------------+----------------++ > || em1 em2/pppoe0 || > || DHCP client real IP || > || IP: 198.51.100.20 IP: 203.0.113.40 || > || Net: 198.51.100.0/24 Net: 203.0.113.0/24 || > || GW: 198.51.100.1 GW: 203.0.113.1 || > || rdomain 1 rdomain 2 || > G| group isp_a group isp_b |G > A| |A > T| |T > E+- - - - - - - - - - - NAT- - - - - - - - - - - -+E > W| |W > A| |A > Y| em0 |Y > || DHCP server || > || IP: 172.16.16.1 || > || Net: 172.16.16.0/24 || > || rdomain 0 || > || group lan || > ++--------------------+---------------------------++ > | > | > | > +--+--------+ > | LAN | > +-----------+ > > > 2. Interface config files > > - /etc/hostname.em0 > > inet 172.16.16.1 255.255.255.0 172.16.16.255 group lan > > - /etc/hostname.em1 > > dhcp group isp_a rdomain 1 > > - /etc/hostname.em2 > > up > > - /etc/hostname.pppoe0 > > inet 0.0.0.0 255.255.255.255 NONE \ > pppoedev em2 authproto chap \ > authname 'user' authkey 'verysecret' \ > group isp_b \ > rdomain 2 \ > up > dest 0.0.0.1 > !/sbin/route -T 2 add default -ifp pppoe0 0.0.0.1 > > > 3. DHCP server config (/etc/dhcpd.conf) > > subnet 172.16.16.0 netmask 255.255.255.0 { > option domain-name-servers 172.16.16.2, 172.16.16.3; > option routers 172.16.16.1; > range 172.16.16.100 172.16.16.199; > } > > > 4. PF config > > # Need to figure out how avoid hardcoding these > isp_a_gw = "172.16.18.1" > isp_b_gw = "192.168.68.1" > > set debug debug > > match in log all scrub (no-df random-id max-mss 1440) > > match out log on em1 from (lan:network) nat-to (em1) > match out log on pppoe0 from (lan:network) nat-to (pppoe0) > > pass out log on lan to (lan:network) > pass in log quick on lan from (lan:network) to (lan) > > pass in log on lan from (lan:network) \ > route-to { (em1 $isp_a_gw), (pppoe0 $isp_b_gw) } \ > round-robin > > pass out log on em1 from pppoe0 route-to (pppoe0 $isp_b_gw) > pass out log on pppoe0 from em1 route-to (em1 $isp_a_gw) > > pass out log quick on em1 inet from (em1) modulate state rtable 1 > pass out log quick on pppoe0 from (pppoe0) modulate state rtable 2 > > > 5. Additional issues > > - How to avoid hardcoding the ISP defaut routes? > - How to use sticky sessions instead of round-robin? > - How to deal with links going down? E.g. not try to send traffic to a failed > link. > > > -- > sw -- sw

