Hi,

James(ja...@jmp-e.com) on 2020.05.28 11:12:29 +0100:
> Thanks. Your solution works but is not ideal for my situation. The
> reason it's not ideal is that one of the rdomains gets its nameserver
> from DHCP and I don't think unbound can read this information.
> 
> For example, In the case of a captive portal or floating between APs I 
> would like DNS to work on different LANs where outbound DNS queries are
> blocked. 
> 
> I'm trying to build an isolated network environment in which all traffic
> is routed over an interface with a custom DNS server and no network leaks.
> 
> My solution so far is as follows:
>      ___________      ___________
>     |           |    |           |
>     | rdomain0  |    |  rdomain1 |
>     |   pair0   |----|    pair1  |
>     |    tun0   |    |    wlan0  |
>     |___________|    |___________|
> 
>       with pf tagging and NAT'ing tun0 traffic behind wlan0.
>       rdomain0 DNS queries should be routed to a fixed address and
>       rdomain1 DNS queries should be sent to the nameserver as per
>       /etc/resolv.conf generated from dhclient.
> 
> Linux's implementation of network namespaces allows for custom
> resolv.conf files per network namespace [1]. The problem I 
> currently face is that only 1 rdomain can perform DNS queries at a 
> time by modifying /etc/resolv.conf.

This should work in OpenBSD 6.7:

run unwind in rdomain 0 (this is optional, kind of, but a good idea to
see how it works):

  rcctl enable unwind
  rcctl start unwind

then set your resolver to 127.0.0.1:

  echo "supersede domain-name-servers 127.0.0.1;" > /etc/dhclient.conf
  dhclient <if>

That assumes that your rdomain 0 uses dhcp, if it does not, just set the
nameserver in /etc/resolv.conf to 127.0.0.1.

Now check that DNS works in rdomain 0.

If it does, run unwind in your rdomain1, same method as Tom described for
nsd:

  ln -s /etc/rc.d/unwind /etc/rc.d/unwind1
  rcctl enable unwind1
  rcctl set unwind1 rtable=1
  rcctl start unwind1

Now put the supersede option into the dhclient.conf for rdomain 1,
and run dhclient there.

Dns in rdomain 1 should work, and 

  route -T 1 exec unwindctl sta

should show that its using the dhcp supplied nameserver:

$ unwindctl sta
1. recursor        validating,  50ms   3. stub             resolving,  90ms
2. dhcp            validating, 150ms   4. oDoT-dhcp             dead,   N/A

--> see ...........^^^^^^^^^^ here

> 
> Thanks,
> 
> 
> 
> [1] https://www.man7.org/linux/man-pages/man8/ip-netns.8.html
> 
> On Wed, May 27, 2020 at 11:35:11PM +0100, Tom Smyth wrote:
> >howdy,
> >
> >you can use symbolic links for /etc/rc.d/nsd   to /etc/rc.d/nsd1
> >and to    /etc/rc.d/nsd2  to  /etc/rc.d/nsdn  where 1,2 n are your  r
> >domains for your
> >dns servers (authoritive) or you can use unbound instead of nsd
> >if it is just a forwarding  dns server
> >
> >then use  for a dns server for rdomain1
> >rcctl enable nsd1
> >rcctl set nsd1 rtable=1
> >
> >repeat the procedure for each domain configured
> >rcctl enable nsd2
> >rcctl set nsd2 rtable=2
> >
> >then go back to rdomain0
> >route -T0 exec ksh
> >and then run the following to start each of your daemons
> >
> >rcctl start nsd1
> >rcctl start nsd2
> >
> >and so on and so fourth...
> >
> >I used to have issues starting and stopping daemons if I was not in
> >the correct domain when running the rcctl command,
> >I saw a diff by  ajacoutot   a few months / (years ago that might have
> >fixed the rcctl starting domains from a shell in a different
> >Rdomain...
> >I just got into the habit...  of going to the correct rdomain of the
> >daemon or rdomain0 before running the rcctl command to start / stop or
> >restart the daemon
> >
> >Hope this helps,
> >
> >Tom Smyth
> >
> >
> >On Wed, 27 May 2020 at 23:24, James <ja...@jmp-e.com> wrote:
> >>
> >>Hi all,
> >>
> >>How can I allow different rdomains to use separate DNS nameservers?
> >>
> >>Thanks
> >>
> >
> >
> >-- 
> >Kindest regards,
> >Tom Smyth.
> >
> 

-- 

Reply via email to