On Sat, Mar 17, 2018 at 05:21:53PM -0700, Max Parmer wrote: > I've been having a good time running some VMD guests on 6.2 and assigning them > external IPs which are binat'd to them by the VM host. Recently I learned my > hosting provider delegates a /64 to it's dedicated boxes and thought this > might > be an interesting scenario to improve, and possibly simplify, by routing IPv6 > directly to my guests. > > To start, I ensured that IPv6 was properly functional on the host: > > # cat /etc/hostname.em0 > > inet6 autoconf > > inet6 2607:53xx:6x:7a3b:: 64 eui64 > > inet xxx.xxx.211.59 255.255.255.0 > > inet alias xxx.xxx.219.108 255.255.255.0 > > inet alias xxx.xx.248.240 255.255.255.0 > > inet alias xxx.xx.248.241 255.255.255.0 > > inet alias xxx.xx.248.242 255.255.255.0 > > inet alias xxx.xx.248.243 255.255.255.0 > > # cat /etc/mygate > > xxx.xxx.211.254 > > fe80::205:73ff:fea0:1%em0 > > # ifconfig em0 > > em0: flags=208843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF6> mtu 1500 > > lladdr 0c:c4:7a:45:37:34 > > index 1 priority 0 llprio 3 > > groups: egress > > media: Ethernet autoselect (1000baseT full-duplex,master,rxpause) > > status: active > > inet6 fe80::ec4:7aff:fe45:3734%em0 prefixlen 64 scopeid 0x1 > > inet6 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 prefixlen 64 > > inet xxx.xxx.211.59 netmask 0xffffff00 broadcast xxx.xxx.211.255 > > inet xxx.xxx.219.108 netmask 0xffffff00 broadcast xxx.xxx.219.255 > > inet xxx.xx.248.240 netmask 0xffffff00 broadcast xxx.xx.248.255 > > inet xxx.xx.248.241 netmask 0xffffff00 broadcast xxx.xx.248.255 > > inet xxx.xx.248.242 netmask 0xffffff00 broadcast xxx.xx.248.255 > > inet xxx.xx.248.243 netmask 0xffffff00 broadcast xxx.xx.248.255 > > # ifconfig vether0 > > vether0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 > > lladdr 00:00:d3:00:d0:0d > > index 5 priority 0 llprio 3 > > groups: vether > > media: Ethernet autoselect > > status: active > > inet6 fe80::200:d3ff:fe00:d00d%vether0 prefixlen 64 scopeid 0x5 > > inet 10.0.23.1 netmask 0xffffff00 broadcast 10.0.23.255 > > # ifconfig bridge0 > > bridge0: flags=41<UP,RUNNING> > > description: switch1-local > > index 6 llprio 3 > > groups: bridge > > priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp > > designated: id 00:00:00:00:00:00 priority 0 > > vether0 flags=3<LEARNING,DISCOVER> > > port 5 ifpriority 0 ifcost 0 > > tap0 flags=3<LEARNING,DISCOVER> > > port 8 ifpriority 0 ifcost 0 > > Addresses (max cache: 100, timeout: 240): > > 00:00:d3:00:12:00 tap0 1 flags=0<> > > # slaacctl show interface em0 > > em0: > > index: 1 running: yes privacy: yes > > lladdr: 0c:c4:7a:45:37:34 > > inet6: fe80::ec4:7aff:fe45:3734%em0 > > Router Advertisement from fe80::205:73ff:fea0:1%em0 > > received: 2018-03-17 20:01:39; 143s ago > > Cur Hop Limit: 64, M: 0, O: 0, Router Lifetime: 1800s > > Default Router Preference: Medium > > Reachable Time: 0ms, Retrans Timer: 0ms > > prefix: 2607:53xx:6x:7aff:ff:ff:ff:ff/56 > > On-link: 1, Autonomous address-configuration: 1 > > vltime: 2592000, pltime: 604800 > > Default router proposals > > id: 1, state: CONFIGURED > > router: fe80::205:73ff:fea0:1%em0 > > router lifetime: 1800 > > Preference: Medium > > updated: 2018-03-17 20:01:39; 143s ago, timeout: 1642s > > # route -nv show -inet6 > > Routing tables > > > > Internet6: > > Destination Gateway Flags > > Refs Use Mtu Prio Iface Label > > default fe80::205:73ff:fea0:1%em0 UGS > > 0 4 - 56 em0 "slaacd" > > ::/96 ::1 UGRS > > 0 0 32768 8 lo0 > > ::/104 ::1 UGRS > > 0 0 32768 8 lo0 > > ::1 ::1 UHhl > > 14 28 32768 1 lo0 > > ::127.0.0.0/104 ::1 UGRS > > 0 0 32768 8 lo0 > > ::224.0.0.0/100 ::1 UGRS > > 0 0 32768 8 lo0 > > ::255.0.0.0/104 ::1 UGRS > > 0 0 32768 8 lo0 > > ::ffff:0.0.0.0/96 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002::/24 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002:7f00::/24 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002:e000::/20 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002:ff00::/24 ::1 UGRS > > 0 0 32768 8 lo0 > > 2607:53xx:6x:7a3b::/64 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 UCn > > 0 0 - 4 em0 > > 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 0c:c4:7a:45:37:34 UHLl > > 0 173 - 1 em0 > > fe80::/10 ::1 UGRS > > 0 2 32768 8 lo0 > > fec0::/10 ::1 UGRS > > 0 0 32768 8 lo0 > > fe80::%em0/64 fe80::ec4:7aff:fe45:3734%em0 UCn > > 3 5 - 4 em0 > > fe80::205:73ff:fea0:1%em0 00:05:73:a0:00:01 UHLch > > 1 95 - 3 em0 > > fe80::2ff:ffff:feff:fffd%em0 00:ff:ff:ff:ff:fd UHLc > > 0 1155 - 3 em0 > > fe80::2ff:ffff:feff:fffe%em0 00:ff:ff:ff:ff:fe UHLc > > 0 945 - 3 em0 > > fe80::ec4:7aff:fe45:3734%em0 0c:c4:7a:45:37:34 UHLl > > 0 373 - 1 em0 > > fe80::1%lo0 fe80::1%lo0 UHl > > 0 0 32768 1 lo0 > > fe80::%vether0/64 fe80::200:d3ff:fe00:d00d%vether0 UCn > > 1 1 - 4 vether0 > > fe80::200:d3ff:fe00:1200%vether0 00:00:d3:00:12:00 UHLc > > 1 11 - 3 vether0 > > fe80::200:d3ff:fe00:d00d%vether0 00:00:d3:00:d0:0d UHLl > > 0 38 - 1 vether0 > > ff01::/16 ::1 UGRS > > 0 2 32768 8 lo0 > > ff01::%em0/32 fe80::ec4:7aff:fe45:3734%em0 Um > > 0 1 - 4 em0 > > ff01::%lo0/32 ::1 Um > > 0 1 32768 4 lo0 > > ff01::%vether0/32 fe80::200:d3ff:fe00:d00d%vether0 Um > > 0 0 - 4 vether0 > > ff02::/16 ::1 UGRS > > 0 2 32768 8 lo0 > > ff02::%em0/32 fe80::ec4:7aff:fe45:3734%em0 Um > > 0 1 - 4 em0 > > ff02::%lo0/32 ::1 Um > > 0 1 32768 4 lo0 > > ff02::%vether0/32 fe80::200:d3ff:fe00:d00d%vether0 Um > > 0 0 - 4 vether0 > > # ping6 -c3 google.com > > PING google.com (2607:f8b0:4004:809::200e): 56 data bytes > > 64 bytes from 2607:f8b0:4004:809::200e: icmp_seq=0 hlim=56 time=13.756 ms > > 64 bytes from 2607:f8b0:4004:809::200e: icmp_seq=1 hlim=56 time=13.748 ms > > 64 bytes from 2607:f8b0:4004:809::200e: icmp_seq=2 hlim=56 time=13.744 ms > > > > --- google.com ping statistics --- > > 3 packets transmitted, 3 packets received, 0.0% packet loss > > round-trip min/avg/max/std-dev = 13.744/13.749/13.756/0.005 ms > > # ftp -6 -Mo - https://wtfismyip.com/text > > Trying 2607:53xx:6x:7f8a::... > > Requesting https://wtfismyip.com/text > > 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 > > 37 bytes received in 0.00 seconds (145.11 KB/s) > > Next up, IPv6 forwarding on the host and interfaces for the guests: > > # cat /etc/sysctl.conf > > net.inet.ip.forwarding=1 > > net.inet6.ip6.forwarding=1 > > # cat /etc/hostname.vether0 > > lladdr 00:00:D3:00:D0:0D > > inet6 eui64 > > inet 10.0.23.1 255.255.255.0 NONE > > # cat /etc/hostname.bridge0 > > add vether0 > > up > > # egrep 'rtadvd|vmd' /etc/rc.conf.local > > rtadvd_flags=vether0 > > vmd_flags= > > # stat /etc/rtadvd.conf > > stat: /etc/rtadvd.conf: No such file or directory > > # cat /etc/vm.conf > > switch "local" { > > interface bridge0 > > add vether0 > > } > > vm "chat" { > > disable > > memory 1G > > owner maxp > > disk "/home/images/chat.img" > > interface tap { > > locked lladdr "00:00:D3:00:12:00" > > switch "local" > > } > > } > > # pfctl -d > > pfctl: pf not enabled > > I've got PF disabled for the moment, just to keep things simple. > > Then, within the VM... > > # cat /etc/hostname.vio0 > > dhcp > > inet6 autoconf > > inet6 alias 2607:53xx:6x:7a3b:: 64 eui64 > > # slaacctl show interface vio0 > > vio0: > > index: 1 running: yes privacy: yes > > lladdr: 00:00:d3:00:12:00 > > inet6: fe80::200:d3ff:fe00:1200%vio0 > > Router Advertisement from fe80::200:d3ff:fe00:d00d%vio0 > > received: 2018-03-17 22:05:48; 83s ago > > Cur Hop Limit: 64, M: 0, O: 0, Router Lifetime: 1800s > > Default Router Preference: Medium > > Reachable Time: 0ms, Retrans Timer: 0ms > > Default router proposals > > id: 1, state: CONFIGURED > > router: fe80::200:d3ff:fe00:d00d%vio0 > > router lifetime: 1800 > > Preference: Medium > > updated: 2018-03-17 22:05:48; 83s ago, timeout: 1702s > > # ifconfig vio0 > > vio0: > > flags=208b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST,AUTOCONF6> > > mtu 1500 > > lladdr 00:00:d3:00:12:00 > > index 1 priority 0 llprio 3 > > groups: egress > > media: Ethernet autoselect > > status: active > > inet 10.0.23.30 netmask 0xffffff00 broadcast 10.0.23.255 > > inet6 fe80::200:d3ff:fe00:1200%vio0 prefixlen 64 scopeid 0x1 > > inet6 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 prefixlen 64 > > # route -nv show -inet6 > > Routing tables > > > > Internet6: > > Destination Gateway Flags > > Refs Use Mtu Prio Iface Label > > default fe80::200:d3ff:fe00:d00d%vio0 UGS > > 0 0 - 56 vio0 "slaacd" > > ::/96 ::1 UGRS > > 0 0 32768 8 lo0 > > ::/104 ::1 UGRS > > 0 0 32768 8 lo0 > > ::1 ::1 UHhl > > 14 28 32768 1 lo0 > > ::127.0.0.0/104 ::1 UGRS > > 0 0 32768 8 lo0 > > ::224.0.0.0/100 ::1 UGRS > > 0 0 32768 8 lo0 > > ::255.0.0.0/104 ::1 UGRS > > 0 0 32768 8 lo0 > > ::ffff:0.0.0.0/96 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002::/24 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002:7f00::/24 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002:e000::/20 ::1 UGRS > > 0 0 32768 8 lo0 > > 2002:ff00::/24 ::1 UGRS > > 0 0 32768 8 lo0 > > 2607:53xx:6x:7a3b::/64 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 UCn > > 0 0 - 4 vio0 > > 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 00:00:d3:00:12:00 UHLl > > 0 0 - 1 vio0 > > fe80::/10 ::1 UGRS > > 0 1 32768 8 lo0 > > fec0::/10 ::1 UGRS > > 0 0 32768 8 lo0 > > fe80::%vio0/64 fe80::200:d3ff:fe00:1200%vio0 UCn > > 1 1 - 4 vio0 > > fe80::200:d3ff:fe00:1200%vio0 00:00:d3:00:12:00 UHLl > > 0 3 - 1 vio0 > > fe80::200:d3ff:fe00:d00d%vio0 00:00:d3:00:d0:0d UHLch > > 1 43 - 3 vio0 > > fe80::1%lo0 fe80::1%lo0 UHl > > 0 0 32768 1 lo0 > > ff01::/16 ::1 UGRS > > 0 1 32768 8 lo0 > > ff01::%vio0/32 fe80::200:d3ff:fe00:1200%vio0 Um > > 0 1 - 4 vio0 > > ff01::%lo0/32 ::1 Um > > 0 1 32768 4 lo0 > > ff02::/16 ::1 UGRS > > 0 1 32768 8 lo0 > > ff02::%vio0/32 fe80::200:d3ff:fe00:1200%vio0 Um > > 0 1 - 4 vio0 > > ff02::%lo0/32 ::1 Um > > 0 1 32768 4 lo0 > > # ifconfig vio0 > > vio0: > > flags=208b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST,AUTOCONF6> > > mtu 1500 > > lladdr 00:00:d3:00:12:00 > > index 1 priority 0 llprio 3 > > groups: egress > > media: Ethernet autoselect > > status: active > > inet 10.0.23.30 netmask 0xffffff00 broadcast 10.0.23.255 > > inet6 fe80::200:d3ff:fe00:1200%vio0 prefixlen 64 scopeid 0x1 > > inet6 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 prefixlen 64 > > # ping6 fe80::200:d3ff:fe00:d00d%vio0 > > PING fe80::200:d3ff:fe00:d00d%vio0 (fe80::200:d3ff:fe00:d00d%vio0): 56 data > > bytes > > 64 bytes from fe80::200:d3ff:fe00:d00d%vio0: icmp_seq=0 hlim=64 time=0.344 > > ms > > 64 bytes from fe80::200:d3ff:fe00:d00d%vio0: icmp_seq=1 hlim=64 time=0.208 > > ms > > 64 bytes from fe80::200:d3ff:fe00:d00d%vio0: icmp_seq=2 hlim=64 time=0.207 > > ms > > ^C > > --- fe80::200:d3ff:fe00:d00d%vio0 ping statistics --- > > 3 packets transmitted, 3 packets received, 0.0% packet loss > > round-trip min/avg/max/std-dev = 0.207/0.253/0.344/0.064 ms > > # ping6 2607:f8b0:400a:800::200e > > PING 2607:f8b0:400a:800::200e (2607:f8b0:400a:800::200e): 56 data bytes > > ^C > > --- 2607:f8b0:400a:800::200e ping statistics --- > > 3 packets transmitted, 0 packets received, 100.0% packet loss > > # ndp -an > > Neighbor Linklayer Address Netif Expire S > > Flags > > 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 00:00:d3:00:12:00 vio0 permanent R l > > fe80::200:d3ff:fe00:1200%vio0 00:00:d3:00:12:00 vio0 permanent R l > > fe80::200:d3ff:fe00:d00d%vio0 00:00:d3:00:d0:0d vio0 23h59m57s S R > > Back on the host: > > # ping6 2607:53xx:6x:7a3b:200:d3ff:fe00:1200%vether0 > > ping6: no address associated with name > > # ping6 fe80::200:d3ff:fe00:1200%vether0 > > PING fe80::200:d3ff:fe00:1200%vether0 (fe80::200:d3ff:fe00:1200%vether0): > > 56 data bytes > > 64 bytes from fe80::200:d3ff:fe00:1200%vether0: icmp_seq=0 hlim=64 > > time=0.265 ms > > 64 bytes from fe80::200:d3ff:fe00:1200%vether0: icmp_seq=1 hlim=64 > > time=0.237 ms > > 64 bytes from fe80::200:d3ff:fe00:1200%vether0: icmp_seq=2 hlim=64 > > time=0.218 ms > > 64 bytes from fe80::200:d3ff:fe00:1200%vether0: icmp_seq=3 hlim=64 > > time=0.220 ms > > ^C > > --- fe80::200:d3ff:fe00:1200%vether0 ping statistics --- > > 4 packets transmitted, 4 packets received, 0.0% packet loss > > round-trip min/avg/max/std-dev = 0.218/0.235/0.265/0.019 ms > > # ndp -a > > Neighbor Linklayer Address Netif Expire S > > Flags > > 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 0c:c4:7a:45:37:34 em0 permanent R l > > fe80::205:73ff:fea0:1%em0 00:05:73:a0:00:01 em0 18s R R > > fe80::2ff:ffff:feff:fffd%em0 00:ff:ff:ff:ff:fd em0 23h59m31s S R > > fe80::2ff:ffff:feff:fffe%em0 00:ff:ff:ff:ff:fe em0 23h58m49s S R > > fe80::ec4:7aff:fe45:3734%em0 0c:c4:7a:45:37:34 em0 permanent R l > > fe80::200:d3ff:fe00:1200%vether0 00:00:d3:00:12:00 vether0 23h59m34s S > > fe80::200:d3ff:fe00:d00d%vether0 00:00:d3:00:d0:0d vether0 permanent R > > lR > > Watching on em0 on the host I can see the v6 traffic from the guest leaving > and I can > see NDP traffic looking for who has 1200, but the reply never flows out: > > 1521332053.797396 00:ff:ff:ff:ff:fd 0c:c4:7a:45:37:34 86dd 86: > > fe80::2ff:ffff:feff:fffd > 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734: icmp6: > > neighbor sol: who has 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 [class 0xe0] > > 1521332053.797413 0c:c4:7a:45:37:34 00:ff:ff:ff:ff:fd 86dd 78: > > fe80::ec4:7aff:fe45:3734 > fe80::2ff:ffff:feff:fffd: icmp6: neighbor adv: > > tgt is 2607:53xx:6x:7a3b:ec4:7aff:fe45:3734 > > 1521332054.211392 00:ff:ff:ff:ff:fd 33:33:ff:00:12:00 86dd 86: > > fe80::2ff:ffff:feff:fffd > ff02::1:ff00:1200: icmp6: neighbor sol: who has > > 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 [class 0xe0] > > 1521332055.055953 00:05:73:a0:00:01 33:33:00:00:00:66 86dd 114: > > fe80::2ff:ffff:feff:fffd.2029 > ff02::66.2029: udp 52 [class 0xc0] > > 1521332055.393267 0c:c4:7a:45:37:34 00:05:73:a0:00:01 86dd 118: > > 2607:53xx:6x:7a3b:200:d3ff:fe00:1200 > 2607:f8b0:400a:800::200e: icmp6: > > echo request > > I also don't see the NDP traffic on vio0 on the guest. > > I'm probably missing something elementary, being a bit new to IPv6 routers. > Any > insights would be hugely helpful. >
Correction: I *do* see NDP traffic on vio0 on the guest after all, I didn't watch it long enough. -- 0x7D964D3361142ACF