I have client and server ipv6 applications, each uses a virutal TAP interface and a user space Ipv6 stack. I connect the two tap interfaces with a bridge, and enabled ipv6 forwarding, but I'm finding that neighbor discovery does not work between the client and server because the bridge (or Linux) decrements the hop count in the IPv6 header (the hop count is expected to be 255 by the user space stack).
Is there a way to connect the tap interfaces without the bridge, or have the neighbor discovery packets pass through without modification?
I think the reason the hop count is decremented because of ip forwarding, I think that should be disabled actually the bridge should handle forwarding at layer 2. For some reason the bridge does not want to pass on the unicast ICMP6 messages.
I'm using Debian 9, the basic setup is:
ip tuntap add dev tap0 mode tap user YOUR-USER-NAME ip a a dev tap0 192.168.0.1/24 ip tuntap add dev tap1 mode tap user YOUR-USER-NAME ip a a dev tap1 192.168.0.2/24 brctl addbr br0 brctl addif br0 tap0 brctl addif br0 tap1
I have a server application connected to tap0 and a client connecte to tap1 and I want these to talk in order to test the userspace IP6 stack. When I run the command 'brctl showmacs br0', I get:
port no mac addr is local? ageing timer 1 2e:5f:ae:db:71:b1 yes 0.00 1 2e:5f:ae:db:71:b1 yes 0.00 2 92:9f:e7:8f:8d:a4 yes 0.00 2 92:9f:e7:8f:8d:a4 yes 0.00
This looks correct for the client and server MAC addresses, also I can see the unicast packets in wireshark when viewed from the interface br0, just for some reason these packets do not reach the other side.