Re: DHCPDv6 in non-vnet jail
- In reply to: Ronald Klop : "Re: DHCPDv6 in non-vnet jail"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 31 Mar 2022 18:03:36 UTC
On Wed, Mar 30, 2022 at 02:45:17PM +0200, Ronald Klop wrote:
> Hi,
>
> First. I'm not an IPv6 expert. Got it running at home. Although with SLAAC, not DHCP yet.
> Another disclaimer is that I use VNET-jails nowadays.
> But I like to try and think along with you.
>
> What surprises me is that your non-vnet jail does not have a LINKLOCAL fe80::: address. These addresses are used for configuration in the local network (AFAIK).
> And your routing table does not contain a line like this:
> ff02::/16 ::1 UGRS lo0
>
> So how is the ff02:: multicast routed in your network?
>
> But the tcpdump shows that the multicast solicit message is received on the non-vnet dhcp-server so that seems to work:
> 18:02:51.229813 IP6 fe80::2a0:98ff:fe7d:cad.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
> I don't know if the dhcp-server program also sees this request coming in on its interface. Maybe extra logging can help there.
>
> According to https://en.wikipedia.org/wiki/DHCPv6#Example the dhcp-server would reply with a link-local fe80:: address.
> "Server replies with an advertise from [fe80::0011:22ff:fe33:5566]:547 to [fe80::aabb:ccff:fedd:eeff]:546."
> But your dhcp-server does not have an fe80::.
>
> So I'm wondering how that would work.
>
> More questions than answers. But I hope it helps.
>
> Regards,
> Ronald.
Hello,
It helps narrow down the search! I created a small lab and this is
jail.conf:
path = "/usr/jails/${name}";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
dhcp {
host.hostname = dhcp.hal9000.meka.rs;
host.domainname = hal9000.meka.rs;
ip4.addr = 'bridge0|172.16.0.250';
ip6.addr = 'bridge0|fd10:6c79:8ae5:8b91::3';
ip6.addr += 'bridge0|fe80::dead:beef';
enforce_statfs = 1;
sysvshm = new;
sysvsem = new;
devfs_ruleset = 7;
allow.chflags;
allow.mount.devfs;
allow.mount.procfs;
allow.mount;
allow.mount.devfs;
allow.mount.procfs;
allow.mount.nullfs;
allow.mount.tmpfs;
allow.socket_af;
allow.raw_sockets;
persist;
}
client {
$id = 10;
host.hostname = client.hal9000.meka.rs;
host.domainname = hal9000.meka.rs;
enforce_statfs = 1;
sysvshm = new;
sysvsem = new;
devfs_ruleset = 8;
allow.chflags;
allow.mount.devfs;
allow.mount.procfs;
allow.mount;
allow.mount.devfs;
allow.mount.procfs;
allow.mount.nullfs;
allow.mount.tmpfs;
allow.socket_af;
allow.raw_sockets;
persist;
vnet;
vnet.interface = "epair${id}b";
exec.prestart = "ifconfig epair${id} create up";
exec.prestart += "ifconfig epair${id}a up descr vnet-${name}";
exec.prestart += "ifconfig bridge0 addm epair${id}a up";
exec.prestop = "ifconfig epair${id}b -vnet ${name}";
exec.poststop = "ifconfig bridge00 deletem epair${id}a";
exec.poststop += "ifconfig epair${id}a destroy";
}
Note the "dead:beef" address. Even if I remove that line I get the same
output of ifconfig inside dhcp jail:
ifconfig
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
ether bc:ae:c5:e1:31:d0
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: re0
ether 58:9c:fc:10:ff:90
inet 172.16.0.250 netmask 0xffffffff broadcast 172.16.0.250
inet6 fd10:6c79:8ae5:8b91::3 prefixlen 128
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: epair10a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 5 priority 128 path cost 2000
groups: bridge
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160
groups: pflog
epair10a: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: vnet-client
options=8<VLAN_MTU>
ether 02:82:6f:d8:f0:0a
groups: epair
media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
And this is relevant portion of /etc/rc.conf:
cloned_interfaces="bridge0"
ifconfig_bridge0="inet 172.16.0.254 netmask 255.255.255.0 description re0"
ifconfig_bridge0_ipv6="inet6 -ifdisabled auto_linklocal fd10:6c79:8ae5:8b91::1"
The following is ifconfig on host
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
ether bc:ae:c5:e1:31:d0
inet6 fe80::beae:c5ff:fee1:31d0%re0 prefixlen 64 scopeid 0x1
inet6 2001:470:1f1a:ae:beae:c5ff:fee1:31d0 prefixlen 64 autoconf
inet 192.168.111.3 netmask 0xffffff00 broadcast 192.168.111.255
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: re0
ether 58:9c:fc:10:ff:90
inet 172.16.0.254 netmask 0xffffff00 broadcast 172.16.0.255
inet 172.16.0.250 netmask 0xffffffff broadcast 172.16.0.250
inet6 fe80::5a9c:fcff:fe10:ff90%bridge0 prefixlen 64 scopeid 0x3
inet6 fd10:6c79:8ae5:8b91::1 prefixlen 64
inet6 fd10:6c79:8ae5:8b91::3 prefixlen 128
inet6 fe80::dead:beef%bridge0 prefixlen 128 scopeid 0x3
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: epair10a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 5 priority 128 path cost 2000
groups: bridge
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160
groups: pflog
epair10a: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: vnet-client
options=8<VLAN_MTU>
ether 02:82:6f:d8:f0:0a
groups: epair
media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
I can see "dead:beef" address until I stop the dhcp jail. I can also see
that auto_linklocal produced fe80 address (the first inet6 address) on
the host but not inside the jail.
Is there something I need to configure/start on the host or jail to have
link-local address inside non-vnet jail?
Regards,
meka