Using IPv6 In Containers (Docker) on Scaleway, Vultr, Digitalocean and other non IPv6 Routed Servers

Most of the users use a proxy (like a nginx) front of containers to serve own services to global. In many case this is very basic, useful and cost is not noticeable, but if you serve network services cost is definitely noticeably.

If you try to control network traffic in higher ends (non-kernel applications), price of each packet for cpu is will be higher and also it can more effects other program cpu usages and it will be create latency and high jitter.

We are live in 21th century, we have a IPv6 and we have container system, so we can eliminate these problems with giving IP address to each program to reduce cpu cost.

Most of the cloud providers use a NDP (NDP is similar to ARP) to serving IPv6 address.
But while using docker ndp packets cannot passthrough from eth0 interface to docker interface.
Main router cannot discovery your container.

You can solve this with adding main network interface to bridge and connect main bridge to docker bridge networks with veth.
But each creation of docker bridge requires this proccess. Do you want to realy spent effort to creating and managing virtual ethernet cables and bridges ?
I don’t thing so, and also some times you don’t want to connect docker networks to each other for some security reasons.
In my case Bridge is impossible to usage due to cloud provider mac address limitations.
I create script to make a ndp proxy with linux kernel features.

Amount of my containers reach too high and I don’t want to execute this script by manual.
So i can use ndppd to solve this problem but I have a many servers for many locations and configuring each server by one by its not for me. Some times IPv6 blocks will be change, some times I reset the server and delete all data.

I fork to Daniel’s Ndppd project and I add some auto configuration functions and make as a docker container.

Now one single command is solve my this problem, here is magic command.

docker run -it --restart always --cap-add NET_ADMIN --cap-add NET_RAW --network host ahmetozer/ndppd

You can configure by environment variables in docker, to more please visit https://github.com/ahmetozer/ndppd