i just use route -T X exec dhclient in 6.3 AWESOME
On Mon, Mar 19, 2018 at 7:54 AM, Samuel Wagen <[email protected]> wrote: > 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 > -- -- --------------------------------------------------------------------------------------------------------------------- Knowing is not enough; we must apply. Willing is not enough; we must do

