Julian Elischer <jul...@freebsd.org> wrote:
> 
> On 27/12/2015 4:24 AM, Michael Grimm wrote:

>> I am currently stuck, somehow, and I do need your input. Thus, let me 
>> explain, what I do want to achieve:
>> 
>> I do have two servers connected via an ipsec/tunnel ...
>>      [A] dead:beef:1234:abcd::1 <—> dead:feed:abcd:1234::1 [B]
>> … which is sending all traffic destined for dead:beef:1234:abcd::/64 and 
>> dead:feed:abcd:1234::/64 through the tunnel, and vice versa.
>> 
>> That did run perfectly well during the last years until I decided to give 
>> VNET jails a try. Previously, some of my old fashioned jails got an IPv6 
>> address attached like dead:beef:1234:abcd:1:2::3, and I could reach that 
>> address from the remote server without any routing/re-directing or alike, 
>> necessary. Now, after having moved those jails to VNET jails (having those 
>> addresses bound to their epairXXb interfaces), I cannot reach those 
>> addresses within those jails any longer.
>> 
>> >From my point of view and understanding this must have to do with lack of 
>> >proper routing, but I am not sure, if that is correct, thus my questions to 
>> >the experts:
>> 
>> 1) Is my assumption correct, that my tunnel is "ending" after having passed 
>> my firewalls at each server, *bevor* decrypting its ESP traffic into its 
>> final destination (yes, I do have pf rules to allow for esp traffic to pass 
>> my outer internet facing interface)?
>> 
>> 2) If that is true, racoon has to decide where to deliver those packets, 
>> finally?
>> 
>> 3) If that is true, I do have an issue with routing that *cannot* be solved 
>> by pf firewall rules, right?
>> 
>> 4) If that is true, what do I have to look for? What am I missing? How can I 
>> route incoming and finally decrypted traffic to its final destination within 
>> a VNET jail?
>> 
>> 5) Do I need to look for a completely different approach? Every hint is 
>> highly welcome.
> 
> basically you have to treat the jails as if they are totally separate 
> machines that are reached through the vpn endpoints instead of being the 
> endpoints themselves.
> This will require a different setup.  for example your tunnel will need to be 
> exactly that  a tunnel and not just an encapsulation. And you will need full 
> routing information for the other end at each end.

Thanks for your input. In the meantime I got it running, somehow. The "somehow" 
refers to: I am not sure if that's the way its supposed to be.

What I did (I do only show the part of host [A], the other host is configured 
accordingly):

1. ipsec/tunnel between [A] dead:beef:1234:abcd::1 <—> dead:feed:abcd:1234::1 
[B]

   /path-to-racoon/setkey.conf:
        spdadd dead:beef:1234:abcd::/56 dead:feed:abcd:1234:1:2::3 any -P out 
ipsec esp/tunnel/dead:beef:1234:abcd::1-dead:feed:abcd:1234::1/require; 
        spdadd dead:feed:abcd:1234::/56 dead:beef:1234:abcd:1:2::3 any -P in  
ipsec esp/tunnel/dead:feed:abcd:1234::1-dead:beef:1234:abcd::1/require;

2. routing at [A]:

   /etc/rc.conf:
        ipv6_static_routes="jail1" 
        # that's for the route from host system [A] into jail1 with IPv6 
address of fd00:ffff:ffff:ffff:aaaa::1
—>      ipv6_route_mail="-host dead:beef:1234:abcd:1:2::3 -host 
fd00:ffff:ffff:ffff:aaaa::1"
 
  /etc/jail.conf:
        #
        # host dependent global settings
        #
        $ip6prefix               = "dead:beef:1234:abcd";
        $ip6prefix_remote_host   = "dead:feed:abcd:1234";

        #
        # global jail settings
        #
        host.hostname            = "${name}";
        path                     = "/usr/home/jails/${name}";
        mount.fstab              = "/etc/fstab.${name}";
        exec.consolelog          = "/var/log/jail_${name}_console.log";
        vnet                     = "new";
        vnet.interface           = "epair${jailID}b";
        exec.clean;
        mount.devfs;
        persist;
        #
        # network settings to apply/destroy during start/stop of every jail
        #
        exec.prestart            = "sleep 2";
        exec.prestart           += "ifconfig epair${jailID} create up";
        exec.prestart           += "ifconfig bridge0 addm epair${jailID}a";
        exec.start               = "/sbin/ifconfig lo0 127.0.0.1 up";
        exec.start              += "/sbin/ifconfig epair${jailID}b inet 
${ip4_addr}";
        exec.start              += "/sbin/ifconfig epair${jailID}b inet6 
${ip6_addr}";
        exec.start              += "/sbin/route add default -gateway 
10.x.x.254";
        exec.start              += "/sbin/route add -inet6 default -gateway 
fd00:ffff:ffff:ffff:aaaa::254";
        exec.stop                = "/bin/sh /etc/rc.shutdown";
        exec.poststop            = "ifconfig epair${jailID}a destroy";
        #
        # individual jail settings
        #
        mail {
                $jailID          = 1;
                $ip4_addr        = 10.x.x.1;
                $ip6_addr        = fd00:ffff:ffff:ffff:aaaa::1/64;
                exec.start      += "/sbin/ifconfig epair${jailID}b inet6 
${ip6prefix}:1:2::3/56 alias";
—>      # that's for the route to remote host dead:feed:abcd:1234:1:2::3 at 
tunnel end point [B] out of jail1
                exec.start      += "/sbin/route add -6 
${ip6prefix_remote_host}:1:2::3 fd00:ffff:ffff:ffff:aaaa::254";
                exec.start      += "/bin/sh /etc/rc";
        }

That is working well, after racoon has established the tunnel. 

*But* unlikely what I have observed before, the very first contact to the 
remote server's [B] jail out of a jail at [A] doesn't trigger racoon to 
establish the tunnel. Before, that happened instantaneously, but now I do need 
to to some "tricks" with ping6s and/or restarting racoon at the host system. I 
haven't found out yet what the cause is … I am sure that I need to learn much 
more regarding routing. Every feedback is highly welcome.

Thanks and regards,
Michael



_______________________________________________
freebsd-jail@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-jail
To unsubscribe, send any mail to "freebsd-jail-unsubscr...@freebsd.org"

Reply via email to