Hi Dale,

I had unbound working with iked for a short time. I actually configured the 
interface enc0 like so;

** Server hostname.enc0
inet 10.0.5.1 255.255.255.0 10.0.5.255

---------------------------------------
** Server iked.conf
ikev2 “roaming" passive esp \
      from 0.0.0.0/0 to 0.0.0.0/0 \
      local egress peer any \
      psk "-----------" \
      config protected-subnet 0.0.0.0/0 \
      config address 10.0.5.0/24 \
      config name-server 10.0.5.1 \
      tag "IKED"

As you can see I then added the IP of the enc0 interface in iked.conf "config 
name-server 10.0.5.1”.
I then added the subnet 10.0.5.0/24 as an “allow “ in the unbound.conf

access-control: 10.0.5.0/24 allow

Though I too am not sure if this is a good way of using iked and unbound. 
In fact I actually stopped using this and just added a Public DNS server like 
1.1.1.1. 
>From all my reading, I think it is not required to configure the enc0 
>interface. 

Further testing using an OpenBSD iked client, I had very little success is 
making that work. 
For my scenario I have iPhones and MacBooks using the native ikev2 Apple client 
and they work fine.
All the clients get the Public IP of the iked Server when they connect.

Nino

> On 19 Nov 2019, at 7:46 am, Dale C. <[email protected]> wrote:
> 
> I'm thinking you're correct Chuck, I can't route traffic for localhost
> through iked...
> 
> So... "It might be necessary to exclude this traffic from the
> flows to ensure connections to services running locally (such as a
> local resolver)
> 
> ^ Then I'd have local dns while connected to my VPN?
> 
> OH... queries to external nameservers will still go through the VPN
> though? So it should be alright?
> 
> I'd much rather be doing DNS on the responder localhost though...
> isn't that the correct way here?
> 
> So, I'll try that, but any better solution for openbsd -> openbsd iked
> when both are using unbound localhost DNS would be appreciated :)
> 
> It works.
> 
> Thanks Chuck ;)
> 
> On 11/18/19, Dale C. <[email protected] <mailto:[email protected]>> wrote:
>> Chuck,
>> 
>> Hey thanks for the information. Yeah I've tried having unbound listen
>> on 10.0.1.2 (the VPN support net), that didn't work. I have not tried
>> putting unbound on an external interface, and would like to avoid
>> that.
>> 
>> I've actually taken unbound out of the equation on both sides.
>> Disabled unbound, commented supercede directive from dhclient and used
>> public name servers on both ends - that didn't work.
>> 
>> Today, I'll try some things again with the simplified pf confs. I'll
>> get some output from pflog. I'll try putting unbound on the public IP.
>> 
>> In the faq there are a few lines:
>> 
>> "Since all traffic goes through the VPN, including traffic targeted at
>> localhost, it might be necessary to exclude this traffic from the
>> flows to ensure connections to services running locally (such as a
>> local resolver) reach the right target. This can be achieved by adding
>> a single line to /etc/ipsec.conf on the initiator: flow from
>> 127.0.0.1/32 to 127.0.0.1/32 type bypass"
>> 
>> ^ I'm confused by this, i excluded this ipsec bypass and the rdr-to
>> rule in the responder pf conf. I would've expected that to work with
>> DNS targeting localhost? I'm also not clear how `match out log on enc0
>> inet all nat-to 10.0.5.2' behaves, is it akin to a "quick" directive?
>> Packets do not evaluate further rules because there are no more inet
>> packets after this? Does the position of this line in my initiator
>> pf.conf seem reasonable? I think perhaps it should go up...
>> 
>> Also this: "One caveat with using an OpenBSD client is that it doesn't
>> send configuration requests to the responder to configure its IP, so
>> the initiator needs to manually NAT its outgoing packets on the enc0
>> interface so that packets appear on the responder with an IP on the
>> VPN subnet."
>> 
>> I tried a config name-server directive on the initiator iked.conf, but
>> because it wants to verify the host at load-time, I get iked start
>> errors with it. *I think this is the reason anyway, I'll take a closer
>> look today*... So, I'm kind of wondering if a seamless way to switch
>> in and out of the VPN exists for openbsd clients? I should be able to
>> `ikectl couple/decouple' and just have it work right, so I'm looking
>> for a way to configure name-server in the iked.conf initiator ideally?
>> 
>> I'll go through your post a few more times and try your suggestions,
>> thank you very much!
>> 
>> Dale
>> 
>>> Chuck Wrote
>>> I am not sure if you noticed but 127.0.0.1 is always local to the machine
>>> using it.  If you try routing with it the packets will never leave the
>>> system.  If they do somehow leave then the system getting them will
>>> reject
>>> it as the packet did not come from itself.  I mention this as I see in
>>> both resolve.conf files the nameserver is listed as 127.0.0.1
>>> 
>>> You might try instead to have the unbound listen on the inside (or even
>>> the outside) address.  After that only allow access to it from the IKE
>>> networks.
>>> 
>>> I would also mention that rdr-to is not NAT.  It does reroute the packets
>>> but the return packets can take a different route.  If the unbound is
>>> listening on 127.0.0.1 then that is where the packets will be coming
>>> from.
>>> You would need to NAT the outgoing DNS packets to the correct interface.
>>> 
>>> No idea if any of this will help you.
>>> 
>>> 
>>> I did see a request on pflog, here is a really brief run down on how it
>>> is
>>> used.
>>> 
>>> 1. Add 'log' to one of the rules.  Ex rule from your pf rules:
>>> #name servers
>>> pass out log on $ext proto udp from $ext to any port $udp_services
>>> 
>>> 2. View the pflog after some of the packets have been captured.  Ex:
>>> /usr/sbin/tcpdump -n -e -ttt -s1500 -r /var/log/pflog
>>> 
>>> This will display the packets in tcpdump format.  The -e option is to
>>> give
>>> you the rule number that captured the packet, in case you have multiple
>>> logging rules.  You can get the rule number from your pf.conf file by
>>> doing: /usr/sbin/pf -nvvvf /etc/pf.conf
>>> 
>>> The -n is so the rules do not reload.  The rule is @#
>>> 
>>> 
>>> Have Fun!
>>> Chuck Hall
>>> 
>>> 
>>>> Update:
>>>> 
>>>> Spent a lot of time trying different things, still no DNS.
>>>> 
>>>> Simplified and cleaned up all my confs as much as possible.
>>>> 
>>>> Everything works, but DNS.
>>>> 
>>>> ##############################################initiator pf.conf
>>>> #declare variables
>>>> tcp_services = " { ssh, https, http } "
>>>> udp_services = " { domain } "
>>>> ext = " iwn0  "
>>>> 
>>>> #tables
>>>> table <whitelist> persist { 155.138.139.17 }
>>>> 
>>>> set skip on lo0
>>>> 
>>>> block drop
>>>> 
>>>> #sshserver
>>>> pass in log on $ext proto tcp from any to port 22 synproxy state
>>>> 
>>>> #name servers
>>>> pass out log on $ext proto udp from $ext to any port $udp_services
>>>> 
>>>> #Serving dns on lan
>>>> pass in on $ext proto udp from 192.168.0.0/24 to any port $udp_services
>>>> 
>>>> #State
>>>> pass out keep state
>>>> 
>>>> #roadwarrior
>>>> match out log on enc0 inet all nat-to 10.0.1.2
>>>> 
>>>> ##############################################initiator iked.conf
>>>> 
>>>> ikev2 'roadwarrior' active esp \
>>>>        from 0.0.0.0/0 to 0.0.0.0/0 \
>>>>        peer 155.138.139.17 \
>>>>        srcid roadwarrior \
>>>>        dstid deceptions.ca
>>>> 
>>>> ##############################################initiator resolv.conf
>>>> 
>>>> # Generated by iwn0 dhclient
>>>> nameserver 127.0.0.1
>>>> lookup file bind
>>>> 
>>>> ##############################################initiator ipsec.conf
>>>> #flow from 127.0.0.1/32 to 127.0.0.1/32 type bypass
>>>> #this is commented, but tried both ways on initiator
>>>> #with it commented, it should go to the responder localhost
>>>> #which is exactly where i want it.
>>>> 
>>>> ##############################################responder pf.conf
>>>> ext = " vio0 "
>>>> 
>>>> table <sshdbruteforce> persist
>>>> table <httpdbruteforce> persist
>>>> table <bruteforce> persist file "/etc/bruteforce"
>>>> table <goodhosts> persist
>>>> 
>>>> set skip on lo0
>>>> 
>>>> block drop in quick from { <bruteforce>, <httpdbruteforce>,
>>>> <sshdbruteforce> }
>>>> block drop
>>>> 
>>>> pass in log on $ext proto udp from <goodhosts> to 155.138.139.17 port
>>>> {isakmp, ipsec-nat-t} tag IKED
>>>> pass in log on $ext proto esp from <goodhosts> to 155.138.139.17 tag
>>>> IKED
>>>> pass in log on enc0 tagged ROADW
>>>> match out log on $ext inet tagged ROADW nat-to $ext
>>>> match in quick on enc0 inet proto { tcp, udp } to port 53 rdr-to
>>>> 127.0.0.1 port 53
>>>> #tried both with and without ^ this line on both conditions of
>>>> initiator ipsec.conf
>>>> #neither worked
>>>> 
>>>> #sshd
>>>> pass in log on $ext proto tcp from any to port 22 synproxy state
>>>> (source-track rule, max-src-states 10, max-src-conn 10,
>>>> max-src-conn-rate 3/60, overl>
>>>> 
>>>> #httpd
>>>> pass in log on $ext proto { tcp } from any to port {80, 443} modulate
>>>> state (source-track rule, max-src-states 10, max-src-conn 10,
>>>> max-src-conn-rate >
>>>> 
>>>> #mail
>>>> pass in log on $ext proto tcp from any to port 25 modulate state
>>>> (source-track rule, max-src-states 20, max-src-conn 20,
>>>> max-src-conn-rate 20/600, ove>
>>>> 
>>>> # By default, do not permit remote connections to X11
>>>> block return in on ! lo0 proto tcp to port 6000:6010
>>>> 
>>>> # Port build user does not need network
>>>> block drop quick on any proto {tcp udp} user _pbuild
>>>> 
>>>> pass out keep state
>>>> 
>>>> ##############################################responder iked.conf
>>>> 
>>>> ikev2 'responder_rsa' passive esp \
>>>>    from 0.0.0.0/0 to 10.0.1.0/24 \
>>>>    local 155.138.139.17 peer any \
>>>>    srcid deceptions.ca \
>>>>    tag "ROADW"
>>>> 
>>>> ##############################################responder unbound.conf
>>>> 
>>>> # $OpenBSD: unbound.conf,v 1.19 2019/11/07 15:46:37 sthen Exp $
>>>> 
>>>> server:
>>>>        outgoing-interface: 155.138.139.17
>>>>        interface: 127.0.0.1
>>>>        #interface: ::1
>>>>        do-ip6: no
>>>> 
>>>>        access-control: 0.0.0.0/0 refuse
>>>>        access-control: 10.0.0.0/8 allow
>>>>        access-control: 127.0.0.0/8 allow
>>>>        #access-control: ::0/0 refuse
>>>>        #access-control: ::1 allow
>>>> 
>>>>        #Files
>>>>        root-hints: "/var/unbound/etc/root.hints"
>>>>        pidfile: "/var/unbound/unbound.pid"
>>>> 
>>>>        #DNS Validation
>>>>        auto-trust-anchor-file: "/var/unbound/db/root.key"
>>>>        val-log-level: 2
>>>> 
>>>>        #logging
>>>>        logfile: "/var/unbound/unbound.log"
>>>>        verbosity: 2
>>>> 
>>>>        #NeverUseDeez
>>>>        private-address: 192.168.0.0/16
>>>>        private-address: 172.16.0.0/12
>>>>        private-address: 10.0.0.0/8
>>>>        private-domain: "local."
>>>> 
>>>>        #HardenOptions
>>>>        harden-glue: yes
>>>>        harden-dnssec-stripped: yes
>>>>        hide-identity: yes
>>>>        hide-version: yes
>>>>        aggressive-nsec: yes
>>>> 
>>>>        #OtherOptions
>>>>        #use-caps-for-id: yes
>>>>        #prefetch: yes
>>>>        minimal-responses: yes
>>>>        do-not-query-localhost: no
>>>> 
>>>> remote-control:
>>>>        control-enable: yes
>>>>        control-interface: /var/run/unbound.sock
>>>> 
>>>> ##############################################responder resolv.conf
>>>> 
>>>> # Generated by vio0 dhclient
>>>> nameserver 127.0.0.1
>>>> lookup file bind
>>>> private-address: 192.168.0.0/16
>>>> 
>>>> 
>>>> On 11/17/19, Dale C. <[email protected]> wrote:
>>>>> Additional Info:
>>>>> 
>>>>> This is an OpenBSD -current -> OpenBSD -current IKED connection.

Reply via email to