I hadn’t realized this before, but you can still use Teredo without using the P2P stack. By default, IPv6 sockets block incoming Teredo traffic. But if you set the socket’s IPv6 protection level to unrestricted, incoming Teredo traffic is allowed. Not sure how useful this is, especially since I haven’t seen an easy way to set the IPv6 protection level from managed code. You may be able to setsockopt using the Socket.Handle property, but I haven’t tested it.